@@ -251,23 +251,44 @@ 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 =
260+ [spawning_isolate](
261+ std::shared_ptr<DartIsolateGroupData>* isolate_group_data,
262+ std::shared_ptr<DartIsolate>* isolate_data,
263+ Dart_IsolateFlags* flags, char ** error) {
264+ return Dart_CreateIsolateInGroup (
265+ /* group_member=*/ spawning_isolate->isolate (),
266+ /* name=*/ " spawn" ,
267+ /* shutdown_callback=*/ nullptr ,
268+ /* cleanup_callback=*/ nullptr ,
269+ /* child_isolate_data=*/ isolate_data,
270+ /* error=*/ error);
271+ };
272+ }
273+ #endif
274+
275+ if (!isolate_maker) {
276+ isolate_maker = [](std::shared_ptr<DartIsolateGroupData>*
277+ isolate_group_data,
278+ std::shared_ptr<DartIsolate>* isolate_data,
279+ Dart_IsolateFlags* flags, char ** error) {
280+ return Dart_CreateIsolateGroup (
281+ (*isolate_group_data)->GetAdvisoryScriptURI ().c_str (),
282+ (*isolate_group_data)->GetAdvisoryScriptEntrypoint ().c_str (),
283+ (*isolate_group_data)->GetIsolateSnapshot ()->GetDataMapping (),
284+ (*isolate_group_data)->GetIsolateSnapshot ()->GetInstructionsMapping (),
285+ flags, isolate_group_data, isolate_data, error);
286+ };
287+ }
288+
289+ vm_isolate = CreateDartIsolateGroup (std::move (isolate_group_data),
290+ std::move (isolate_data), &isolate_flags,
291+ error.error (), isolate_maker);
271292
272293 if (error) {
273294 FML_LOG (ERROR) << " CreateRootIsolate failed: " << error.str ();
@@ -992,10 +1013,7 @@ Dart_Isolate DartIsolate::CreateDartIsolateGroup(
9921013 std::unique_ptr<std::shared_ptr<DartIsolate>> isolate_data,
9931014 Dart_IsolateFlags* flags,
9941015 char ** error,
995- std::function<Dart_Isolate(std::shared_ptr<DartIsolateGroupData>*,
996- std::shared_ptr<DartIsolate>*,
997- Dart_IsolateFlags*,
998- char **)> make_isolate) {
1016+ const DartIsolate::IsolateMaker& make_isolate) {
9991017 TRACE_EVENT0 (" flutter" , " DartIsolate::CreateDartIsolateGroup" );
10001018
10011019 // Create the Dart VM isolate and give it the embedder object as the baton.
0 commit comments