78 {
80
81 const uint8_t *vmservice_data = nullptr, *vmservice_instructions = nullptr;
82
83#if defined(AOT_RUNTIME)
84
85 const char* snapshot_path = "/pkg/data/vmservice_snapshot.so";
86 if (elf_snapshot.Load(nullptr, snapshot_path)) {
87 vmservice_data = elf_snapshot.IsolateData();
88 vmservice_instructions = elf_snapshot.IsolateInstrs();
89 if (vmservice_data == nullptr || vmservice_instructions == nullptr) {
90 return nullptr;
91 }
92 } else {
93
94 const char* snapshot_data_path =
95 "/pkg/data/vmservice_isolate_snapshot_data.bin";
96 const char* snapshot_instructions_path =
97 "/pkg/data/vmservice_isolate_snapshot_instructions.bin";
98#else
99
100 const char* snapshot_data_path = "/pkg/data/isolate_core_snapshot_data.bin";
101 const char* snapshot_instructions_path =
102 "/pkg/data/isolate_core_snapshot_instructions.bin";
103#endif
104
106 nullptr, snapshot_data_path, mapped_isolate_snapshot_data)) {
107 *
error =
strdup(
"Failed to load snapshot for service isolate");
109 return nullptr;
110 }
112 nullptr, snapshot_instructions_path,
113 mapped_isolate_snapshot_instructions, true )) {
114 *
error =
strdup(
"Failed to load snapshot for service isolate");
116 return nullptr;
117 }
118
119 vmservice_data = mapped_isolate_snapshot_data.address();
120 vmservice_instructions = mapped_isolate_snapshot_instructions.address();
121#if defined(AOT_RUNTIME)
122 }
123#endif
124
127 flags.null_safety =
true;
128
133 if (!isolate) {
135 return nullptr;
136 }
137
138 state->get()->SetIsolate(isolate);
139
140
142 service_natives->Register({
144 {
"VMServiceIO_Shutdown",
Shutdown, 0,
true},
145 });
146
148
156
157
161
162
166
167
171
172
177
178
183
185 fileno(stderr), zx::channel(), true);
186
187
191 if (*
error !=
nullptr) {
195 return nullptr;
196 }
197 return isolate;
198}
static bool LoadFromNamespace(fdio_ns_t *namespc, const std::string &path, MappedResource &resource, bool executable=false)
DART_EXPORT Dart_Isolate Dart_CreateIsolateGroup(const char *script_uri, const char *name, const uint8_t *isolate_snapshot_data, const uint8_t *isolate_snapshot_instructions, Dart_IsolateFlags *flags, void *isolate_group_data, void *isolate_data, char **error)
DART_EXPORT void Dart_IsolateFlagsInitialize(Dart_IsolateFlags *flags)
DART_EXPORT DART_WARN_UNUSED_RESULT char * Dart_IsolateMakeRunnable(Dart_Isolate isolate)
DART_EXPORT Dart_Handle Dart_SetNativeResolver(Dart_Handle library, Dart_NativeEntryResolver resolver, Dart_NativeEntrySymbol symbol)
DART_EXPORT void Dart_EnterScope(void)
DART_EXPORT void Dart_ExitScope(void)
DART_EXPORT void Dart_ShutdownIsolate(void)
struct _Dart_Handle * Dart_Handle
struct _Dart_Isolate * Dart_Isolate
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url)
DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_SetField(Dart_Handle container, Dart_Handle name, Dart_Handle value)
DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char *str)
DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value)
DART_EXPORT Dart_Handle Dart_NewBoolean(bool value)
DART_EXPORT void Dart_EnterIsolate(Dart_Isolate isolate)
#define DART_VM_SERVICE_ISOLATE_NAME
DART_EXPORT void Dart_ExitIsolate(void)
DART_EXPORT Dart_Handle Dart_SetRootLibrary(Dart_Handle library)
FlutterSemanticsFlag flags
const uint8_t uint32_t uint32_t GError ** error
#define FML_LOG(severity)
static void Shutdown(Dart_NativeArguments args)
void NotifyServerState(Dart_NativeArguments args)
void InitBuiltinLibrariesForIsolate(const std::string &script_uri, fdio_ns_t *namespc, int stdoutfd, int stderrfd, zx::channel directory_request, bool service_isolate)
static void EmbedderInformationCallback(Dart_EmbedderInformation *info)
char * strdup(const char *str1)