Flutter Engine
The Flutter Engine
dart_service_isolate.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_RUNTIME_DART_SERVICE_ISOLATE_H_
6#define FLUTTER_RUNTIME_DART_SERVICE_ISOLATE_H_
7
8#include <functional>
9#include <mutex>
10#include <set>
11#include <string>
12
13#include "flutter/fml/compiler_specific.h"
14#include "third_party/dart/runtime/include/dart_api.h"
15
16namespace flutter {
17
18//------------------------------------------------------------------------------
19/// @brief Utility methods for interacting with the DartVM managed service
20/// isolate present in debug and profile runtime modes.
21///
23 public:
24 //----------------------------------------------------------------------------
25 /// The handle used to refer to callbacks registered with the service isolate.
26 ///
27 using CallbackHandle = ptrdiff_t;
28
29 //----------------------------------------------------------------------------
30 /// A callback made by the Dart VM when the VM Service is ready. The argument
31 /// indicates the VM Service URI.
32 ///
34 std::function<void(const std::string& vm_service_uri)>;
35
36 //----------------------------------------------------------------------------
37 /// @brief Start the service isolate. This call may only be made in the
38 /// Dart VM initiated isolate creation callback. It is only valid
39 /// to make this call when the VM explicitly requests the creation
40 /// of the service isolate. The VM does this by specifying the
41 /// script URI to be `DART_VM_SERVICE_ISOLATE_NAME`. The isolate
42 /// to be designated as the service isolate must already be
43 /// created (but not running) when this call is made.
44 ///
45 /// @param[in] server_ip The service protocol IP address.
46 /// @param[in] server_port The service protocol port.
47 /// @param[in] embedder_tag_handler The library tag handler.
48 /// @param[in] disable_origin_check If websocket origin checks must
49 /// be enabled.
50 /// @param[in] disable_service_auth_codes If service auth codes must be
51 /// enabled.
52 /// @param[in] enable_service_port_fallback If fallback to port 0 must be
53 /// enabled when the bind fails.
54 /// @param error The error when this method
55 /// returns false. This string must
56 /// be freed by the caller using
57 /// `free`.
58 ///
59 /// @return If the startup was successful. Refer to the `error` for
60 /// details on failure.
61 ///
62 static bool Startup(const std::string& server_ip,
63 intptr_t server_port,
64 Dart_LibraryTagHandler embedder_tag_handler,
65 bool disable_origin_check,
66 bool disable_service_auth_codes,
67 bool enable_service_port_fallback,
68 char** error);
69
70 //----------------------------------------------------------------------------
71 /// @brief Add a callback that will get invoked when the VM Service
72 /// starts up. If the VM Service has already started before this
73 /// call is made, the callback is invoked immediately.
74 ///
75 /// This method is thread safe.
76 ///
77 /// @param[in] callback The callback with information about the VM Service.
78 ///
79 /// @return A handle for the callback that can be used later in
80 /// `RemoveServerStatusCallback`.
81 ///
82 [[nodiscard]] static CallbackHandle AddServerStatusCallback(
84
85 //----------------------------------------------------------------------------
86 /// @brief Removed a callback previously registered via
87 /// `AddServiceStatusCallback`.
88 ///
89 /// This method is thread safe.
90 ///
91 /// @param[in] handle The handle
92 ///
93 /// @return If the callback was unregistered. This may fail if there was
94 /// no such callback with that handle.
95 ///
97
98 private:
99 // Native entries.
100 static void NotifyServerState(Dart_NativeArguments args);
101 static void Shutdown(Dart_NativeArguments args);
102
103 static std::mutex callbacks_mutex_;
104 static std::set<std::unique_ptr<DartVMServiceServerStateCallback>> callbacks_;
105};
106
107} // namespace flutter
108
109#endif // FLUTTER_RUNTIME_DART_SERVICE_ISOLATE_H_
Utility methods for interacting with the DartVM managed service isolate present in debug and profile ...
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 sta...
static bool RemoveServerStatusCallback(CallbackHandle handle)
Removed a callback previously registered via AddServiceStatusCallback.
std::function< void(const std::string &vm_service_uri)> DartVMServiceServerStateCallback
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 callb...
struct _Dart_NativeArguments * Dart_NativeArguments
Definition: dart_api.h:3019
Dart_Handle(* Dart_LibraryTagHandler)(Dart_LibraryTag tag, Dart_Handle library_or_package_map_url, Dart_Handle url)
Definition: dart_api.h:3456
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
const uint8_t uint32_t uint32_t GError ** error
Dart_NativeFunction function
Definition: fuchsia.cc:51