mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Reland isolate group changes
This reverts commit f78c2ef4e3a5c13dbe597a39d556dc4d94a3a31e.
This commit is contained in:
parent
c2916d93dc
commit
b76f732bc8
@ -163,7 +163,7 @@ bool DartIsolate::Initialize(Dart_Isolate dart_isolate, bool is_root_isolate) {
|
||||
}
|
||||
|
||||
auto* isolate_data = static_cast<std::shared_ptr<DartIsolate>*>(
|
||||
Dart_IsolateData(dart_isolate));
|
||||
Dart_IsolateGroupData(dart_isolate));
|
||||
if (isolate_data->get() != this) {
|
||||
return false;
|
||||
}
|
||||
@ -174,7 +174,7 @@ bool DartIsolate::Initialize(Dart_Isolate dart_isolate, bool is_root_isolate) {
|
||||
// We are entering a new scope (for the first time since initialization) and
|
||||
// we want to restore the current scope to null when we exit out of this
|
||||
// method. This balances the implicit Dart_EnterIsolate call made by
|
||||
// Dart_CreateIsolate (which calls the Initialize).
|
||||
// Dart_CreateIsolateGroup (which calls the Initialize).
|
||||
Dart_ExitIsolate();
|
||||
|
||||
tonic::DartIsolateScope scope(isolate());
|
||||
@ -636,8 +636,8 @@ Dart_Isolate DartIsolate::DartCreateAndStartServiceIsolate(
|
||||
return service_isolate->isolate();
|
||||
}
|
||||
|
||||
// |Dart_IsolateCreateCallback|
|
||||
Dart_Isolate DartIsolate::DartIsolateCreateCallback(
|
||||
// |Dart_IsolateGroupCreateCallback|
|
||||
Dart_Isolate DartIsolate::DartIsolateGroupCreateCallback(
|
||||
const char* advisory_script_uri,
|
||||
const char* advisory_script_entrypoint,
|
||||
const char* package_root,
|
||||
@ -720,14 +720,16 @@ DartIsolate::CreateDartVMAndEmbedderObjectPair(
|
||||
}
|
||||
|
||||
// Create the Dart VM isolate and give it the embedder object as the baton.
|
||||
Dart_Isolate isolate = Dart_CreateIsolate(
|
||||
Dart_Isolate isolate = Dart_CreateIsolateGroup(
|
||||
advisory_script_uri, //
|
||||
advisory_script_entrypoint, //
|
||||
(*embedder_isolate)->GetIsolateSnapshot()->GetDataMapping(),
|
||||
(*embedder_isolate)->GetIsolateSnapshot()->GetInstructionsMapping(),
|
||||
(*embedder_isolate)->GetSharedSnapshot()->GetDataMapping(),
|
||||
(*embedder_isolate)->GetSharedSnapshot()->GetInstructionsMapping(), flags,
|
||||
embedder_isolate.get(), error);
|
||||
embedder_isolate.get(), // isolate_group_data
|
||||
embedder_isolate.get(), // isolate_data
|
||||
error);
|
||||
|
||||
if (isolate == nullptr) {
|
||||
FML_DLOG(ERROR) << *error;
|
||||
@ -775,10 +777,10 @@ void DartIsolate::DartIsolateShutdownCallback(
|
||||
isolate_group_data->get()->OnShutdownCallback();
|
||||
}
|
||||
|
||||
// |Dart_IsolateCleanupCallback|
|
||||
void DartIsolate::DartIsolateCleanupCallback(
|
||||
std::shared_ptr<DartIsolate>* isolate_data) {
|
||||
delete isolate_data;
|
||||
// |Dart_IsolateGroupCleanupCallback|
|
||||
void DartIsolate::DartIsolateGroupCleanupCallback(
|
||||
std::shared_ptr<DartIsolate>* embedder_isolate) {
|
||||
delete embedder_isolate;
|
||||
}
|
||||
|
||||
fml::RefPtr<const DartSnapshot> DartIsolate::GetIsolateSnapshot() const {
|
||||
|
||||
@ -156,8 +156,8 @@ class DartIsolate : public UIDartState {
|
||||
|
||||
void OnShutdownCallback();
|
||||
|
||||
// |Dart_IsolateCreateCallback|
|
||||
static Dart_Isolate DartIsolateCreateCallback(
|
||||
// |Dart_IsolateGroupCreateCallback|
|
||||
static Dart_Isolate DartIsolateGroupCreateCallback(
|
||||
const char* advisory_script_uri,
|
||||
const char* advisory_script_entrypoint,
|
||||
const char* package_root,
|
||||
@ -189,8 +189,8 @@ class DartIsolate : public UIDartState {
|
||||
std::shared_ptr<DartIsolate>* isolate_group_data,
|
||||
std::shared_ptr<DartIsolate>* isolate_data);
|
||||
|
||||
// |Dart_IsolateCleanupCallback|
|
||||
static void DartIsolateCleanupCallback(
|
||||
// |Dart_IsolateGroupCleanupCallback|
|
||||
static void DartIsolateGroupCleanupCallback(
|
||||
std::shared_ptr<DartIsolate>* embedder_isolate);
|
||||
|
||||
FML_DISALLOW_COPY_AND_ASSIGN(DartIsolate);
|
||||
|
||||
@ -366,12 +366,13 @@ DartVM::DartVM(std::shared_ptr<const DartVMData> vm_data,
|
||||
params.vm_snapshot_data = vm_data_->GetVMSnapshot().GetDataMapping();
|
||||
params.vm_snapshot_instructions =
|
||||
vm_data_->GetVMSnapshot().GetInstructionsMapping();
|
||||
params.create = reinterpret_cast<decltype(params.create)>(
|
||||
DartIsolate::DartIsolateCreateCallback);
|
||||
params.shutdown = reinterpret_cast<decltype(params.shutdown)>(
|
||||
DartIsolate::DartIsolateShutdownCallback);
|
||||
params.cleanup = reinterpret_cast<decltype(params.cleanup)>(
|
||||
DartIsolate::DartIsolateCleanupCallback);
|
||||
params.create_group = reinterpret_cast<decltype(params.create_group)>(
|
||||
DartIsolate::DartIsolateGroupCreateCallback);
|
||||
params.shutdown_isolate =
|
||||
reinterpret_cast<decltype(params.shutdown_isolate)>(
|
||||
DartIsolate::DartIsolateShutdownCallback);
|
||||
params.cleanup_group = reinterpret_cast<decltype(params.cleanup_group)>(
|
||||
DartIsolate::DartIsolateGroupCleanupCallback);
|
||||
params.thread_exit = ThreadExitCallback;
|
||||
params.get_service_assets = GetVMServiceAssetsArchiveCallback;
|
||||
params.entropy_source = dart::bin::GetEntropy;
|
||||
|
||||
@ -324,12 +324,12 @@ bool DartComponentController::CreateIsolate(
|
||||
auto state = new std::shared_ptr<tonic::DartState>(new tonic::DartState(
|
||||
namespace_fd, [this](Dart_Handle result) { MessageEpilogue(result); }));
|
||||
|
||||
isolate_ = Dart_CreateIsolate(
|
||||
isolate_ = Dart_CreateIsolateGroup(
|
||||
url_.c_str(), label_.c_str(), isolate_snapshot_data,
|
||||
isolate_snapshot_instructions, shared_snapshot_data,
|
||||
shared_snapshot_instructions, nullptr /* flags */, state, &error);
|
||||
if (!isolate_) {
|
||||
FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolate failed: %s", error);
|
||||
FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolateGroup failed: %s", error);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -61,13 +61,13 @@ const char* kDartVMArgs[] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
Dart_Isolate IsolateCreateCallback(const char* uri,
|
||||
const char* name,
|
||||
const char* package_root,
|
||||
const char* package_config,
|
||||
Dart_IsolateFlags* flags,
|
||||
void* callback_data,
|
||||
char** error) {
|
||||
Dart_Isolate IsolateGroupCreateCallback(const char* uri,
|
||||
const char* name,
|
||||
const char* package_root,
|
||||
const char* package_config,
|
||||
Dart_IsolateFlags* flags,
|
||||
void* callback_data,
|
||||
char** error) {
|
||||
if (std::string(uri) == DART_VM_SERVICE_ISOLATE_NAME) {
|
||||
#if defined(DART_PRODUCT)
|
||||
*error = strdup("The service isolate is not implemented in product mode");
|
||||
@ -92,7 +92,7 @@ void IsolateShutdownCallback(void* callback_data) {
|
||||
}
|
||||
}
|
||||
|
||||
void IsolateCleanupCallback(void* callback_data) {
|
||||
void IsolateGroupCleanupCallback(void* callback_data) {
|
||||
delete static_cast<std::shared_ptr<tonic::DartState>*>(callback_data);
|
||||
}
|
||||
|
||||
@ -167,9 +167,9 @@ DartRunner::DartRunner() : context_(sys::ComponentContext::Create()) {
|
||||
params.vm_snapshot_data = vm_snapshot_data_.address();
|
||||
params.vm_snapshot_instructions = vm_snapshot_instructions_.address();
|
||||
#endif
|
||||
params.create = IsolateCreateCallback;
|
||||
params.shutdown = IsolateShutdownCallback;
|
||||
params.cleanup = IsolateCleanupCallback;
|
||||
params.create_group = IsolateGroupCreateCallback;
|
||||
params.shutdown_isolate = IsolateShutdownCallback;
|
||||
params.cleanup_group = IsolateGroupCleanupCallback;
|
||||
params.entropy_source = EntropySource;
|
||||
#if !defined(DART_PRODUCT)
|
||||
params.get_service_assets = GetVMServiceAssetsArchiveCallback;
|
||||
|
||||
@ -123,14 +123,14 @@ Dart_Isolate CreateServiceIsolate(const char* uri,
|
||||
#endif
|
||||
|
||||
auto state = new std::shared_ptr<tonic::DartState>(new tonic::DartState());
|
||||
Dart_Isolate isolate = Dart_CreateIsolate(
|
||||
Dart_Isolate isolate = Dart_CreateIsolateGroup(
|
||||
uri, DART_VM_SERVICE_ISOLATE_NAME, mapped_isolate_snapshot_data.address(),
|
||||
mapped_isolate_snapshot_instructions.address(),
|
||||
mapped_shared_snapshot_data.address(),
|
||||
mapped_shared_snapshot_instructions.address(), nullptr /* flags */, state,
|
||||
error);
|
||||
if (!isolate) {
|
||||
FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolate failed: %s", *error);
|
||||
FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolateGroup failed: %s", *error);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user