diff --git a/CHANGELOG.md b/CHANGELOG.md index ab5216ba1..feaed4dac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- Automatically captured transactions and spans now have their `Origin` correctly set. ([#2464](https://github.com/getsentry/sentry-unity/pull/2464)) + ### Dependencies - Bump Java SDK from v8.28.0 to v8.29.0 ([#2462](https://github.com/getsentry/sentry-unity/pull/2462)) diff --git a/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs b/src/Sentry.Unity/Integrations/SceneManagerTracingIntegration.cs index e01a0d390..1f123ae3a 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 Sentry.Internal; using UnityEngine.SceneManagement; namespace Sentry.Unity; @@ -29,6 +30,7 @@ public class SceneManagerTracingAPI : SceneManagerAPI { public const string TransactionOperation = "scene.load"; private const string SpanOperation = "scene.load"; + private const string SceneLoadOrigin = "auto.navigation.unity"; private readonly IDiagnosticLogger? _logger; public SceneManagerTracingAPI(IDiagnosticLogger? logger) => @@ -39,10 +41,12 @@ protected override UnityEngine.AsyncOperation LoadSceneAsyncByNameOrIndex(string _logger?.LogInfo("Creating '{0}' transaction for '{1}'.", TransactionOperation, sceneName); var transaction = SentrySdk.StartTransaction("scene.loading", TransactionOperation); + transaction.SetOrigin(SceneLoadOrigin); SentrySdk.ConfigureScope(scope => scope.Transaction = transaction); _logger?.LogDebug("Creating '{0}' span.", SpanOperation); var span = SentrySdk.GetSpan()?.StartChild(SpanOperation, sceneName ?? $"buildIndex:{sceneBuildIndex}"); + span?.SetOrigin(SceneLoadOrigin); var asyncOp = base.LoadSceneAsyncByNameOrIndex(sceneName, sceneBuildIndex, parameters, mustCompleteNextFrame); diff --git a/src/Sentry.Unity/Integrations/StartupTracingIntegration.cs b/src/Sentry.Unity/Integrations/StartupTracingIntegration.cs index e63655f7e..2a0e081b0 100644 --- a/src/Sentry.Unity/Integrations/StartupTracingIntegration.cs +++ b/src/Sentry.Unity/Integrations/StartupTracingIntegration.cs @@ -1,5 +1,6 @@ using Sentry.Extensibility; using Sentry.Integrations; +using Sentry.Internal; using UnityEngine; namespace Sentry.Unity.Integrations; @@ -7,6 +8,8 @@ namespace Sentry.Unity.Integrations; internal class StartupTracingIntegration : ISdkIntegration { private const string StartupTransactionOperation = "app.start"; + private const string StartupTransactionOrigin = "auto.app.start"; + private const string StartupSpanOrigin = "auto.app.start.unity"; internal static ISpan? InitSpan; private const string InitSpanOperation = "runtime.init"; internal static ISpan? SubSystemRegistrationSpan; @@ -62,12 +65,15 @@ public static void StartTracing() var runtimeStartTransaction = SentrySdk.StartTransaction("runtime.initialization", StartupTransactionOperation); + runtimeStartTransaction.SetOrigin(StartupTransactionOrigin); SentrySdk.ConfigureScope(scope => scope.Transaction = runtimeStartTransaction); Logger?.LogDebug("Creating '{0}' span.", InitSpanOperation); InitSpan = runtimeStartTransaction.StartChild(InitSpanOperation, "runtime initialization"); + InitSpan.SetOrigin(StartupSpanOrigin); Logger?.LogDebug("Creating '{0}' span.", SubSystemSpanOperation); SubSystemRegistrationSpan = InitSpan.StartChild(SubSystemSpanOperation, "subsystem registration"); + SubSystemRegistrationSpan.SetOrigin(StartupSpanOrigin); } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] @@ -83,6 +89,7 @@ public static void AfterAssembliesLoaded() Logger?.LogDebug("Creating '{0}' span.", AfterAssembliesSpanOperation); AfterAssembliesSpan = InitSpan?.StartChild(AfterAssembliesSpanOperation, "after assemblies"); + AfterAssembliesSpan?.SetOrigin(StartupSpanOrigin); } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)] @@ -98,6 +105,7 @@ public static void BeforeSplashScreen() Logger?.LogDebug("Creating '{0}' span.", SplashScreenSpanOperation); SplashScreenSpan = InitSpan?.StartChild(SplashScreenSpanOperation, "splashscreen"); + SplashScreenSpan?.SetOrigin(StartupSpanOrigin); } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] @@ -113,6 +121,7 @@ public static void BeforeSceneLoad() Logger?.LogDebug("Creating '{0}' span.", FirstSceneLoadSpanOperation); FirstSceneLoadSpan = InitSpan?.StartChild(FirstSceneLoadSpanOperation, "first scene load"); + FirstSceneLoadSpan?.SetOrigin(StartupSpanOrigin); } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] diff --git a/src/Sentry.Unity/SentryMonoBehaviour.cs b/src/Sentry.Unity/SentryMonoBehaviour.cs index cb6a3d611..2d93d8f0d 100644 --- a/src/Sentry.Unity/SentryMonoBehaviour.cs +++ b/src/Sentry.Unity/SentryMonoBehaviour.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Concurrent; +using Sentry.Internal; using Sentry.Unity.Integrations; using UnityEngine; @@ -42,8 +43,13 @@ public static SentryMonoBehaviour Instance /// public partial class SentryMonoBehaviour { - public void StartAwakeSpan(MonoBehaviour monoBehaviour) => - SentrySdk.GetSpan()?.StartChild("awake", $"{monoBehaviour.gameObject.name}.{monoBehaviour.GetType().Name}"); + private const string AwakeSpanOrigin = "auto.ui.unity"; + + public void StartAwakeSpan(MonoBehaviour monoBehaviour) + { + var span = SentrySdk.GetSpan()?.StartChild("awake", $"{monoBehaviour.gameObject.name}.{monoBehaviour.GetType().Name}"); + span?.SetOrigin(AwakeSpanOrigin); + } public void FinishAwakeSpan() => SentrySdk.GetSpan()?.Finish(SpanStatus.Ok); }