From ee05a31841852f14d7cf422e519831593004e76e Mon Sep 17 00:00:00 2001 From: Konrad Dysput Date: Thu, 18 Nov 2021 07:41:32 -0800 Subject: [PATCH 1/7] Native client compilation issues in older .NET platforms (#134) * Android compilation issues * Add missing namespace --- Runtime/Native/Android/NativeClient.cs | 3 ++- Runtime/Native/Windows/NativeClient.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Runtime/Native/Android/NativeClient.cs b/Runtime/Native/Android/NativeClient.cs index 663b69bc..faefb3b8 100644 --- a/Runtime/Native/Android/NativeClient.cs +++ b/Runtime/Native/Android/NativeClient.cs @@ -119,9 +119,10 @@ private void SetDefaultAttributeMaps() private AndroidJavaObject _unhandledExceptionWatcher; private readonly bool _enableClientSideUnwinding = false; - public string GameObjectName { get; internal set; } = BacktraceClient.DefaultBacktraceGameObjectName; + public string GameObjectName { get; internal set; } public NativeClient(BacktraceConfiguration configuration, BacktraceBreadcrumbs breadcrumbs, IDictionary clientAttributes, IEnumerable attachments) : base(configuration, breadcrumbs) { + GameObjectName = BacktraceClient.DefaultBacktraceGameObjectName; SetDefaultAttributeMaps(); if (!_enabled) { diff --git a/Runtime/Native/Windows/NativeClient.cs b/Runtime/Native/Windows/NativeClient.cs index 9236e723..3ddd13fc 100644 --- a/Runtime/Native/Windows/NativeClient.cs +++ b/Runtime/Native/Windows/NativeClient.cs @@ -1,6 +1,7 @@ #if UNITY_STANDALONE_WIN using Backtrace.Unity.Interfaces; using Backtrace.Unity.Model; +using Backtrace.Unity.Extensions; using Backtrace.Unity.Model.Breadcrumbs; using Backtrace.Unity.Model.Breadcrumbs.Storage; using Backtrace.Unity.Runtime.Native.Base; From 8efd3107d73ad14b684d038b396a13c1325442dd Mon Sep 17 00:00:00 2001 From: Konrad Dysput Date: Fri, 19 Nov 2021 05:25:05 -0800 Subject: [PATCH 2/7] Apply default when value is below limit (#133) * Apply default when value is below limit * use defaults and different cast for backtracedatabasesettings --- Editor/BacktraceConfigurationEditor.cs | 52 ++++++++++--------- .../BacktraceDatabaseConfigurationEditor.cs | 8 +-- Runtime/Model/BacktraceConfiguration.cs | 22 +++++--- .../Database/BacktraceDatabaseSettings.cs | 4 +- 4 files changed, 49 insertions(+), 37 deletions(-) diff --git a/Editor/BacktraceConfigurationEditor.cs b/Editor/BacktraceConfigurationEditor.cs index 8038ff1c..7183a665 100644 --- a/Editor/BacktraceConfigurationEditor.cs +++ b/Editor/BacktraceConfigurationEditor.cs @@ -32,9 +32,7 @@ public override void OnInspectorGUI() serializedObject.FindProperty("HandleUnhandledExceptions"), new GUIContent(BacktraceConfigurationLabels.LABEL_HANDLE_UNHANDLED_EXCEPTION)); - EditorGUILayout.PropertyField( - serializedObject.FindProperty("ReportPerMin"), - new GUIContent(BacktraceConfigurationLabels.LABEL_REPORT_PER_MIN)); + DrawIntegerTextboxWithDefault("ReportPerMin", BacktraceConfigurationLabels.LABEL_REPORT_PER_MIN, 0, BacktraceConfiguration.DefaultReportPerMin, serializedObject); GUIStyle clientAdvancedSettingsFoldout = new GUIStyle(EditorStyles.foldout); showClientAdvancedSettings = EditorGUILayout.Foldout(showClientAdvancedSettings, "Client advanced settings", clientAdvancedSettingsFoldout); @@ -62,10 +60,7 @@ public override void OnInspectorGUI() } DrawMultiselectDropdown("ReportFilterType", reportFilterType, BacktraceConfigurationLabels.LABEL_REPORT_FILTER, serializedObject); - - EditorGUILayout.PropertyField( - serializedObject.FindProperty("NumberOfLogs"), - new GUIContent(BacktraceConfigurationLabels.LABEL_NUMBER_OF_LOGS)); + DrawIntegerTextboxWithDefault("NumberOfLogs", BacktraceConfigurationLabels.LABEL_NUMBER_OF_LOGS, 0, BacktraceConfiguration.DefaultNumberOfLogs, serializedObject); EditorGUILayout.PropertyField( serializedObject.FindProperty("PerformanceStatistics"), @@ -79,16 +74,11 @@ public override void OnInspectorGUI() serializedObject.FindProperty("Sampling"), new GUIContent(BacktraceConfigurationLabels.LABEL_SAMPLING)); - SerializedProperty gameObjectDepth = serializedObject.FindProperty("GameObjectDepth"); - EditorGUILayout.PropertyField(gameObjectDepth, new GUIContent(BacktraceConfigurationLabels.LABEL_GAME_OBJECT_DEPTH)); + DrawIntegerTextboxWithDefault("GameObjectDepth", BacktraceConfigurationLabels.LABEL_GAME_OBJECT_DEPTH, -1, BacktraceConfiguration.DefaultGameObjectDepth, serializedObject); - if (gameObjectDepth.intValue < -1) - { - EditorGUILayout.HelpBox("Please insert value greater or equal -1", MessageType.Error); - } EditorGUILayout.PropertyField( - serializedObject.FindProperty("DisableInEditor"), - new GUIContent(BacktraceConfigurationLabels.DISABLE_IN_EDITOR)); + serializedObject.FindProperty("DisableInEditor"), + new GUIContent(BacktraceConfigurationLabels.DISABLE_IN_EDITOR)); } #if !UNITY_WEBGL @@ -213,18 +203,12 @@ public override void OnInspectorGUI() serializedObject.FindProperty("GenerateScreenshotOnException"), new GUIContent(BacktraceConfigurationLabels.LABEL_GENERATE_SCREENSHOT_ON_EXCEPTION)); - SerializedProperty maxRecordCount = serializedObject.FindProperty("MaxRecordCount"); - EditorGUILayout.PropertyField(maxRecordCount, new GUIContent(BacktraceConfigurationLabels.LABEL_MAX_REPORT_COUNT)); - - SerializedProperty maxDatabaseSize = serializedObject.FindProperty("MaxDatabaseSize"); - EditorGUILayout.PropertyField(maxDatabaseSize, new GUIContent(BacktraceConfigurationLabels.LABEL_MAX_DATABASE_SIZE)); - - SerializedProperty retryInterval = serializedObject.FindProperty("RetryInterval"); - EditorGUILayout.PropertyField(retryInterval, new GUIContent(BacktraceConfigurationLabels.LABEL_RETRY_INTERVAL)); + DrawIntegerTextboxWithDefault("MaxRecordCount", BacktraceConfigurationLabels.LABEL_MAX_REPORT_COUNT, 1, BacktraceConfiguration.DefaultMaxRecordCount, serializedObject); + DrawIntegerTextboxWithDefault("MaxDatabaseSize", BacktraceConfigurationLabels.LABEL_MAX_DATABASE_SIZE, 0, BacktraceConfiguration.DefaultMaxDatabaseSize, serializedObject); + DrawIntegerTextboxWithDefault("RetryInterval", BacktraceConfigurationLabels.LABEL_RETRY_INTERVAL, 1, BacktraceConfiguration.DefaultRetryInterval, serializedObject); EditorGUILayout.LabelField("Backtrace database require at least one retry."); - SerializedProperty retryLimit = serializedObject.FindProperty("RetryLimit"); - EditorGUILayout.PropertyField(retryLimit, new GUIContent(BacktraceConfigurationLabels.LABEL_RETRY_LIMIT)); + DrawIntegerTextboxWithDefault("RetryLimit", BacktraceConfigurationLabels.LABEL_RETRY_LIMIT, 0, BacktraceConfiguration.DefaultRetryLimit, serializedObject); SerializedProperty retryOrder = serializedObject.FindProperty("RetryOrder"); EditorGUILayout.PropertyField(retryOrder, new GUIContent(BacktraceConfigurationLabels.LABEL_RETRY_ORDER)); @@ -234,6 +218,24 @@ public override void OnInspectorGUI() serializedObject.ApplyModifiedProperties(); } + + /// + /// Draw the textbox control dedicated to unsigned integers and apply default if user passes negative value + /// + /// Backtrace configuration property name + /// Property label + /// Default value + /// Configuration object + private static void DrawIntegerTextboxWithDefault(string propertyName, string label, int minimumValue, int defaultValue, SerializedObject serializedObject) + { + var property = serializedObject.FindProperty(propertyName); + EditorGUILayout.PropertyField(property, new GUIContent(label)); + if (property.intValue < minimumValue) + { + property.intValue = defaultValue; + } + } + /// /// Draw multiselect dropdown. By default PropertyField won't work correctly in Unity 2017/2018 /// if editor has to display multiselect dropdown by using enum flags. This code allows to generate diff --git a/Editor/BacktraceDatabaseConfigurationEditor.cs b/Editor/BacktraceDatabaseConfigurationEditor.cs index bef04be4..3688b10b 100644 --- a/Editor/BacktraceDatabaseConfigurationEditor.cs +++ b/Editor/BacktraceDatabaseConfigurationEditor.cs @@ -23,7 +23,7 @@ public override void OnInspectorGUI() #if UNITY_STANDALONE_WIN settings.MinidumpType = (MiniDumpType)EditorGUILayout.EnumFlagsField(BacktraceConfigurationLabels.LABEL_MINIDUMP_SUPPORT, settings.MinidumpType); #else - settings.MinidumpType = MiniDumpType.None; + settings.MinidumpType = MiniDumpType.None; #endif @@ -37,12 +37,12 @@ public override void OnInspectorGUI() settings.MaxRecordCount = EditorGUILayout.IntField(BacktraceConfigurationLabels.LABEL_MAX_REPORT_COUNT, settings.MaxRecordCount); if (settings.MaxRecordCount < 0) { - settings.MaxRecordCount = 0; + settings.MaxRecordCount = BacktraceConfiguration.DefaultMaxRecordCount; } settings.MaxDatabaseSize = EditorGUILayout.LongField(BacktraceConfigurationLabels.LABEL_MAX_DATABASE_SIZE, settings.MaxDatabaseSize); if (settings.MaxDatabaseSize < 0) { - settings.MaxDatabaseSize = 0; + settings.MaxDatabaseSize = BacktraceConfiguration.DefaultMaxDatabaseSize; } @@ -51,7 +51,7 @@ public override void OnInspectorGUI() settings.RetryLimit = EditorGUILayout.IntField(BacktraceConfigurationLabels.LABEL_RETRY_LIMIT, settings.RetryLimit); if (settings.RetryLimit < 0) { - settings.RetryLimit = 1; + settings.RetryLimit = BacktraceConfiguration.DefaultRetryLimit; } settings.RetryOrder = (RetryOrder)EditorGUILayout.EnumPopup(BacktraceConfigurationLabels.LABEL_RETRY_ORDER, settings.RetryOrder); } diff --git a/Runtime/Model/BacktraceConfiguration.cs b/Runtime/Model/BacktraceConfiguration.cs index fa3d1094..13a44969 100644 --- a/Runtime/Model/BacktraceConfiguration.cs +++ b/Runtime/Model/BacktraceConfiguration.cs @@ -28,6 +28,14 @@ public class BacktraceConfiguration : ScriptableObject UnityEngineLogLevel.Info | UnityEngineLogLevel.Warning; + public const int DefaultRetryLimit = 3; + public const int DefaultReportPerMin = 50; + public const int DefaultGameObjectDepth = -1; + public const int DefaultNumberOfLogs = 10; + public const int DefaultMaxRecordCount = 8; + public const int DefaultMaxDatabaseSize = 0; + public const int DefaultRetryInterval = 60; + /// /// Backtrace server url /// @@ -44,7 +52,7 @@ public class BacktraceConfiguration : ScriptableObject /// Maximum number reports per minute /// [Tooltip("Reports per minute: Limits the number of reports the client will send per minutes. If set to 0, there is no limit. If set to a higher value and the value is reached, the client will not send any reports until the next minute. Default: 50")] - public int ReportPerMin = 50; + public int ReportPerMin = DefaultReportPerMin; /// /// "Disable error reporting integration in editor mode. @@ -96,13 +104,13 @@ public class BacktraceConfiguration : ScriptableObject /// Game object depth in Backtrace report /// [Tooltip("Allows developer to filter number of game object childrens in Backtrace report.")] - public int GameObjectDepth = -1; + public int GameObjectDepth = DefaultGameObjectDepth; /// /// Number of logs collected by Backtrace-Unity /// [Tooltip("Number of logs collected by Backtrace-Unity")] - public uint NumberOfLogs = 10; + public uint NumberOfLogs = DefaultNumberOfLogs; /// /// Flag that allows to include performance statistics in Backtrace report @@ -261,23 +269,23 @@ public class BacktraceConfiguration : ScriptableObject /// Maximum number of stored reports in Database. If value is equal to zero, then limit not exists /// [Tooltip("This is one of two limits you can impose for controlling the growth of the offline store. This setting is the maximum number of stored reports in database. If value is equal to zero, then limit not exists, When the limit is reached, the database will remove the oldest entries.")] - public int MaxRecordCount = 8; + public int MaxRecordCount = DefaultMaxRecordCount; /// /// Database size in MB /// [Tooltip("This is the second limit you can impose for controlling the growth of the offline store. This setting is the maximum database size in MB. If value is equal to zero, then size is unlimited, When the limit is reached, the database will remove the oldest entries.")] - public long MaxDatabaseSize; + public long MaxDatabaseSize = DefaultMaxDatabaseSize; /// /// How much seconds library should wait before next retry. /// [Tooltip("If the database is unable to send its record, this setting specifies how many seconds the library should wait between retries.")] - public int RetryInterval = 60; + public int RetryInterval = DefaultRetryInterval; /// /// Maximum number of retries [Tooltip("If the database is unable to send its record, this setting specifies the maximum number of retries before the system gives up.")] - public int RetryLimit = 3; + public int RetryLimit = DefaultRetryLimit; /// /// Retry order diff --git a/Runtime/Model/Database/BacktraceDatabaseSettings.cs b/Runtime/Model/Database/BacktraceDatabaseSettings.cs index 36c934d1..bd050166 100644 --- a/Runtime/Model/Database/BacktraceDatabaseSettings.cs +++ b/Runtime/Model/Database/BacktraceDatabaseSettings.cs @@ -9,6 +9,7 @@ namespace Backtrace.Unity.Model.Database public class BacktraceDatabaseSettings { private readonly BacktraceConfiguration _configuration; + private readonly uint _retryInterval; public BacktraceDatabaseSettings(string databasePath, BacktraceConfiguration configuration) { if (configuration == null || string.IsNullOrEmpty(databasePath)) @@ -18,6 +19,7 @@ public BacktraceDatabaseSettings(string databasePath, BacktraceConfiguration con DatabasePath = databasePath; _configuration = configuration; + _retryInterval = configuration.RetryInterval > 0 ? (uint)_configuration.RetryInterval : BacktraceConfiguration.DefaultRetryInterval; } /// /// Directory path where reports and minidumps are stored @@ -68,7 +70,7 @@ public uint RetryInterval { get { - return Convert.ToUInt32(_configuration.RetryInterval); + return _retryInterval; } } From 203f5d999b967ec5cec1fd7485a08faaae7df5b5 Mon Sep 17 00:00:00 2001 From: Konrad Dysput Date: Fri, 19 Nov 2021 15:28:23 +0100 Subject: [PATCH 3/7] Backtrace-cocoa - purge invalid report on game startup --- iOS/libBacktrace-Unity-Cocoa.a | Bin 11762512 -> 11763576 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/iOS/libBacktrace-Unity-Cocoa.a b/iOS/libBacktrace-Unity-Cocoa.a index a94bafcf1ca581ad48d8a427ddfe9c2f9ad52272..edfabe46b19d06d3b20016062ff8b264bc1567cf 100644 GIT binary patch delta 63681 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 delta 62915 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 LS(f~6UDy8)3N`=A From e3d5f55ece743cec08f3beae9e27f68c5afca859 Mon Sep 17 00:00:00 2001 From: Konrad Dysput Date: Tue, 23 Nov 2021 09:39:54 -0800 Subject: [PATCH 4/7] Improvement/prevent duplicated anrs (#135) * Safe way to serialize Backtrace response * Configurable ANR watchdog timeout * Formatting + logger changes * Code review suggestions --- Android/BacktraceANRWatchdog.java | 21 +++++++++++-------- Runtime/Model/BacktraceConfiguration.cs | 6 ++++++ Runtime/Model/BacktraceResult.cs | 28 +++++++++++++++---------- Runtime/Native/Android/NativeClient.cs | 4 ++-- Runtime/Native/Base/NativeClientBase.cs | 4 ++++ Runtime/Native/Windows/NativeClient.cs | 2 +- Runtime/Native/iOS/NativeClient.cs | 2 +- 7 files changed, 43 insertions(+), 24 deletions(-) diff --git a/Android/BacktraceANRWatchdog.java b/Android/BacktraceANRWatchdog.java index c8a28118..c61fef27 100644 --- a/Android/BacktraceANRWatchdog.java +++ b/Android/BacktraceANRWatchdog.java @@ -21,11 +21,6 @@ public class BacktraceANRWatchdog extends Thread { private final static transient String LOG_TAG = BacktraceANRWatchdog.class.getSimpleName(); - /** - * Default timeout value in milliseconds - */ - private final static transient int DEFAULT_ANR_TIMEOUT = 5000; - /** * Enable debug mode - errors will not be sent if the debugger is connected @@ -62,11 +57,11 @@ public class BacktraceANRWatchdog extends Thread { /** * Initialize new instance of BacktraceANRWatchdog with default timeout */ - public BacktraceANRWatchdog(String gameObjectName, String methodName) { + public BacktraceANRWatchdog(String gameObjectName, String methodName, int anrTimeout) { Log.d(LOG_TAG, "Initializing ANR watchdog"); this.methodName = methodName; this.gameObjectName = gameObjectName; - this.timeout = DEFAULT_ANR_TIMEOUT; + this.timeout = anrTimeout; this.debug = false; BacktraceANRWatchdog._instance = this; this.start(); @@ -77,9 +72,10 @@ public BacktraceANRWatchdog(String gameObjectName, String methodName) { */ @Override public void run() { + Boolean reported = false; + Log.d(LOG_TAG, "Starting ANR watchdog. Anr timeout: " + this.timeout); while (!shouldStop && !isInterrupted()) { String dateTimeNow = Calendar.getInstance().getTime().toString(); - Log.d(LOG_TAG, "ANR WATCHDOG - " + dateTimeNow); final backtrace.io.backtrace_unity_android_plugin.BacktraceThreadWatcher threadWatcher = new backtrace.io.backtrace_unity_android_plugin.BacktraceThreadWatcher(0, 0); mainThreadHandler.post(new Runnable() { @Override @@ -96,7 +92,7 @@ public void run() { threadWatcher.tickPrivateCounter(); if (threadWatcher.getCounter() == threadWatcher.getPrivateCounter()) { - Log.d(LOG_TAG, "ANR is not detected"); + reported = false; continue; } @@ -105,6 +101,12 @@ public void run() { "is on and connected debugger"); continue; } + if (reported) { + // skipping, because we already reported an ANR report for current ANR + continue; + } + reported = true; + Log.d(LOG_TAG, "Detected blocked Java thread. Reporting Java ANR."); NotifyUnityAboutANR(); } } @@ -129,5 +131,6 @@ public static void printStackTrace(StackTraceElement[] stackTrace, PrintWriter p public void stopMonitoring() { Log.d(LOG_TAG, "ANR handler has been disabled."); shouldStop = true; + BacktraceANRWatchdog._instance = null; } } diff --git a/Runtime/Model/BacktraceConfiguration.cs b/Runtime/Model/BacktraceConfiguration.cs index 13a44969..4c782da8 100644 --- a/Runtime/Model/BacktraceConfiguration.cs +++ b/Runtime/Model/BacktraceConfiguration.cs @@ -28,6 +28,7 @@ public class BacktraceConfiguration : ScriptableObject UnityEngineLogLevel.Info | UnityEngineLogLevel.Warning; + public const int DefaultAnrWatchdogTimeout = 5000; public const int DefaultRetryLimit = 3; public const int DefaultReportPerMin = 50; public const int DefaultGameObjectDepth = -1; @@ -144,6 +145,11 @@ public class BacktraceConfiguration : ScriptableObject [Tooltip("Capture ANR events - Application not responding")] public bool HandleANR = true; + /// + /// Anr watchdog timeout in ms. Time needed to detect an ANR event + /// + public int AnrWatchdogTimeout = DefaultAnrWatchdogTimeout; + #if UNITY_ANDROID || UNITY_IOS /// /// Send Out of memory exceptions to Backtrace. diff --git a/Runtime/Model/BacktraceResult.cs b/Runtime/Model/BacktraceResult.cs index 544413e1..926917fb 100644 --- a/Runtime/Model/BacktraceResult.cs +++ b/Runtime/Model/BacktraceResult.cs @@ -114,20 +114,26 @@ internal void AddInnerResult(BacktraceResult innerResult) public static BacktraceResult FromJson(string json) { - if (string.IsNullOrEmpty(json)) - { - return new BacktraceResult() - { - Status = BacktraceResultStatus.Empty - }; - } - var rawResult = JsonUtility.FromJson(json); var result = new BacktraceResult() { - response = rawResult.response, - _rxId = rawResult._rxid, - Status = rawResult.response == "ok" ? BacktraceResultStatus.Ok : BacktraceResultStatus.ServerError + Status = string.IsNullOrEmpty(json) ? BacktraceResultStatus.Empty : BacktraceResultStatus.Ok }; + + if (result.Status == BacktraceResultStatus.Empty) + { + return result; + } + + try + { + var rawResult = JsonUtility.FromJson(json); + result.response = rawResult.response; + result._rxId = rawResult._rxid; + } + catch (Exception e) + { + Debug.LogWarning(string.Format("Cannot parse Backtrace JSON response. Error: {0}. Content: {1}", json, e.Message)); + } return result; } diff --git a/Runtime/Native/Android/NativeClient.cs b/Runtime/Native/Android/NativeClient.cs index faefb3b8..72acda34 100644 --- a/Runtime/Native/Android/NativeClient.cs +++ b/Runtime/Native/Android/NativeClient.cs @@ -383,7 +383,7 @@ public void HandleAnr() } try { - _anrWatcher = new AndroidJavaObject(_anrPath, GameObjectName, CallbackMethodName); + _anrWatcher = new AndroidJavaObject(_anrPath, GameObjectName, CallbackMethodName, AnrWatchdogTimeout); } catch (Exception e) { @@ -441,7 +441,7 @@ public void HandleAnr() // we won't false positive ANR report lastUpdatedCache = 0; } - Thread.Sleep(5000); + Thread.Sleep(AnrWatchdogTimeout); } }); AnrThread.IsBackground = true; diff --git a/Runtime/Native/Base/NativeClientBase.cs b/Runtime/Native/Base/NativeClientBase.cs index 1fc1b0af..661aae87 100644 --- a/Runtime/Native/Base/NativeClientBase.cs +++ b/Runtime/Native/Base/NativeClientBase.cs @@ -13,6 +13,7 @@ internal abstract class NativeClientBase protected const string CrashType = "Crash"; protected const string ErrorTypeAttribute = "error.type"; + protected int AnrWatchdogTimeout; /// /// Determine if ANR occurred and NativeClient should report ANR in breadcrumbs /// @@ -57,6 +58,9 @@ internal NativeClientBase(BacktraceConfiguration configuration, BacktraceBreadcr _configuration = configuration; _breadcrumbs = breadcrumbs; _shouldLogAnrsInBreadcrumbs = ShouldStoreAnrBreadcrumbs(); + AnrWatchdogTimeout = configuration.AnrWatchdogTimeout > 1000 + ? configuration.AnrWatchdogTimeout + : BacktraceConfiguration.DefaultAnrWatchdogTimeout; } /// diff --git a/Runtime/Native/Windows/NativeClient.cs b/Runtime/Native/Windows/NativeClient.cs index 3ddd13fc..cdc58309 100644 --- a/Runtime/Native/Windows/NativeClient.cs +++ b/Runtime/Native/Windows/NativeClient.cs @@ -188,7 +188,7 @@ public void HandleAnr() // we won't false positive ANR report lastUpdatedCache = 0; } - Thread.Sleep(5000); + Thread.Sleep(AnrWatchdogTimeout); } }); AnrThread.IsBackground = true; diff --git a/Runtime/Native/iOS/NativeClient.cs b/Runtime/Native/iOS/NativeClient.cs index e17cf737..760d39f8 100644 --- a/Runtime/Native/iOS/NativeClient.cs +++ b/Runtime/Native/iOS/NativeClient.cs @@ -188,7 +188,7 @@ public void HandleAnr() // we won't false positive ANR report lastUpdatedCache = 0; } - Thread.Sleep(5000); + Thread.Sleep(AnrWatchdogTimeout); } }); From 3a68b37e412cfe7f62f3d6629197280bd6cbebda Mon Sep 17 00:00:00 2001 From: kdysput Date: Tue, 23 Nov 2021 18:43:01 +0100 Subject: [PATCH 5/7] Version update --- Runtime/BacktraceClient.cs | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Runtime/BacktraceClient.cs b/Runtime/BacktraceClient.cs index 1a94f71f..b45a3ce3 100644 --- a/Runtime/BacktraceClient.cs +++ b/Runtime/BacktraceClient.cs @@ -24,7 +24,7 @@ namespace Backtrace.Unity /// public class BacktraceClient : MonoBehaviour, IBacktraceClient { - public const string VERSION = "3.7.0"; + public const string VERSION = "3.7.1"; internal const string DefaultBacktraceGameObjectName = "BacktraceClient"; public BacktraceConfiguration Configuration; diff --git a/package.json b/package.json index dbd6f754..4f4579f7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "io.backtrace.unity", "displayName": "Backtrace", - "version": "3.7.0", + "version": "3.7.1", "unity": "2017.1", "description": "Backtrace's integration with Unity games allows customers to capture and report handled and unhandled Unity exceptions to their Backtrace instance, instantly offering the ability to prioritize and debug software errors.", "keywords": [ From 0d83252eecbe5569b7af82a99bdb581f0553c45f Mon Sep 17 00:00:00 2001 From: Vincent Lussenburg Date: Tue, 23 Nov 2021 12:49:12 -0500 Subject: [PATCH 6/7] Update CHANGELOG.md --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf3aee3..2e8f3b27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Backtrace Unity Release Notes +## Version 3.7.1 + +New functionality + +- Where not allowed, negative number values in the Backtrace Configuration Asset will automatically be reset to zero. + +Bugfixes + +- Fixed redundant ANR detection +- Improved ANR configurability. Client settings not allow you to specify how many seconds of a delay constitutes an ANR. This value can be set dynamically based on the the exact devices, choosing higher values for older devices for example. +- Add iOS cleanup for invalid cached reports +- Backward compatibility support for .NET 3.5 + ## Version 3.7.0 - When an ANR/Hang is detected, it is now added to the Breadcrumbs on all the platforms we support ANRs for From 962b5e6476aaf8d706cdacfba325ce049d12d757 Mon Sep 17 00:00:00 2001 From: Vincent Lussenburg Date: Tue, 23 Nov 2021 12:50:44 -0500 Subject: [PATCH 7/7] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e8f3b27..ff7bce90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ New functionality -- Where not allowed, negative number values in the Backtrace Configuration Asset will automatically be reset to zero. +- Where not allowed, negative number values in the Backtrace Configuration Asset will automatically be reset to the default value. Bugfixes