Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit c9f399f

Browse files
committed
Started using Dart_CreateInGroup when using spawn on a release build.
1 parent 2927e9f commit c9f399f

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

runtime/dart_isolate.cc

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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.

runtime/dart_isolate.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -517,15 +517,18 @@ class DartIsolate : public UIDartState {
517517
Dart_IsolateFlags* flags,
518518
char** error);
519519

520+
typedef std::function<Dart_Isolate(std::shared_ptr<DartIsolateGroupData>*,
521+
std::shared_ptr<DartIsolate>*,
522+
Dart_IsolateFlags*,
523+
char**)>
524+
IsolateMaker;
525+
520526
static Dart_Isolate CreateDartIsolateGroup(
521527
std::unique_ptr<std::shared_ptr<DartIsolateGroupData>> isolate_group_data,
522528
std::unique_ptr<std::shared_ptr<DartIsolate>> isolate_data,
523529
Dart_IsolateFlags* flags,
524530
char** error,
525-
std::function<Dart_Isolate(std::shared_ptr<DartIsolateGroupData>*,
526-
std::shared_ptr<DartIsolate>*,
527-
Dart_IsolateFlags*,
528-
char**)> make_isolate);
531+
const IsolateMaker& make_isolate);
529532

530533
static bool InitializeIsolate(std::shared_ptr<DartIsolate> embedder_isolate,
531534
Dart_Isolate isolate,

0 commit comments

Comments
 (0)