From d3a14b406e1f6cd0666c2a4afb0483c54acb7991 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 28 Aug 2025 14:50:21 +0200 Subject: [PATCH 01/11] Deduplicate trace generation --- .../SceneManagerTracingIntegration.cs | 15 +++++++++++- .../TraceGenerationIntegration.cs | 23 +++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs index e01a0d390..e5d5de0b1 100644 --- a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs +++ b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs @@ -1,5 +1,6 @@ using Sentry.Extensibility; using Sentry.Integrations; +using UnityEngine; using UnityEngine.SceneManagement; namespace Sentry.Unity; @@ -39,7 +40,19 @@ protected override UnityEngine.AsyncOperation LoadSceneAsyncByNameOrIndex(string _logger?.LogInfo("Creating '{0}' transaction for '{1}'.", TransactionOperation, sceneName); var transaction = SentrySdk.StartTransaction("scene.loading", TransactionOperation); - SentrySdk.ConfigureScope(scope => scope.Transaction = transaction); + SentrySdk.ConfigureScope(scope => + { + if (scope.Transaction is not null) + { + Debug.Log("HUEHUEHUE"); + } + else + { + Debug.Log("SADADADADAD"); + } + + scope.Transaction = transaction; + }); _logger?.LogDebug("Creating '{0}' span.", SpanOperation); var span = SentrySdk.GetSpan()?.StartChild(SpanOperation, sceneName ?? $"buildIndex:{sceneBuildIndex}"); diff --git a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs index 89a98c768..2a428055a 100644 --- a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs +++ b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs @@ -19,19 +19,32 @@ internal TraceGenerationIntegration(ISentryMonoBehaviour sentryMonoBehaviour, IS public void Register(IHub hub, SentryOptions options) { - hub.ConfigureScope(UpdatePropagationContext); - _sentryMonoBehaviour.ApplicationResuming += () => { options.DiagnosticLogger?.LogDebug("Application resumed. Creating new Trace."); hub.ConfigureScope(UpdatePropagationContext); }; - _sceneManager.ActiveSceneChanged += (_, _) => + if (options is not SentryUnityOptions unityOptions || unityOptions.TracesSampleRate > 0) + { + return; + } + + if (!unityOptions.AutoStartupTraces) { - options.DiagnosticLogger?.LogDebug("Active Scene changed. Creating new Trace."); + // The generated trace would immediately get overwritten by the StartupTracingIntegration hub.ConfigureScope(UpdatePropagationContext); - }; + } + + if (!unityOptions.AutoSceneLoadTraces) + { + // The generated trace would immediately get overwritten by the SceneManagerTracingIntegration + _sceneManager.ActiveSceneChanged += (_, _) => + { + options.DiagnosticLogger?.LogDebug("Active Scene changed. Creating new Trace."); + hub.ConfigureScope(UpdatePropagationContext); + }; + } } private static void UpdatePropagationContext(Scope scope) => From 9d0bdec3ee0cfb0a89b4a22b40dc5d39499c833e Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 28 Aug 2025 14:52:18 +0200 Subject: [PATCH 02/11] Cleanup --- .../SceneManagerTracingIntegration.cs | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs index e5d5de0b1..b8ad03722 100644 --- a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs +++ b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs @@ -35,24 +35,12 @@ public class SceneManagerTracingAPI : SceneManagerAPI public SceneManagerTracingAPI(IDiagnosticLogger? logger) => _logger = logger; - protected override UnityEngine.AsyncOperation LoadSceneAsyncByNameOrIndex(string sceneName, int sceneBuildIndex, LoadSceneParameters parameters, bool mustCompleteNextFrame) + protected override AsyncOperation LoadSceneAsyncByNameOrIndex(string sceneName, int sceneBuildIndex, LoadSceneParameters parameters, bool mustCompleteNextFrame) { _logger?.LogInfo("Creating '{0}' transaction for '{1}'.", TransactionOperation, sceneName); var transaction = SentrySdk.StartTransaction("scene.loading", TransactionOperation); - SentrySdk.ConfigureScope(scope => - { - if (scope.Transaction is not null) - { - Debug.Log("HUEHUEHUE"); - } - else - { - Debug.Log("SADADADADAD"); - } - - scope.Transaction = transaction; - }); + SentrySdk.ConfigureScope(scope => scope.Transaction = transaction); _logger?.LogDebug("Creating '{0}' span.", SpanOperation); var span = SentrySdk.GetSpan()?.StartChild(SpanOperation, sceneName ?? $"buildIndex:{sceneBuildIndex}"); From c62536a745955c4b1cf9b741adb2fbf8604f7be3 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 28 Aug 2025 14:52:43 +0200 Subject: [PATCH 03/11] Cleanup --- .../Integrations/SceneManagerTracingIntegration.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs index b8ad03722..e01a0d390 100644 --- a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs +++ b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs @@ -1,6 +1,5 @@ using Sentry.Extensibility; using Sentry.Integrations; -using UnityEngine; using UnityEngine.SceneManagement; namespace Sentry.Unity; @@ -35,7 +34,7 @@ public class SceneManagerTracingAPI : SceneManagerAPI public SceneManagerTracingAPI(IDiagnosticLogger? logger) => _logger = logger; - protected override AsyncOperation LoadSceneAsyncByNameOrIndex(string sceneName, int sceneBuildIndex, LoadSceneParameters parameters, bool mustCompleteNextFrame) + protected override UnityEngine.AsyncOperation LoadSceneAsyncByNameOrIndex(string sceneName, int sceneBuildIndex, LoadSceneParameters parameters, bool mustCompleteNextFrame) { _logger?.LogInfo("Creating '{0}' transaction for '{1}'.", TransactionOperation, sceneName); From 916116c55db689ad07cae3388878e74987f59c4e Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 28 Aug 2025 15:39:21 +0200 Subject: [PATCH 04/11] Updated CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76adfcba2..9f8edc69e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ ### Fixes +- The SDK now properly deduplicates trace generation during startup and scene loading ([#2300](https://github.com/getsentry/sentry-unity/pull/2300)) +- The SDK no longer appends multiple upload tasks when building for Android ([#2300](https://github.com/getsentry/sentry-unity/pull/2300)) - The check used to verify whether the current thread is the main-thread now includes `JobsUtility.IsExecutingJob` to support running in Burst. ([#2226](https://github.com/getsentry/sentry-unity/pull/2226)) - For targeting iOS, the Unity SDK now brings an iOS-only `.xcframework`, reducing package size. ([#2264](https://github.com/getsentry/sentry-unity/pull/2264)) From af42678cf2cd61896b5f0d62d2d96c8c2a8e0317 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 28 Aug 2025 16:05:54 +0200 Subject: [PATCH 05/11] Added tests --- .../TraceGenerationIntegrationTests.cs | 47 ++++++++++++++++--- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs b/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs index 470918e21..d7d4f3348 100644 --- a/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs +++ b/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs @@ -16,9 +16,9 @@ private class Fixture public TestSentryMonoBehaviour SentryMonoBehaviour { get; set; } = new(); public TestHub TestHub { get; set; } = new(); public TestLogger Logger { get; set; } = new(); - public SentryOptions SentryOptions { get; set; } + public SentryUnityOptions SentryOptions { get; set; } - public Fixture() => SentryOptions = new SentryOptions { DiagnosticLogger = Logger }; + public Fixture() => SentryOptions = new SentryUnityOptions { DiagnosticLogger = Logger }; public TraceGenerationIntegration GetSut() => new(SentryMonoBehaviour, SceneManager); } @@ -33,9 +33,11 @@ public void SetUp() } [Test] - public void TraceGeneration_OnRegister_GeneratesInitialTrace() + public void TraceGeneration_AutoStartupTracesFalse_OnRegisterGeneratesInitialTrace() { // Arrange + _fixture.SentryOptions.TracesSampleRate = 0.0f; + _fixture.SentryOptions.AutoStartupTraces = false; var sut = _fixture.GetSut(); // Act @@ -50,6 +52,21 @@ public void TraceGeneration_OnRegister_GeneratesInitialTrace() Assert.AreNotEqual(initialPropagationContext, scope.PropagationContext); } + [Test] + public void TraceGeneration_AutoStartupTracesTrue_OnRegisterDoesNotGenerateInitialTrace() + { + // Arrange + _fixture.SentryOptions.TracesSampleRate = 0.0f; + _fixture.SentryOptions.AutoStartupTraces = true; + var sut = _fixture.GetSut(); + + // Act + sut.Register(_fixture.TestHub, _fixture.SentryOptions); + + // Assert + Assert.IsEmpty(_fixture.TestHub.ConfigureScopeCalls); + } + [Test] public void TraceGeneration_OnApplicationResume_GeneratesNewTrace() { @@ -73,9 +90,29 @@ public void TraceGeneration_OnApplicationResume_GeneratesNewTrace() } [Test] - public void TraceGeneration_OnActiveSceneChange_GeneratesNewTrace() + public void TraceGeneration_AutoSceneLoadTracesTrue_OnActiveSceneChangeDoesNotGenerateNewTrace() { // Arrange + _fixture.SentryOptions.TracesSampleRate = 0.0f; + _fixture.SentryOptions.AutoSceneLoadTraces = true; + + var sut = _fixture.GetSut(); + sut.Register(_fixture.TestHub, _fixture.SentryOptions); + + // Act + _fixture.SceneManager.OnActiveSceneChanged(new SceneAdapter("from scene name"), new SceneAdapter("to scene name")); + + // Assert + Assert.IsEmpty(_fixture.TestHub.ConfigureScopeCalls); + } + + [Test] + public void TraceGeneration_AutoSceneLoadTracesFalse_OnActiveSceneChangeGeneratesNewTrace() + { + // Arrange + _fixture.SentryOptions.TracesSampleRate = 0.0f; + _fixture.SentryOptions.AutoSceneLoadTraces = false; + var sut = _fixture.GetSut(); sut.Register(_fixture.TestHub, _fixture.SentryOptions); var initialCallsCount = _fixture.TestHub.ConfigureScopeCalls.Count; @@ -84,13 +121,11 @@ public void TraceGeneration_OnActiveSceneChange_GeneratesNewTrace() _fixture.SceneManager.OnActiveSceneChanged(new SceneAdapter("from scene name"), new SceneAdapter("to scene name")); // Assert - // Calling 'Register' already generated a trace, so we expect 1+1 calls to ConfigureScope Assert.AreEqual(initialCallsCount + 1, _fixture.TestHub.ConfigureScopeCalls.Count); var configureScope = _fixture.TestHub.ConfigureScopeCalls.Last(); var scope = new Scope(_fixture.SentryOptions); var initialPropagationContext = scope.PropagationContext; configureScope(scope); - Assert.AreNotEqual(initialPropagationContext, scope.PropagationContext); } } From 37d0d9378cc42ee35258daac4d70a1c6625bffa1 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 28 Aug 2025 16:16:32 +0200 Subject: [PATCH 06/11] Updated CHANGELOG.md --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f8edc69e..10857aeaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,8 +10,7 @@ ### Fixes -- The SDK now properly deduplicates trace generation during startup and scene loading ([#2300](https://github.com/getsentry/sentry-unity/pull/2300)) -- The SDK no longer appends multiple upload tasks when building for Android ([#2300](https://github.com/getsentry/sentry-unity/pull/2300)) +- The SDK now properly deduplicates trace generation during startup and scene loading ([#2301](https://github.com/getsentry/sentry-unity/pull/2301)) - The check used to verify whether the current thread is the main-thread now includes `JobsUtility.IsExecutingJob` to support running in Burst. ([#2226](https://github.com/getsentry/sentry-unity/pull/2226)) - For targeting iOS, the Unity SDK now brings an iOS-only `.xcframework`, reducing package size. ([#2264](https://github.com/getsentry/sentry-unity/pull/2264)) From 11ce6c0028c13cbb82fc8880285753ecf960677f Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Mon, 8 Sep 2025 12:38:48 +0200 Subject: [PATCH 07/11] Comments --- src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs index 2a428055a..ef35d3a59 100644 --- a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs +++ b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs @@ -30,15 +30,15 @@ public void Register(IHub hub, SentryOptions options) return; } + // The generated trace context would immediately get overwritten by the StartupTracingIntegration if (!unityOptions.AutoStartupTraces) { - // The generated trace would immediately get overwritten by the StartupTracingIntegration hub.ConfigureScope(UpdatePropagationContext); } + // The generated trace context would immediately get overwritten by the SceneManagerTracingIntegration if (!unityOptions.AutoSceneLoadTraces) { - // The generated trace would immediately get overwritten by the SceneManagerTracingIntegration _sceneManager.ActiveSceneChanged += (_, _) => { options.DiagnosticLogger?.LogDebug("Active Scene changed. Creating new Trace."); From 3b6ca0e726041d9d414a62db5a96ea16e6a66724 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Mon, 8 Sep 2025 16:50:15 +0200 Subject: [PATCH 08/11] Fixed TraceGeneration --- .../TraceGenerationIntegration.cs | 27 +++++----- .../TraceGenerationIntegrationTests.cs | 49 ++++++++++--------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs index ef35d3a59..c1348bd06 100644 --- a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs +++ b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs @@ -3,6 +3,9 @@ namespace Sentry.Unity.Integrations; +/// +/// The TraceGenerationIntegration is used in case of +/// internal sealed class TraceGenerationIntegration : ISdkIntegration { private readonly ISceneManager _sceneManager; @@ -21,32 +24,32 @@ public void Register(IHub hub, SentryOptions options) { _sentryMonoBehaviour.ApplicationResuming += () => { - options.DiagnosticLogger?.LogDebug("Application resumed. Creating new Trace."); - hub.ConfigureScope(UpdatePropagationContext); + options.DiagnosticLogger?.LogDebug("Game resuming. Creating new Trace."); + hub.ConfigureScope(scope => scope.SetPropagationContext(new SentryPropagationContext()));; }; - if (options is not SentryUnityOptions unityOptions || unityOptions.TracesSampleRate > 0) + if (options is not SentryUnityOptions unityOptions) { return; } - // The generated trace context would immediately get overwritten by the StartupTracingIntegration - if (!unityOptions.AutoStartupTraces) + var isTracingEnabled = unityOptions.TracesSampleRate > 0.0f; + + // Create initial trace context if tracing is disabled or startup tracing is disabled + if (!isTracingEnabled || !unityOptions.AutoStartupTraces) { - hub.ConfigureScope(UpdatePropagationContext); + options.DiagnosticLogger?.LogDebug("Startup. Creating new Trace."); + hub.ConfigureScope(scope => scope.SetPropagationContext(new SentryPropagationContext())); } - // The generated trace context would immediately get overwritten by the SceneManagerTracingIntegration - if (!unityOptions.AutoSceneLoadTraces) + // Set up scene change handling if tracing is disabled or auto scene load traces are disabled + if (!isTracingEnabled || !unityOptions.AutoSceneLoadTraces) { _sceneManager.ActiveSceneChanged += (_, _) => { options.DiagnosticLogger?.LogDebug("Active Scene changed. Creating new Trace."); - hub.ConfigureScope(UpdatePropagationContext); + hub.ConfigureScope(scope => scope.SetPropagationContext(new SentryPropagationContext())); }; } } - - private static void UpdatePropagationContext(Scope scope) => - scope.SetPropagationContext(new SentryPropagationContext()); } diff --git a/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs b/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs index d7d4f3348..9e53f0393 100644 --- a/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs +++ b/test/Sentry.Unity.Tests/TraceGenerationIntegrationTests.cs @@ -32,12 +32,14 @@ public void SetUp() Sentry.SentrySdk.UseHub(_fixture.TestHub); } - [Test] - public void TraceGeneration_AutoStartupTracesFalse_OnRegisterGeneratesInitialTrace() + [TestCase(0.0f, false)] + [TestCase(0.0f, true)] + [TestCase(1.0f, false)] + public void Register_TracingDisabledOrAutoStartupTracesDisabled_GeneratesInitialTrace(float tracesSampleRate, bool autoStartupTraces) { // Arrange - _fixture.SentryOptions.TracesSampleRate = 0.0f; - _fixture.SentryOptions.AutoStartupTraces = false; + _fixture.SentryOptions.TracesSampleRate = tracesSampleRate; + _fixture.SentryOptions.AutoStartupTraces = autoStartupTraces; var sut = _fixture.GetSut(); // Act @@ -48,15 +50,14 @@ public void TraceGeneration_AutoStartupTracesFalse_OnRegisterGeneratesInitialTra var scope = new Scope(_fixture.SentryOptions); var initialPropagationContext = scope.PropagationContext; configureScope(scope); - Assert.AreNotEqual(initialPropagationContext, scope.PropagationContext); } [Test] - public void TraceGeneration_AutoStartupTracesTrue_OnRegisterDoesNotGenerateInitialTrace() + public void Register_TracingEnabledAndAutoStartupTracesEnabled_DoesNotGenerateInitialTrace() { // Arrange - _fixture.SentryOptions.TracesSampleRate = 0.0f; + _fixture.SentryOptions.TracesSampleRate = 1.0f; _fixture.SentryOptions.AutoStartupTraces = true; var sut = _fixture.GetSut(); @@ -68,7 +69,7 @@ public void TraceGeneration_AutoStartupTracesTrue_OnRegisterDoesNotGenerateIniti } [Test] - public void TraceGeneration_OnApplicationResume_GeneratesNewTrace() + public void ApplicationResuming_WhenCalled_GeneratesNewTrace() { // Arrange var sut = _fixture.GetSut(); @@ -79,7 +80,6 @@ public void TraceGeneration_OnApplicationResume_GeneratesNewTrace() _fixture.SentryMonoBehaviour.ResumeApplication(); // Assert - // Calling 'Register' already generated a trace, so we expect 1+1 calls to ConfigureScope Assert.AreEqual(initialCallsCount + 1, _fixture.TestHub.ConfigureScopeCalls.Count); var configureScope = _fixture.TestHub.ConfigureScopeCalls.Last(); var scope = new Scope(_fixture.SentryOptions); @@ -89,29 +89,37 @@ public void TraceGeneration_OnApplicationResume_GeneratesNewTrace() Assert.AreNotEqual(initialPropagationContext, scope.PropagationContext); } - [Test] - public void TraceGeneration_AutoSceneLoadTracesTrue_OnActiveSceneChangeDoesNotGenerateNewTrace() + [TestCase(0.0f, false)] + [TestCase(0.0f, true)] + [TestCase(1.0f, false)] + public void ActiveSceneChanged_TracingDisabledOrAutoSceneLoadTracesDisabled_GeneratesTrace(float tracesSampleRate, bool autoSceneLoadTraces) { // Arrange - _fixture.SentryOptions.TracesSampleRate = 0.0f; - _fixture.SentryOptions.AutoSceneLoadTraces = true; + _fixture.SentryOptions.TracesSampleRate = tracesSampleRate; + _fixture.SentryOptions.AutoSceneLoadTraces = autoSceneLoadTraces; var sut = _fixture.GetSut(); sut.Register(_fixture.TestHub, _fixture.SentryOptions); + var initialCallsCount = _fixture.TestHub.ConfigureScopeCalls.Count; // Act _fixture.SceneManager.OnActiveSceneChanged(new SceneAdapter("from scene name"), new SceneAdapter("to scene name")); // Assert - Assert.IsEmpty(_fixture.TestHub.ConfigureScopeCalls); + Assert.AreEqual(initialCallsCount + 1, _fixture.TestHub.ConfigureScopeCalls.Count); + var configureScope = _fixture.TestHub.ConfigureScopeCalls.Last(); + var scope = new Scope(_fixture.SentryOptions); + var initialPropagationContext = scope.PropagationContext; + configureScope(scope); + Assert.AreNotEqual(initialPropagationContext, scope.PropagationContext); } [Test] - public void TraceGeneration_AutoSceneLoadTracesFalse_OnActiveSceneChangeGeneratesNewTrace() + public void ActiveSceneChanged_TracingEnabledAndAutoSceneLoadTracesEnabled_DoesNotGenerateTrace() { // Arrange - _fixture.SentryOptions.TracesSampleRate = 0.0f; - _fixture.SentryOptions.AutoSceneLoadTraces = false; + _fixture.SentryOptions.TracesSampleRate = 1.0f; + _fixture.SentryOptions.AutoSceneLoadTraces = true; var sut = _fixture.GetSut(); sut.Register(_fixture.TestHub, _fixture.SentryOptions); @@ -121,11 +129,6 @@ public void TraceGeneration_AutoSceneLoadTracesFalse_OnActiveSceneChangeGenerate _fixture.SceneManager.OnActiveSceneChanged(new SceneAdapter("from scene name"), new SceneAdapter("to scene name")); // Assert - Assert.AreEqual(initialCallsCount + 1, _fixture.TestHub.ConfigureScopeCalls.Count); - var configureScope = _fixture.TestHub.ConfigureScopeCalls.Last(); - var scope = new Scope(_fixture.SentryOptions); - var initialPropagationContext = scope.PropagationContext; - configureScope(scope); - Assert.AreNotEqual(initialPropagationContext, scope.PropagationContext); + Assert.AreEqual(initialCallsCount, _fixture.TestHub.ConfigureScopeCalls.Count); } } From a87352dd09fc45e918c645d0b3da3d7046d5e8f8 Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Mon, 8 Sep 2025 14:52:13 +0000 Subject: [PATCH 09/11] Format code --- modules/sentry-native | 2 +- src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/sentry-native b/modules/sentry-native index b3320bb36..11f94efc6 160000 --- a/modules/sentry-native +++ b/modules/sentry-native @@ -1 +1 @@ -Subproject commit b3320bb36003d4737d332158211811693cb0fbf1 +Subproject commit 11f94efc64d55e90aef9456ce01716c846ae1732 diff --git a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs index c1348bd06..763f932ca 100644 --- a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs +++ b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs @@ -25,7 +25,8 @@ public void Register(IHub hub, SentryOptions options) _sentryMonoBehaviour.ApplicationResuming += () => { options.DiagnosticLogger?.LogDebug("Game resuming. Creating new Trace."); - hub.ConfigureScope(scope => scope.SetPropagationContext(new SentryPropagationContext()));; + hub.ConfigureScope(scope => scope.SetPropagationContext(new SentryPropagationContext())); + ; }; if (options is not SentryUnityOptions unityOptions) From a280c192b2143346728fd0576f691f32e67e80e7 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 9 Sep 2025 11:10:02 +0200 Subject: [PATCH 10/11] Seer review --- .../Integrations/TraceGenerationIntegration.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs index 763f932ca..a875e2cce 100644 --- a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs +++ b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs @@ -22,18 +22,17 @@ internal TraceGenerationIntegration(ISentryMonoBehaviour sentryMonoBehaviour, IS public void Register(IHub hub, SentryOptions options) { + if (options is not SentryUnityOptions unityOptions) + { + return; + } + _sentryMonoBehaviour.ApplicationResuming += () => { options.DiagnosticLogger?.LogDebug("Game resuming. Creating new Trace."); hub.ConfigureScope(scope => scope.SetPropagationContext(new SentryPropagationContext())); - ; }; - if (options is not SentryUnityOptions unityOptions) - { - return; - } - var isTracingEnabled = unityOptions.TracesSampleRate > 0.0f; // Create initial trace context if tracing is disabled or startup tracing is disabled From 9d97b888c555e97a02b8bc80e2fe2b0138d351f9 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 9 Sep 2025 11:13:58 +0200 Subject: [PATCH 11/11] Comment --- src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs index a875e2cce..fa9c12b4d 100644 --- a/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs +++ b/src/Sentry.Unity/Integrations/TraceGenerationIntegration.cs @@ -4,8 +4,8 @@ namespace Sentry.Unity.Integrations; /// -/// The TraceGenerationIntegration is used in case of -/// +/// The TraceGenerationIntegration is used to generate new trace propagation contexts +/// /// internal sealed class TraceGenerationIntegration : ISdkIntegration { private readonly ISceneManager _sceneManager;