Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Side by Side Diff: runtime/vm/service.cc

Issue 2980733003: Introduced support for external services registration in the ServiceProtocol (Closed)
Patch Set: Address comments Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/service.h ('k') | runtime/vm/service_event.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/service.h" 5 #include "vm/service.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 #include "platform/globals.h" 9 #include "platform/globals.h"
10 10
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 // These are the set of streams known to the core VM. 122 // These are the set of streams known to the core VM.
123 StreamInfo Service::vm_stream("VM"); 123 StreamInfo Service::vm_stream("VM");
124 StreamInfo Service::isolate_stream("Isolate"); 124 StreamInfo Service::isolate_stream("Isolate");
125 StreamInfo Service::debug_stream("Debug"); 125 StreamInfo Service::debug_stream("Debug");
126 StreamInfo Service::gc_stream("GC"); 126 StreamInfo Service::gc_stream("GC");
127 StreamInfo Service::echo_stream("_Echo"); 127 StreamInfo Service::echo_stream("_Echo");
128 StreamInfo Service::graph_stream("_Graph"); 128 StreamInfo Service::graph_stream("_Graph");
129 StreamInfo Service::logging_stream("_Logging"); 129 StreamInfo Service::logging_stream("_Logging");
130 StreamInfo Service::extension_stream("Extension"); 130 StreamInfo Service::extension_stream("Extension");
131 StreamInfo Service::timeline_stream("Timeline"); 131 StreamInfo Service::timeline_stream("Timeline");
132 StreamInfo Service::editor_stream("_Editor");
133 132
134 static StreamInfo* streams_[] = { 133 static StreamInfo* streams_[] = {
135 &Service::vm_stream, &Service::isolate_stream, 134 &Service::vm_stream, &Service::isolate_stream,
136 &Service::debug_stream, &Service::gc_stream, 135 &Service::debug_stream, &Service::gc_stream,
137 &Service::echo_stream, &Service::graph_stream, 136 &Service::echo_stream, &Service::graph_stream,
138 &Service::logging_stream, &Service::extension_stream, 137 &Service::logging_stream, &Service::extension_stream,
139 &Service::timeline_stream, &Service::editor_stream}; 138 &Service::timeline_stream};
140 139
141 140
142 bool Service::ListenStream(const char* stream_id) { 141 bool Service::ListenStream(const char* stream_id) {
143 if (FLAG_trace_service) { 142 if (FLAG_trace_service) {
144 OS::Print("vm-service: starting stream '%s'\n", stream_id); 143 OS::Print("vm-service: starting stream '%s'\n", stream_id);
145 } 144 }
146 intptr_t num_streams = sizeof(streams_) / sizeof(streams_[0]); 145 intptr_t num_streams = sizeof(streams_) / sizeof(streams_[0]);
147 for (intptr_t i = 0; i < num_streams; i++) { 146 for (intptr_t i = 0; i < num_streams; i++) {
148 if (strcmp(stream_id, streams_[i]->id()) == 0) { 147 if (strcmp(stream_id, streams_[i]->id()) == 0) {
149 streams_[i]->set_enabled(true); 148 streams_[i]->set_enabled(true);
(...skipping 4058 matching lines...) Expand 10 before | Expand all | Expand 10 after
4208 PrintInvalidParamError(js, "classId"); 4207 PrintInvalidParamError(js, "classId");
4209 return true; 4208 return true;
4210 } 4209 }
4211 const Class& cls = Class::Handle(GetClassForId(isolate, cid)); 4210 const Class& cls = Class::Handle(GetClassForId(isolate, cid));
4212 ASSERT(!cls.IsNull()); 4211 ASSERT(!cls.IsNull());
4213 cls.SetTraceAllocation(enable); 4212 cls.SetTraceAllocation(enable);
4214 PrintSuccess(js); 4213 PrintSuccess(js);
4215 return true; 4214 return true;
4216 } 4215 }
4217 4216
4218 static const MethodParameter* send_object_to_editor_params[] = {
4219 RUNNABLE_ISOLATE_PARAMETER, new StringParameter("editor", true),
4220 new StringParameter("objectId", true), NULL,
4221 };
4222
4223 static bool SendObjectToEditor(Thread* thread, JSONStream* js) {
4224 // Handle heap objects.
4225 ObjectIdRing::LookupResult lookup_result;
4226 // Refreshing the id to avoid sending an expired ObjectRef
4227 const Object& obj = Object::Handle(
4228 LookupHeapObject(thread, js->LookupParam("objectId"), &lookup_result));
4229 if (obj.raw() != Object::sentinel().raw()) {
4230 // We found a heap object for this id. Return it.
4231 if (Service::editor_stream.enabled()) {
4232 ServiceEvent event(thread->isolate(),
4233 ServiceEvent::kEditorObjectSelected);
4234 ServiceEvent::EditorEvent editor_event;
4235 editor_event.object = &obj;
4236 editor_event.editor = js->LookupParam("editor");
4237 event.set_editor_event(editor_event);
4238 Service::HandleEvent(&event);
4239 }
4240 PrintSuccess(js);
4241 return true;
4242 } else if (lookup_result == ObjectIdRing::kCollected) {
4243 PrintSentinel(js, kCollectedSentinel);
4244 return true;
4245 } else if (lookup_result == ObjectIdRing::kExpired) {
4246 PrintSentinel(js, kExpiredSentinel);
4247 return true;
4248 }
4249 PrintInvalidParamError(js, "objectId");
4250
4251 return true;
4252 }
4253
4254
4255 // clang-format off 4217 // clang-format off
4256 static const ServiceMethodDescriptor service_methods_[] = { 4218 static const ServiceMethodDescriptor service_methods_[] = {
4257 { "_dumpIdZone", DumpIdZone, NULL }, 4219 { "_dumpIdZone", DumpIdZone, NULL },
4258 { "_echo", Echo, 4220 { "_echo", Echo,
4259 NULL }, 4221 NULL },
4260 { "_respondWithMalformedJson", RespondWithMalformedJson, 4222 { "_respondWithMalformedJson", RespondWithMalformedJson,
4261 NULL }, 4223 NULL },
4262 { "_respondWithMalformedObject", RespondWithMalformedObject, 4224 { "_respondWithMalformedObject", RespondWithMalformedObject,
4263 NULL }, 4225 NULL },
4264 { "_triggerEchoEvent", TriggerEchoEvent, 4226 { "_triggerEchoEvent", TriggerEchoEvent,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
4362 { "setName", SetName, 4324 { "setName", SetName,
4363 set_name_params }, 4325 set_name_params },
4364 { "_setTraceClassAllocation", SetTraceClassAllocation, 4326 { "_setTraceClassAllocation", SetTraceClassAllocation,
4365 set_trace_class_allocation_params }, 4327 set_trace_class_allocation_params },
4366 { "setVMName", SetVMName, 4328 { "setVMName", SetVMName,
4367 set_vm_name_params }, 4329 set_vm_name_params },
4368 { "_setVMTimelineFlags", SetVMTimelineFlags, 4330 { "_setVMTimelineFlags", SetVMTimelineFlags,
4369 set_vm_timeline_flags_params }, 4331 set_vm_timeline_flags_params },
4370 { "_collectAllGarbage", CollectAllGarbage, 4332 { "_collectAllGarbage", CollectAllGarbage,
4371 collect_all_garbage_params }, 4333 collect_all_garbage_params },
4372 { "_sendObjectToEditor", SendObjectToEditor,
4373 send_object_to_editor_params },
4374 }; 4334 };
4375 // clang-format on 4335 // clang-format on
4376 4336
4377 const ServiceMethodDescriptor* FindMethod(const char* method_name) { 4337 const ServiceMethodDescriptor* FindMethod(const char* method_name) {
4378 intptr_t num_methods = sizeof(service_methods_) / sizeof(service_methods_[0]); 4338 intptr_t num_methods = sizeof(service_methods_) / sizeof(service_methods_[0]);
4379 for (intptr_t i = 0; i < num_methods; i++) { 4339 for (intptr_t i = 0; i < num_methods; i++) {
4380 const ServiceMethodDescriptor& method = service_methods_[i]; 4340 const ServiceMethodDescriptor& method = service_methods_[i];
4381 if (strcmp(method_name, method.name) == 0) { 4341 if (strcmp(method_name, method.name) == 0) {
4382 return &method; 4342 return &method;
4383 } 4343 }
4384 } 4344 }
4385 return NULL; 4345 return NULL;
4386 } 4346 }
4387 4347
4388 #endif // !PRODUCT 4348 #endif // !PRODUCT
4389 4349
4390 } // namespace dart 4350 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/service.h ('k') | runtime/vm/service_event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698