Flutter Engine
The Flutter Engine
Public Types | Static Public Member Functions | List of all members
flutter::DartServiceIsolate Class Reference

Utility methods for interacting with the DartVM managed service isolate present in debug and profile runtime modes. More...

#include <dart_service_isolate.h>

Public Types

using CallbackHandle = ptrdiff_t
 
using DartVMServiceServerStateCallback = std::function< void(const std::string &vm_service_uri)>
 

Static Public Member Functions

static bool Startup (const std::string &server_ip, intptr_t server_port, Dart_LibraryTagHandler embedder_tag_handler, bool disable_origin_check, bool disable_service_auth_codes, bool enable_service_port_fallback, char **error)
 Start the service isolate. This call may only be made in the Dart VM initiated isolate creation callback. It is only valid to make this call when the VM explicitly requests the creation of the service isolate. The VM does this by specifying the script URI to be DART_VM_SERVICE_ISOLATE_NAME. The isolate to be designated as the service isolate must already be created (but not running) when this call is made. More...
 
static CallbackHandle AddServerStatusCallback (const DartVMServiceServerStateCallback &callback)
 Add a callback that will get invoked when the VM Service starts up. If the VM Service has already started before this call is made, the callback is invoked immediately. More...
 
static bool RemoveServerStatusCallback (CallbackHandle handle)
 Removed a callback previously registered via AddServiceStatusCallback. More...
 

Detailed Description

Utility methods for interacting with the DartVM managed service isolate present in debug and profile runtime modes.

Definition at line 22 of file dart_service_isolate.h.

Member Typedef Documentation

◆ CallbackHandle

The handle used to refer to callbacks registered with the service isolate.

Definition at line 27 of file dart_service_isolate.h.

◆ DartVMServiceServerStateCallback

using flutter::DartServiceIsolate::DartVMServiceServerStateCallback = std::function<void(const std::string& vm_service_uri)>

A callback made by the Dart VM when the VM Service is ready. The argument indicates the VM Service URI.

Definition at line 33 of file dart_service_isolate.h.

Member Function Documentation

◆ AddServerStatusCallback()

DartServiceIsolate::CallbackHandle flutter::DartServiceIsolate::AddServerStatusCallback ( const DartVMServiceServerStateCallback callback)
static

Add a callback that will get invoked when the VM Service starts up. If the VM Service has already started before this call is made, the callback is invoked immediately.

This method is thread safe.

Parameters
[in]callbackThe callback with information about the VM Service.
Returns
A handle for the callback that can be used later in RemoveServerStatusCallback.

Definition at line 84 of file dart_service_isolate.cc.

85 {
86 if (!callback) {
87 return 0;
88 }
89
90 auto callback_pointer =
91 std::make_unique<DartServiceIsolate::DartVMServiceServerStateCallback>(
92 callback);
93
94 auto handle = reinterpret_cast<CallbackHandle>(callback_pointer.get());
95
96 {
97 std::scoped_lock lock(callbacks_mutex_);
98 callbacks_.insert(std::move(callback_pointer));
99 }
100
101 if (!g_vm_service_uri.empty()) {
102 callback(g_vm_service_uri);
103 }
104
105 return handle;
106}
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback

◆ RemoveServerStatusCallback()

bool flutter::DartServiceIsolate::RemoveServerStatusCallback ( CallbackHandle  handle)
static

Removed a callback previously registered via AddServiceStatusCallback.

This method is thread safe.

Parameters
[in]handleThe handle
Returns
If the callback was unregistered. This may fail if there was no such callback with that handle.

Definition at line 108 of file dart_service_isolate.cc.

109 {
110 std::scoped_lock lock(callbacks_mutex_);
111 auto found = std::find_if(
112 callbacks_.begin(), callbacks_.end(),
113 [callback_handle](const auto& item) {
114 return reinterpret_cast<CallbackHandle>(item.get()) == callback_handle;
115 });
116
117 if (found == callbacks_.end()) {
118 return false;
119 }
120
121 callbacks_.erase(found);
122 return true;
123}

◆ Startup()

