Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
service.h
Go to the documentation of this file.
1// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_VM_SERVICE_H_
6#define RUNTIME_VM_SERVICE_H_
7
8#include <atomic>
9
11
12#include "vm/allocation.h"
13#include "vm/object_id_ring.h"
14#include "vm/os_thread.h"
15#include "vm/tagged_pointer.h"
16#include "vm/thread.h"
17
18namespace dart {
19
20#define SERVICE_PROTOCOL_MAJOR_VERSION 4
21#define SERVICE_PROTOCOL_MINOR_VERSION 15
22
23class Array;
24class EmbedderServiceHandler;
25class Error;
26class GCEvent;
27class GrowableObjectArray;
28class Instance;
29class Isolate;
30class IsolateGroup;
31class JSONStream;
32class JSONObject;
33class Object;
34class ServiceEvent;
35class String;
36
38 public:
40 virtual ~ServiceIdZone();
41
42 // Returned string will be zone allocated.
43 virtual char* GetServiceId(const Object& obj) = 0;
44
45 private:
46};
47
48#define ISOLATE_SERVICE_ID_FORMAT_STRING "isolates/%" Pd64 ""
49#define ISOLATE_GROUP_SERVICE_ID_PREFIX "isolateGroups/"
50#define ISOLATE_GROUP_SERVICE_ID_FORMAT_STRING \
51 ISOLATE_GROUP_SERVICE_ID_PREFIX "%" Pu64 ""
52
54 public:
56 virtual ~RingServiceIdZone();
57
59
60 // Returned string will be zone allocated.
61 virtual char* GetServiceId(const Object& obj);
62
64
65 ObjectIdRing::IdPolicy policy() const { return policy_; }
66
67 private:
68 ObjectIdRing* ring_;
70};
71
73 public:
74 explicit StreamInfo(const char* id)
75 : id_(id), enabled_(0), include_private_members_(false) {}
76
77 const char* id() const { return id_; }
78
79 void set_enabled(bool value) { enabled_ = value ? 1 : 0; }
80 bool enabled() const { return enabled_ != 0; }
81
82 void set_include_private_members(bool value) {
83 include_private_members_ = value;
84 }
85 bool include_private_members() const { return include_private_members_; }
86
87 // This may get access by multiple threads, but relaxed access is ok.
88 static intptr_t enabled_offset() { return OFFSET_OF(StreamInfo, enabled_); }
89
90 private:
91 const char* id_;
92 std::atomic<intptr_t> enabled_;
93 std::atomic<bool> include_private_members_;
94};
95
96class Service : public AllStatic {
97 public:
98 static void Init();
99 static void Cleanup();
100
101 // Handles a message which is not directed to an isolate.
102 static ErrorPtr HandleRootMessage(const Array& message);
103
104 // Handles a message which is not directed to an isolate and also
105 // expects the parameter keys and values to be actual dart objects.
106 static ErrorPtr HandleObjectRootMessage(const Array& message);
107
108 // Handles a message which is directed to a particular isolate.
109 static ErrorPtr HandleIsolateMessage(Isolate* isolate, const Array& message);
110
111 static void HandleEvent(ServiceEvent* event, bool enter_safepoint = true);
112
114 const char* name,
116 void* user_data);
117
118 static void RegisterRootEmbedderCallback(const char* name,
120 void* user_data);
121
124
125 static void SetEmbedderStreamCallbacks(
126 Dart_ServiceStreamListenCallback listen_callback,
127 Dart_ServiceStreamCancelCallback cancel_callback);
128
129 static void SetGetServiceAssetsCallback(
130 Dart_GetVMServiceAssetsArchive get_service_assets);
131
132 static void SendEchoEvent(Isolate* isolate, const char* text);
133 static void SendInspectEvent(Isolate* isolate, const Object& inspectee);
134
135 static void SendEmbedderEvent(Isolate* isolate,
136 const char* stream_id,
137 const char* event_kind,
138 const uint8_t* bytes,
139 intptr_t bytes_len);
140
141 static void SendLogEvent(Isolate* isolate,
142 int64_t sequence_number,
143 int64_t timestamp,
144 intptr_t level,
145 const String& name,
146 const String& message,
147 const Instance& zone,
148 const Object& error,
149 const Instance& stack_trace);
150
151 static void SendExtensionEvent(Isolate* isolate,
152 const String& event_kind,
153 const String& event_data);
154
155 // Takes ownership of 'data'.
156 static void SendEventWithData(const char* stream_id,
157 const char* event_type,
158 intptr_t reservation,
159 const char* metadata,
160 intptr_t metadata_size,
161 uint8_t* data,
162 intptr_t data_size);
163
164 static void PostError(const String& method_name,
165 const Array& parameter_keys,
166 const Array& parameter_values,
167 const Instance& reply_port,
168 const Instance& id,
169 const Error& error);
170
171 // Logs the size of the contents of `js` to FLAG_log_service_response_sizes.
172 static void LogResponseSize(const char* method, JSONStream* js);
173
174 // Enable/Disable timeline categories.
175 // Returns True if the categories were successfully enabled, False otherwise.
176 static bool EnableTimelineStreams(char* categories_list);
177
178 // Well-known streams.
189
190 static bool ListenStream(const char* stream_id, bool include_privates);
191 static void CancelStream(const char* stream_id);
192
193 static ObjectPtr RequestAssets();
194
196 return stream_listen_callback_;
197 }
199 return stream_cancel_callback_;
200 }
201
203 static void PrintJSONForVM(JSONStream* js, bool ref);
204
205 static void CheckForPause(Isolate* isolate, JSONStream* stream);
206
207 static int64_t CurrentRSS();
208 static int64_t MaxRSS();
209
210 static void SetDartLibraryKernelForSources(const uint8_t* kernel_bytes,
211 intptr_t kernel_length);
213 return (dart_library_kernel_ != nullptr);
214 }
215
216 static const uint8_t* dart_library_kernel() { return dart_library_kernel_; }
217
218 static intptr_t dart_library_kernel_length() {
219 return dart_library_kernel_len_;
220 }
221
222 private:
223 static ErrorPtr InvokeMethod(Isolate* isolate,
224 const Array& message,
225 bool parameters_are_dart_objects = false);
226
227 static void EmbedderHandleMessage(EmbedderServiceHandler* handler,
228 JSONStream* js);
229
230 static EmbedderServiceHandler* FindIsolateEmbedderHandler(const char* name);
231 static EmbedderServiceHandler* FindRootEmbedderHandler(const char* name);
232 static void ScheduleExtensionHandler(const Instance& handler,
233 const String& method_name,
234 const Array& parameter_keys,
235 const Array& parameter_values,
236 const Instance& reply_port,
237 const Instance& id);
238
239 // Takes ownership of 'bytes'.
240 static void SendEvent(const char* stream_id,
241 const char* event_type,
242 uint8_t* bytes,
243 intptr_t bytes_length);
244
245 static void PostEvent(IsolateGroup* isolate_group,
246 Isolate* isolate,
247 const char* stream_id,
248 const char* kind,
250 bool enter_safepoint);
251
252 static void PostEventImpl(IsolateGroup* isolate_group,
253 Isolate* isolate,
254 const char* stream_id,
255 const char* kind,
257
258 static ErrorPtr MaybePause(Isolate* isolate, const Error& error);
259
260 static EmbedderServiceHandler* isolate_service_handler_head_;
261 static EmbedderServiceHandler* root_service_handler_head_;
262 static Dart_ServiceStreamListenCallback stream_listen_callback_;
263 static Dart_ServiceStreamCancelCallback stream_cancel_callback_;
264 static Dart_GetVMServiceAssetsArchive get_service_assets_callback_;
265 static Dart_EmbedderInformationCallback embedder_information_callback_;
266
267 static void* service_response_size_log_file_;
268
269 static const uint8_t* dart_library_kernel_;
270 static intptr_t dart_library_kernel_len_;
271};
272
273// Visible for testing.
274intptr_t ParseJSONArray(Thread* thread,
275 const char* str,
276 const GrowableObjectArray& elements);
277
278} // namespace dart
279
280#endif // RUNTIME_VM_SERVICE_H_
ax::mojom::Event event_type
virtual ~RingServiceIdZone()
Definition service.cc:372
void set_policy(ObjectIdRing::IdPolicy policy)
Definition service.h:63
ObjectIdRing::IdPolicy policy() const
Definition service.h:65
virtual char * GetServiceId(const Object &obj)
Definition service.cc:380
virtual ~ServiceIdZone()
Definition service.cc:367
virtual char * GetServiceId(const Object &obj)=0
static StreamInfo isolate_stream
Definition service.h:180
static void SendEmbedderEvent(Isolate *isolate, const char *stream_id, const char *event_kind, const uint8_t *bytes, intptr_t bytes_len)
Definition service.cc:4838
static void LogResponseSize(const char *method, JSONStream *js)
Definition service.cc:86
static ErrorPtr HandleRootMessage(const Array &message)
Definition service.cc:1059
static StreamInfo timeline_stream
Definition service.h:187
static void CancelStream(const char *stream_id)
Definition service.cc:448
static void HandleEvent(ServiceEvent *event, bool enter_safepoint=true)
Definition service.cc:1206
static bool ListenStream(const char *stream_id, bool include_privates)
Definition service.cc:427
static StreamInfo debug_stream
Definition service.h:181
static void SendEchoEvent(Isolate *isolate, const char *text)
Definition service.cc:1744
static const uint8_t * dart_library_kernel()
Definition service.h:216
static void SetGetServiceAssetsCallback(Dart_GetVMServiceAssetsArchive get_service_assets)
Definition service.cc:1441
static bool HasDartLibraryKernelForSources()
Definition service.h:212
static void SetDartLibraryKernelForSources(const uint8_t *kernel_bytes, intptr_t kernel_length)
Definition service.cc:1481
static void SendExtensionEvent(Isolate *isolate, const String &event_kind, const String &event_data)
Definition service.cc:4876
static void SetEmbedderStreamCallbacks(Dart_ServiceStreamListenCallback listen_callback, Dart_ServiceStreamCancelCallback cancel_callback)
Definition service.cc:1434
static ErrorPtr HandleIsolateMessage(Isolate *isolate, const Array &message)
Definition service.cc:1069
static ObjectPtr RequestAssets()
Definition service.cc:466
static void RegisterRootEmbedderCallback(const char *name, Dart_ServiceRequestCallback callback, void *user_data)
Definition service.cc:1411
static void SendInspectEvent(Isolate *isolate, const Object &inspectee)
Definition service.cc:4829
static StreamInfo vm_stream
Definition service.h:179
static void Init()
Definition service.cc:97
static void RegisterIsolateEmbedderCallback(const char *name, Dart_ServiceRequestCallback callback, void *user_data)
Definition service.cc:1376
static void PostError(const String &method_name, const Array &parameter_keys, const Array &parameter_values, const Instance &reply_port, const Instance &id, const Error &error)
Definition service.cc:937
static StreamInfo echo_stream
Definition service.h:183
static StreamInfo logging_stream
Definition service.h:185
static ErrorPtr HandleObjectRootMessage(const Array &message)
Definition service.cc:1064
static Dart_ServiceStreamCancelCallback stream_cancel_callback()
Definition service.h:198
static int64_t CurrentRSS()
Definition service.cc:1451
static StreamInfo profiler_stream
Definition service.h:188
static void SendLogEvent(Isolate *isolate, int64_t sequence_number, int64_t timestamp, intptr_t level, const String &name, const String &message, const Instance &zone, const Object &error, const Instance &stack_trace)
Definition service.cc:4850
static Dart_ServiceStreamListenCallback stream_listen_callback()
Definition service.h:195
static void CheckForPause(Isolate *isolate, JSONStream *stream)
Definition service.cc:3880
static StreamInfo gc_stream
Definition service.h:182
static void SendEventWithData(const char *stream_id, const char *event_type, intptr_t reservation, const char *metadata, intptr_t metadata_size, uint8_t *data, intptr_t data_size)
Definition service.cc:1134
static void PrintJSONForEmbedderInformation(JSONObject *jsobj)
Definition service.cc:5252
static StreamInfo extension_stream
Definition service.h:186
static void SetEmbedderInformationCallback(Dart_EmbedderInformationCallback callback)
Definition service.cc:1446
static int64_t MaxRSS()
Definition service.cc:1466
static bool EnableTimelineStreams(char *categories_list)
static StreamInfo heapsnapshot_stream
Definition service.h:184
static void Cleanup()
Definition service.cc:119
static intptr_t dart_library_kernel_length()
Definition service.h:218
static void PrintJSONForVM(JSONStream *js, bool ref)
Definition service.cc:5274
void set_enabled(bool value)
Definition service.h:79
static intptr_t enabled_offset()
Definition service.h:88
bool include_private_members() const
Definition service.h:85
StreamInfo(const char *id)
Definition service.h:74
bool enabled() const
Definition service.h:80
const char * id() const
Definition service.h:77
void set_include_private_members(bool value)
Definition service.h:82
Dart_Handle(* Dart_GetVMServiceAssetsArchive)(void)
Definition dart_api.h:833
bool(* Dart_ServiceStreamListenCallback)(const char *stream_id)
bool(* Dart_ServiceRequestCallback)(const char *method, const char **param_keys, const char **param_values, intptr_t num_params, void *user_data, const char **json_object)
void(* Dart_ServiceStreamCancelCallback)(const char *stream_id)
void(* Dart_EmbedderInformationCallback)(Dart_EmbedderInformation *info)
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
FlKeyEvent * event
const uint8_t uint32_t uint32_t GError ** error
uint8_t value
void Init()
std::u16string text
Win32Message message
const char *const name
static int8_t data[kExtLength]
intptr_t ParseJSONArray(Thread *thread, const char *str, const GrowableObjectArray &elements)
Definition service.cc:3660
#define OFFSET_OF(type, field)
Definition globals.h:138