@@ -42,7 +42,17 @@ bool Host::clr_external_assembly_probe (const char *path, void **data_start, int
4242 return false ; // TODO: abort instead?
4343 }
4444
45+ if (FastTiming::enabled ()) [[unlikely]] {
46+ internal_timing.start_event (TimingEventKind::AssemblyLoad);
47+ }
48+
4549 *data_start = AssemblyStore::open_assembly (path, *size);
50+
51+ if (FastTiming::enabled ()) [[unlikely]] {
52+ internal_timing.end_event (true /* uses_more_info */ );
53+ internal_timing.add_more_info (path);
54+ }
55+
4656 log_debug (
4757 LOG_ASSEMBLY,
4858 " Assembly data {}mapped ({:p}, {} bytes)" ,
@@ -263,10 +273,9 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
263273 // If fast logging is disabled, log messages immediately
264274 FastTiming::initialize ((Logger::log_timing_categories () & LogTimingCategories::FastBare) != LogTimingCategories::FastBare);
265275
266- size_t total_time_index;
267276 if (FastTiming::enabled ()) [[unlikely]] {
268277 _timing = std::make_shared<Timing> ();
269- total_time_index = internal_timing.start_event (TimingEventKind::TotalRuntimeInit);
278+ internal_timing.start_event (TimingEventKind::TotalRuntimeInit);
270279 }
271280
272281 jstring_array_wrapper applicationDirs (env, appDirs);
@@ -292,9 +301,8 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
292301
293302 gather_assemblies_and_libraries (runtimeApks, haveSplitApks);
294303
295- size_t clr_init_time_index;
296304 if (FastTiming::enabled ()) [[unlikely]] {
297- clr_init_time_index = internal_timing.start_event (TimingEventKind::MonoRuntimeInit );
305+ internal_timing.start_event (TimingEventKind::ManagedRuntimeInit );
298306 }
299307
300308 coreclr_set_error_writer (clr_error_writer);
@@ -304,7 +312,7 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
304312 // The first entry in the property arrays is for the host contract pointer. Application build makes sure
305313 // of that.
306314 init_runtime_property_values[0 ] = host_contract_ptr_buffer.data ();
307- int hr = coreclr_initialize (
315+ int hr = FastTiming::time_call ( " coreclr_initialize " , coreclr_initialize,
308316 application_config.android_package_name ,
309317 " Xamarin.Android" ,
310318 (int )application_config.number_of_runtime_properties ,
@@ -315,7 +323,7 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
315323 );
316324
317325 if (FastTiming::enabled ()) [[unlikely]] {
318- internal_timing.end_event (clr_init_time_index );
326+ internal_timing.end_event ();
319327 }
320328
321329 // TODO: make S_OK & friends known to us
@@ -372,14 +380,13 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
372380
373381 OSBridge::initialize_on_runtime_init (env, runtimeClass);
374382
375- size_t native_to_managed_index;
376383 if (FastTiming::enabled ()) [[unlikely]] {
377- native_to_managed_index = internal_timing.start_event (TimingEventKind::NativeToManagedTransition);
384+ internal_timing.start_event (TimingEventKind::NativeToManagedTransition);
378385 }
379386
380387 void *delegate = nullptr ;
381- log_debug (LOG_ASSEMBLY, " Creating UCO delegate to {}.RegisterJniNatives" , Constants::JNIENVINIT_FULL_TYPE_NAME);
382- delegate = create_delegate ( Constants::MONO_ANDROID_ASSEMBLY_NAME, Constants::JNIENVINIT_FULL_TYPE_NAME, " RegisterJniNatives" sv);
388+ log_debug (LOG_ASSEMBLY, " Creating UCO delegate to {}.RegisterJniNatives" sv , Constants::JNIENVINIT_FULL_TYPE_NAME);
389+ delegate = FastTiming::time_call ( " create_delegate for RegisterJniNatives " sv, create_delegate, Constants::MONO_ANDROID_ASSEMBLY_NAME, Constants::JNIENVINIT_FULL_TYPE_NAME, " RegisterJniNatives" sv);
383390 jnienv_register_jni_natives = reinterpret_cast <jnienv_register_jni_natives_fn> (delegate);
384391 abort_unless (
385392 jnienv_register_jni_natives != nullptr ,
@@ -392,8 +399,8 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
392399 }
393400 );
394401
395- log_debug (LOG_ASSEMBLY, " Creating UCO delegate to {}.Initialize" , Constants::JNIENVINIT_FULL_TYPE_NAME);
396- delegate = create_delegate ( Constants::MONO_ANDROID_ASSEMBLY_NAME, Constants::JNIENVINIT_FULL_TYPE_NAME, " Initialize" sv);
402+ log_debug (LOG_ASSEMBLY, " Creating UCO delegate to {}.Initialize" sv , Constants::JNIENVINIT_FULL_TYPE_NAME);
403+ delegate = FastTiming::time_call ( " create_delegate for Initialize " sv, create_delegate, Constants::MONO_ANDROID_ASSEMBLY_NAME, Constants::JNIENVINIT_FULL_TYPE_NAME, " Initialize" sv);
397404 auto initialize = reinterpret_cast <jnienv_initialize_fn> (delegate);
398405 abort_unless (
399406 initialize != nullptr ,
@@ -407,19 +414,18 @@ void Host::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass runtimeCl
407414 );
408415
409416 log_debug (LOG_DEFAULT, " Calling into managed runtime init" sv);
410- initialize ( &init);
417+ FastTiming::time_call ( " JNIEnv.Initialize UCO " sv, initialize, &init);
411418
412419 if (FastTiming::enabled ()) [[unlikely]] {
413- internal_timing.end_event (native_to_managed_index);
414- internal_timing.end_event (total_time_index);
420+ internal_timing.end_event (); // native to managed
421+ internal_timing.end_event (); // total init time
415422 }
416423}
417424
418425void Host::Java_mono_android_Runtime_register (JNIEnv *env, jstring managedType, jclass nativeClass, jstring methods) noexcept
419426{
420- size_t total_time_index;
421427 if (FastTiming::enabled ()) [[unlikely]] {
422- total_time_index = internal_timing.start_event (TimingEventKind::RuntimeRegister);
428+ internal_timing.start_event (TimingEventKind::RuntimeRegister);
423429 }
424430
425431 jsize managedType_len = env->GetStringLength (managedType);
@@ -434,14 +440,14 @@ void Host::Java_mono_android_Runtime_register (JNIEnv *env, jstring managedType,
434440 env->ReleaseStringChars (managedType, managedType_ptr);
435441
436442 if (FastTiming::enabled ()) [[unlikely]] {
437- internal_timing.end_event (total_time_index, true /* uses_more_info */ );
443+ internal_timing.end_event (true /* uses_more_info */ );
438444
439445 dynamic_local_string<SENSIBLE_TYPE_NAME_LENGTH> type;
440446 const char *mt_ptr = env->GetStringUTFChars (managedType, nullptr );
441447 type.assign (mt_ptr, strlen (mt_ptr));
442448 env->ReleaseStringUTFChars (managedType, mt_ptr);
443449
444- internal_timing.add_more_info (total_time_index, type);
450+ internal_timing.add_more_info (type);
445451 }
446452}
447453
0 commit comments