77 {
78 Dart_SetEmbedderInformationCallback(EmbedderInformationCallback);
79
80 const uint8_t *vmservice_data = nullptr, *vmservice_instructions = nullptr;
81
82#if defined(AOT_RUNTIME)
83
84 const char* snapshot_path = "/pkg/data/vmservice_snapshot.so";
85 if (elf_snapshot.Load(nullptr, snapshot_path)) {
86 vmservice_data = elf_snapshot.IsolateData();
87 vmservice_instructions = elf_snapshot.IsolateInstrs();
88 if (vmservice_data == nullptr || vmservice_instructions == nullptr) {
89 return nullptr;
90 }
91 } else {
92
93 const char* snapshot_data_path =
94 "/pkg/data/vmservice_isolate_snapshot_data.bin";
95 const char* snapshot_instructions_path =
96 "/pkg/data/vmservice_isolate_snapshot_instructions.bin";
97#else
98
99 const char* snapshot_data_path = "/pkg/data/isolate_core_snapshot_data.bin";
100 const char* snapshot_instructions_path =
101 "/pkg/data/isolate_core_snapshot_instructions.bin";
102#endif
103
105 nullptr, snapshot_data_path, mapped_isolate_snapshot_data)) {
106 *
error =
strdup(
"Failed to load snapshot for service isolate");
108 return nullptr;
109 }
111 nullptr, snapshot_instructions_path,
112 mapped_isolate_snapshot_instructions, true )) {
113 *
error =
strdup(
"Failed to load snapshot for service isolate");
115 return nullptr;
116 }
117
118 vmservice_data = mapped_isolate_snapshot_data.address();
119 vmservice_instructions = mapped_isolate_snapshot_instructions.address();
120#if defined(AOT_RUNTIME)
121 }
122#endif
123
124 Dart_IsolateFlags flags;
125 Dart_IsolateFlagsInitialize(&flags);
126 flags.null_safety = true;
127
129 Dart_Isolate isolate = Dart_CreateIsolateGroup(
130 uri, DART_VM_SERVICE_ISOLATE_NAME, vmservice_data, vmservice_instructions,
131 &flags, state, state,
error);
132 if (!isolate) {
133 FML_LOG(ERROR) <<
"Dart_CreateIsolateGroup failed: " << *
error;
134 return nullptr;
135 }
136
137 state->get()->SetIsolate(isolate);
138
139
141 service_natives->Register({
142 {"VMServiceIO_NotifyServerState", NotifyServerState, 1, true},
143 {"VMServiceIO_Shutdown", Shutdown, 0, true},
144 });
145
146 Dart_EnterScope();
147
148 Dart_Handle library =
149 Dart_LookupLibrary(Dart_NewStringFromCString("dart:vmservice_io"));
151 Dart_Handle result = Dart_SetRootLibrary(library);
153 result = Dart_SetNativeResolver(library, GetNativeFunction, GetSymbol);
155
156
157 result = Dart_SetField(library, Dart_NewStringFromCString("_ip"),
158 Dart_NewStringFromCString("127.0.0.1"));
160
161
162 result = Dart_SetField(library, Dart_NewStringFromCString("_port"),
163 Dart_NewInteger(0));
165
166
167 result = Dart_SetField(library, Dart_NewStringFromCString("_autoStart"),
168 Dart_NewBoolean(true));
170
171
172 result =
173 Dart_SetField(library, Dart_NewStringFromCString("_originCheckDisabled"),
174 Dart_NewBoolean(false));
176
177
178 result =
179 Dart_SetField(library, Dart_NewStringFromCString("_authCodesDisabled"),
180 Dart_NewBoolean(false));
182
184 fileno(stderr), zx::channel(), true);
185
186
187 Dart_ExitScope();
188 Dart_ExitIsolate();
189 *
error = Dart_IsolateMakeRunnable(isolate);
190 if (*
error !=
nullptr) {
192 Dart_EnterIsolate(isolate);
193 Dart_ShutdownIsolate();
194 return nullptr;
195 }
196 return isolate;
197}
static bool LoadFromNamespace(fdio_ns_t *namespc, const std::string &path, MappedResource &resource, bool executable=false)
const uint8_t uint32_t uint32_t GError ** error
#define FML_LOG(severity)
void InitBuiltinLibrariesForIsolate(const std::string &script_uri, fdio_ns_t *namespc, int stdoutfd, int stderrfd, zx::channel directory_request, bool service_isolate)
char * strdup(const char *str1)
#define SHUTDOWN_ON_ERROR(handle)