bool flutter::DartServiceIsolate::Startup ( const std::string &  server_ip,
intptr_t  server_port,
Dart_LibraryTagHandler  embedder_tag_handler,
bool  disable_origin_check,
bool  disable_service_auth_codes,
bool  enable_service_port_fallback,
char **  error 
)
static

Start the service isolate. This call may only be made in the Dart VM initiated isolate creation callback. It is only valid to make this call when the VM explicitly requests the creation of the service isolate. The VM does this by specifying the script URI to be DART_VM_SERVICE_ISOLATE_NAME. The isolate to be designated as the service isolate must already be created (but not running) when this call is made.

Parameters
[in]server_ipThe service protocol IP address.
[in]server_portThe service protocol port.
[in]embedder_tag_handlerThe library tag handler.
[in]disable_origin_checkIf websocket origin checks must be enabled.
[in]disable_service_auth_codesIf service auth codes must be enabled.
[in]enable_service_port_fallbackIf fallback to port 0 must be enabled when the bind fails.
errorThe error when this method returns false. This string must be freed by the caller using free.
Returns
If the startup was successful. Refer to the error for details on failure.

Definition at line 129 of file dart_service_isolate.cc.

135 {
137 FML_CHECK(isolate);
138
139 // Remember the embedder's library tag handler.
140 g_embedder_tag_handler = embedder_tag_handler;
141 FML_CHECK(g_embedder_tag_handler);
142
143 // Setup native entries.
144 if (!g_natives) {
145 g_natives = new tonic::DartLibraryNatives();
146 g_natives->Register({
147 {"VMServiceIO_NotifyServerState", NotifyServerState, 1, true},
148 {"VMServiceIO_Shutdown", Shutdown, 0, true},
149 });
150 }
151
152 Dart_Handle uri = Dart_NewStringFromCString("dart:vmservice_io");
153 Dart_Handle library = Dart_LookupLibrary(uri);
154 SHUTDOWN_ON_ERROR(library);
157 result = Dart_SetNativeResolver(library, GetNativeFunction, GetSymbol);
159
160 library = Dart_RootLibrary();
161 SHUTDOWN_ON_ERROR(library);
162
163 // Set the HTTP server's ip.
165 Dart_NewStringFromCString(server_ip.c_str()));
167 // If we have a port specified, start the server immediately.
168 bool auto_start = server_port >= 0;
169 if (server_port < 0) {
170 // Adjust server_port to port 0 which will result in the first available
171 // port when the HTTP server is started.
172 server_port = 0;
173 }
174 // Set the HTTP's servers port.
176 Dart_NewInteger(server_port));
178 result = Dart_SetField(library, Dart_NewStringFromCString("_autoStart"),
179 Dart_NewBoolean(auto_start));
181 result =
182 Dart_SetField(library, Dart_NewStringFromCString("_originCheckDisabled"),
183 Dart_NewBoolean(disable_origin_check));
185 result =
186 Dart_SetField(library, Dart_NewStringFromCString("_authCodesDisabled"),
187 Dart_NewBoolean(disable_service_auth_codes));
190 library, Dart_NewStringFromCString("_enableServicePortFallback"),
191 Dart_NewBoolean(enable_service_port_fallback));
193
194 // Make runnable.
198 if (*error) {
199 Dart_EnterIsolate(isolate);
201 return false;
202 }
203 Dart_EnterIsolate(isolate);
205
206 return true;
207}
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
Definition: dart_api.h:258
struct _Dart_Isolate * Dart_Isolate
Definition: dart_api.h:88
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_Isolate Dart_CurrentIsolate(void)
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)
DART_EXPORT void Dart_ExitIsolate(void)
DART_EXPORT Dart_Handle Dart_RootLibrary(void)
DART_EXPORT Dart_Handle Dart_SetRootLibrary(Dart_Handle library)
#define SHUTDOWN_ON_ERROR(handle)
const uint8_t uint32_t uint32_t GError ** error
GAsyncResult * result
#define FML_CHECK(condition)
Definition: logging.h:85

The documentation for this class was generated from the following files: