@@ -529,7 +529,31 @@ Dart_Handle DartUtils::PrepareCoreLibrary(Dart_Handle core_lib,
529529}
530530
531531Dart_Handle DartUtils::PrepareAsyncLibrary (Dart_Handle async_lib,
532- Dart_Handle isolate_lib) {
532+ Dart_Handle isolate_lib,
533+ bool flag_profile_microtasks) {
534+ #if !defined(PRODUCT)
535+ if (flag_profile_microtasks) {
536+ Dart_Handle microtask_mirror_queue_type_name =
537+ Dart_NewStringFromCString (" _MicrotaskMirrorQueue" );
538+ RETURN_IF_ERROR (microtask_mirror_queue_type_name);
539+
540+ Dart_Handle microtask_mirror_queue_type =
541+ Dart_GetNonNullableType (async_lib, microtask_mirror_queue_type_name,
542+ /* number_of_type_arguments=*/ 0 ,
543+ /* type_arguments=*/ nullptr );
544+ RETURN_IF_ERROR (microtask_mirror_queue_type);
545+
546+ Dart_Handle should_profile_microtasks_field_name =
547+ Dart_NewStringFromCString (" _shouldProfileMicrotasks" );
548+ RETURN_IF_ERROR (should_profile_microtasks_field_name);
549+
550+ Dart_Handle set_field_result =
551+ Dart_SetField (microtask_mirror_queue_type,
552+ should_profile_microtasks_field_name, Dart_True ());
553+ RETURN_IF_ERROR (set_field_result);
554+ }
555+ #endif // !defined(PRODUCT)
556+
533557 Dart_Handle schedule_immediate_closure =
534558 Dart_Invoke (isolate_lib, NewString (" _getIsolateScheduleImmediateClosure" ),
535559 0 , nullptr );
@@ -568,7 +592,8 @@ Dart_Handle DartUtils::SetupPackageConfig(const char* packages_config) {
568592}
569593
570594Dart_Handle DartUtils::PrepareForScriptLoading (bool is_service_isolate,
571- bool trace_loading) {
595+ bool trace_loading,
596+ bool flag_profile_microtasks) {
572597 // First ensure all required libraries are available.
573598 Dart_Handle url = NewString (kCoreLibURL );
574599 RETURN_IF_ERROR (url);
@@ -610,7 +635,8 @@ Dart_Handle DartUtils::PrepareForScriptLoading(bool is_service_isolate,
610635 trace_loading);
611636 RETURN_IF_ERROR (result);
612637
613- RETURN_IF_ERROR (PrepareAsyncLibrary (async_lib, isolate_lib));
638+ RETURN_IF_ERROR (
639+ PrepareAsyncLibrary (async_lib, isolate_lib, flag_profile_microtasks));
614640 RETURN_IF_ERROR (PrepareCoreLibrary (core_lib, io_lib, is_service_isolate));
615641 RETURN_IF_ERROR (PrepareIsolateLibrary (isolate_lib));
616642 RETURN_IF_ERROR (PrepareIOLibrary (io_lib));
0 commit comments