78 {
79 Dart_SetEmbedderInformationCallback(EmbedderInformationCallback);
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
125 Dart_IsolateFlags flags;
126 Dart_IsolateFlagsInitialize(&flags);
127 flags.null_safety = true;
128
130 Dart_Isolate isolate = Dart_CreateIsolateGroup(
131 uri, DART_VM_SERVICE_ISOLATE_NAME, vmservice_data, vmservice_instructions,
132 &flags, state, state,
error);
133 if (!isolate) {
134 FML_LOG(ERROR) <<
"Dart_CreateIsolateGroup failed: " << *
error;
135 return nullptr;
136 }
137
138 state->get()->SetIsolate(isolate);
139
140
142 service_natives->Register({
143 {"VMServiceIO_NotifyServerState", NotifyServerState, 1, true},
144 {"VMServiceIO_Shutdown", Shutdown, 0, true},
145 });
146
147 Dart_EnterScope();
148
149 Dart_Handle library =
150 Dart_LookupLibrary(Dart_NewStringFromCString("dart:vmservice_io"));
152 Dart_Handle result = Dart_SetRootLibrary(library);
154 result = Dart_SetNativeResolver(library, GetNativeFunction, GetSymbol);
156
157
158 result = Dart_SetField(library, Dart_NewStringFromCString("_ip"),
159 Dart_NewStringFromCString("127.0.0.1"));
161
162
163 result = Dart_SetField(library, Dart_NewStringFromCString("_port"),
164 Dart_NewInteger(0));
166
167
168 result = Dart_SetField(library, Dart_NewStringFromCString("_autoStart"),
169 Dart_NewBoolean(true));
171
172
173 result =
174 Dart_SetField(library, Dart_NewStringFromCString("_originCheckDisabled"),
175 Dart_NewBoolean(false));
177
178
179 result =
180 Dart_SetField(library, Dart_NewStringFromCString("_authCodesDisabled"),
181 Dart_NewBoolean(false));
183
185 fileno(stderr), zx::channel(), true);
186
187
188 Dart_ExitScope();
189 Dart_ExitIsolate();
190 *
error = Dart_IsolateMakeRunnable(isolate);
191 if (*
error !=
nullptr) {
193 Dart_EnterIsolate(isolate);
194 Dart_ShutdownIsolate();
195 return nullptr;
196 }
197 return isolate;
198}
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)