@@ -251,23 +251,43 @@ std::weak_ptr<DartIsolate> DartIsolate::CreateRootIsolate(
251251 DartErrorString error;
252252 Dart_Isolate vm_isolate = nullptr ;
253253 auto isolate_flags = flags.Get ();
254- // / TODO(b/72025) This will be where we call Dart_CreateIsolateInGroup if
255- // / spawning_isolate != nullptr.
256- vm_isolate = CreateDartIsolateGroup (
257- std::move (isolate_group_data), std::move (isolate_data), &isolate_flags,
258- error.error (),
259- [](std::shared_ptr<DartIsolateGroupData>* isolate_group_data,
260- std::shared_ptr<DartIsolate>* isolate_data, Dart_IsolateFlags* flags,
261- char ** error) {
262- return Dart_CreateIsolateGroup (
263- (*isolate_group_data)->GetAdvisoryScriptURI ().c_str (),
264- (*isolate_group_data)->GetAdvisoryScriptEntrypoint ().c_str (),
265- (*isolate_group_data)->GetIsolateSnapshot ()->GetDataMapping (),
266- (*isolate_group_data)
267- ->GetIsolateSnapshot ()
268- ->GetInstructionsMapping (),
269- flags, isolate_group_data, isolate_data, error);
270- });
254+
255+ IsolateMaker isolate_maker;
256+ #if FLUTTER_RUNTIME_MODE == FLUTTER_RUNTIME_MODE_PROFILE || \
257+ FLUTTER_RUNTIME_MODE == FLUTTER_RUNTIME_MODE_RELEASE
258+ if (spawning_isolate) {
259+ isolate_maker = [spawning_isolate](
260+ std::shared_ptr<DartIsolateGroupData>* isolate_group_data,
261+ std::shared_ptr<DartIsolate>* isolate_data,
262+ Dart_IsolateFlags* flags, char ** error) {
263+ return Dart_CreateIsolateInGroup (
264+ /* group_member=*/ spawning_isolate->isolate (),
265+ /* name=*/ " spawn" ,
266+ /* shutdown_callback=*/ nullptr ,
267+ /* cleanup_callback=*/ nullptr ,
268+ /* child_isolate_data=*/ isolate_data,
269+ /* error=*/ error);
270+ });
271+ }
272+ #endif
273+
274+ if (!isolate_maker) {
275+ isolate_maker = [](std::shared_ptr<DartIsolateGroupData>*
276+ isolate_group_data,
277+ std::shared_ptr<DartIsolate>* isolate_data,
278+ Dart_IsolateFlags* flags, char ** error) {
279+ return Dart_CreateIsolateGroup (
280+ (*isolate_group_data)->GetAdvisoryScriptURI ().c_str (),
281+ (*isolate_group_data)->GetAdvisoryScriptEntrypoint ().c_str (),
282+ (*isolate_group_data)->GetIsolateSnapshot ()->GetDataMapping (),
283+ (*isolate_group_data)->GetIsolateSnapshot ()->GetInstructionsMapping (),
284+ flags, isolate_group_data, isolate_data, error);
285+ };
286+ }
287+
288+ vm_isolate = CreateDartIsolateGroup (std::move (isolate_group_data),
289+ std::move (isolate_data), &isolate_flags,
290+ error.error (), isolate_maker);
271291
272292 if (error) {
273293 FML_LOG (ERROR) << " CreateRootIsolate failed: " << error.str ();
@@ -992,10 +1012,7 @@ Dart_Isolate DartIsolate::CreateDartIsolateGroup(
9921012 std::unique_ptr<std::shared_ptr<DartIsolate>> isolate_data,
9931013 Dart_IsolateFlags* flags,
9941014 char ** error,
995- std::function<Dart_Isolate(std::shared_ptr<DartIsolateGroupData>*,
996- std::shared_ptr<DartIsolate>*,
997- Dart_IsolateFlags*,
998- char **)> make_isolate) {
1015+ const DartIsolate::IsolateMaker& make_isolate) {
9991016 TRACE_EVENT0 (" flutter" , " DartIsolate::CreateDartIsolateGroup" );
10001017
10011018 // Create the Dart VM isolate and give it the embedder object as the baton.
0 commit comments