diff --git a/source/plugin/Assets/GoogleMobileAds/Platforms/Android/DecagonMobileAdsClient.cs b/source/plugin/Assets/GoogleMobileAds/Platforms/Android/DecagonMobileAdsClient.cs index 48b8de542..61c635fc7 100644 --- a/source/plugin/Assets/GoogleMobileAds/Platforms/Android/DecagonMobileAdsClient.cs +++ b/source/plugin/Assets/GoogleMobileAds/Platforms/Android/DecagonMobileAdsClient.cs @@ -27,12 +27,19 @@ public class DecagonMobileAdsClient : AndroidJavaProxy, IMobileAdsClient { private static readonly DecagonMobileAdsClient _instance = new DecagonMobileAdsClient(); private readonly AndroidJavaObject _mobileAdsClass; + // Ensures InsightsEmitter is initialized from the main thread to handle CUIs. + private readonly IInsightsEmitter _insightsEmitter = InsightsEmitter.Instance; + private readonly ITracer _tracer; private Action _initCompleteAction; private DecagonMobileAdsClient() : base(DecagonUtils.OnInitializationCompleteListenerClassName) { _mobileAdsClass = new AndroidJavaClass(DecagonUtils.UnityMobileAdsClassName); + _tracer = new Tracer(_insightsEmitter); + // Ensures GlobalExceptionHandler is initialized from the main thread to handle Android + // untrapped exceptions. + var _ = GlobalExceptionHandler.Instance; } public static DecagonMobileAdsClient Instance @@ -42,26 +49,36 @@ public static DecagonMobileAdsClient Instance public void Initialize(Action initCompleteAction) { - _initCompleteAction = initCompleteAction; - - Task.Run(() => { - int env = AndroidJNI.AttachCurrentThread(); - if (env < 0) - { - UnityEngine.Debug.LogError("Failed to attach current thread to JVM."); - return; - } - - try - { - _mobileAdsClass.CallStatic("initialize", - Utils.GetCurrentActivityAndroidJavaObject(), - this); - } - finally - { - AndroidJNI.DetachCurrentThread(); - } + using (_tracer.StartTrace("DecagonMobileAdsClient.Initialize")) + { + _initCompleteAction = initCompleteAction; + + Task.Run(() => { + using (_tracer.StartTrace("AttachCurrentThread")) + { + int env = AndroidJNI.AttachCurrentThread(); + if (env < 0) + { + UnityEngine.Debug.LogError("Failed to attach current thread to JVM."); + return; + } + } + + try + { + _mobileAdsClass.CallStatic("initialize", + Utils.GetCurrentActivityAndroidJavaObject(), + this); + } + finally + { + AndroidJNI.DetachCurrentThread(); + } + }); + } + _insightsEmitter.Emit(new Insight() + { + Name = Insight.CuiName.SdkInitialized }); }