Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Sentry.Extensibility;
using Sentry.Integrations;
using Sentry.Internal;
using UnityEngine.SceneManagement;

namespace Sentry.Unity;
Expand Down Expand Up @@ -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) =>
Expand All @@ -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);

Expand Down
9 changes: 9 additions & 0 deletions src/Sentry.Unity/Integrations/StartupTracingIntegration.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
using Sentry.Extensibility;
using Sentry.Integrations;
using Sentry.Internal;
using UnityEngine;

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;
Expand Down Expand Up @@ -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)]
Expand All @@ -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)]
Expand All @@ -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)]
Expand All @@ -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)]
Expand Down
10 changes: 8 additions & 2 deletions src/Sentry.Unity/SentryMonoBehaviour.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Concurrent;
using Sentry.Internal;
using Sentry.Unity.Integrations;
using UnityEngine;

Expand Down Expand Up @@ -42,8 +43,13 @@ public static SentryMonoBehaviour Instance
/// </summary>
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);
}
Expand Down
Loading