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

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

Issue 1719313002: Add persistent handles to service protocol and Observatory UI (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
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
11 #include "vm/compiler.h" 11 #include "vm/compiler.h"
12 #include "vm/coverage.h" 12 #include "vm/coverage.h"
13 #include "vm/cpu.h" 13 #include "vm/cpu.h"
14 #include "vm/dart_api_impl.h" 14 #include "vm/dart_api_impl.h"
15 #include "vm/dart_api_state.h"
15 #include "vm/dart_entry.h" 16 #include "vm/dart_entry.h"
16 #include "vm/debugger.h" 17 #include "vm/debugger.h"
17 #include "vm/isolate.h" 18 #include "vm/isolate.h"
18 #include "vm/lockers.h" 19 #include "vm/lockers.h"
19 #include "vm/message.h" 20 #include "vm/message.h"
20 #include "vm/message_handler.h" 21 #include "vm/message_handler.h"
21 #include "vm/native_entry.h" 22 #include "vm/native_entry.h"
22 #include "vm/native_arguments.h" 23 #include "vm/native_arguments.h"
24 #include "vm/native_symbol.h"
23 #include "vm/object.h" 25 #include "vm/object.h"
24 #include "vm/object_graph.h" 26 #include "vm/object_graph.h"
25 #include "vm/object_id_ring.h" 27 #include "vm/object_id_ring.h"
26 #include "vm/object_store.h" 28 #include "vm/object_store.h"
27 #include "vm/parser.h" 29 #include "vm/parser.h"
28 #include "vm/port.h" 30 #include "vm/port.h"
29 #include "vm/profiler_service.h" 31 #include "vm/profiler_service.h"
30 #include "vm/reusable_handles.h" 32 #include "vm/reusable_handles.h"
31 #include "vm/service_event.h" 33 #include "vm/service_event.h"
32 #include "vm/service_isolate.h" 34 #include "vm/service_isolate.h"
(...skipping 3423 matching lines...) Expand 10 before | Expand all | Expand 10 after
3456 GetObjectHelper(thread, addr)); 3458 GetObjectHelper(thread, addr));
3457 if (obj.IsNull()) { 3459 if (obj.IsNull()) {
3458 PrintSentinel(js, kFreeSentinel); 3460 PrintSentinel(js, kFreeSentinel);
3459 } else { 3461 } else {
3460 obj.PrintJSON(js, ref); 3462 obj.PrintJSON(js, ref);
3461 } 3463 }
3462 return true; 3464 return true;
3463 } 3465 }
3464 3466
3465 3467
3468 static const MethodParameter* get_persistent_handles_params[] = {
3469 ISOLATE_PARAMETER,
3470 NULL,
3471 };
3472
3473
3474 template<typename T>
3475 class PersistentHandleVisitor : public HandleVisitor {
3476 public:
3477 PersistentHandleVisitor(Thread* thread, JSONArray* handles)
3478 : HandleVisitor(thread),
3479 handles_(handles) {
3480 ASSERT(handles_ != NULL);
3481 }
3482
3483 void Append(PersistentHandle* persistent_handle) {
3484 JSONObject obj(handles_);
3485 obj.AddProperty("type", "_PersistentHandle");
3486 const Object& object = Object::Handle(persistent_handle->raw());
3487 obj.AddProperty("object", object);
3488 }
3489
3490 void Append(FinalizablePersistentHandle* weak_persistent_handle) {
3491 JSONObject obj(handles_);
3492 obj.AddProperty("type", "_WeakPersistentHandle");
3493 const Object& object =
3494 Object::Handle(weak_persistent_handle->raw());
3495 obj.AddProperty("object", object);
3496 obj.AddPropertyF(
3497 "peer",
3498 "0x%" Px "",
3499 reinterpret_cast<uintptr_t>(weak_persistent_handle->peer()));
3500 obj.AddPropertyF(
3501 "callbackAddress",
3502 "0x%" Px "",
3503 reinterpret_cast<uintptr_t>(weak_persistent_handle->callback()));
3504 // Attempt to include a native symbol name.
3505 char* name = NativeSymbolResolver::LookupSymbolName(
3506 reinterpret_cast<uintptr_t>(weak_persistent_handle->callback()),
3507 NULL);
3508 obj.AddProperty("callbackSymbolName",
3509 (name == NULL) ? "" : name);
3510 if (name != NULL) {
3511 free(name);
rmacnak 2016/02/23 20:58:22 NativeSymbolResolver::FreeSymbolName
Cutch 2016/02/25 17:23:42 Done.
3512 }
3513 obj.AddPropertyF("externalSize",
3514 "%" Pd "",
3515 weak_persistent_handle->external_size());
3516 }
3517
3518 protected:
3519 virtual void VisitHandle(uword addr) {
3520 T* handle = reinterpret_cast<T*>(addr);
3521 Append(handle);
3522 }
3523
3524 JSONArray* handles_;
3525 };
3526
3527
3528 static bool GetPersistentHandles(Thread* thread, JSONStream* js) {
3529 Isolate* isolate = thread->isolate();
3530 ASSERT(isolate != NULL);
3531
3532 ApiState* api_state = isolate->api_state();
3533 ASSERT(api_state != NULL);
3534
3535 {
3536 JSONObject obj(js);
3537 obj.AddProperty("type", "_PersistentHandles");
3538 // Persistent handles.
3539 {
3540 JSONArray persistent_handles(&obj, "persistentHandles");
3541 PersistentHandles& handles = api_state->persistent_handles();
3542 PersistentHandleVisitor<PersistentHandle> visitor(
3543 thread, &persistent_handles);
3544 handles.Visit(&visitor);
3545 }
3546 // Weak persistent handles.
3547 {
3548 JSONArray weak_persistent_handles(&obj, "weakPersistentHandles");
3549 FinalizablePersistentHandles& handles =
3550 api_state->weak_persistent_handles();
3551 PersistentHandleVisitor<FinalizablePersistentHandle> visitor(
3552 thread, &weak_persistent_handles);
3553 handles.VisitHandles(&visitor);
3554 }
3555 }
3556
3557 return true;
3558 }
3559
3560
3466 static const MethodParameter* get_ports_params[] = { 3561 static const MethodParameter* get_ports_params[] = {
3467 RUNNABLE_ISOLATE_PARAMETER, 3562 RUNNABLE_ISOLATE_PARAMETER,
3468 NULL, 3563 NULL,
3469 }; 3564 };
3470 3565
3471 3566
3472 static bool GetPorts(Thread* thread, JSONStream* js) { 3567 static bool GetPorts(Thread* thread, JSONStream* js) {
3473 MessageHandler* message_handler = thread->isolate()->message_handler(); 3568 MessageHandler* message_handler = thread->isolate()->message_handler();
3474 PortMap::PrintPortsForMessageHandler(message_handler, js); 3569 PortMap::PrintPortsForMessageHandler(message_handler, js);
3475 return true; 3570 return true;
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
3927 { "getIsolate", GetIsolate, 4022 { "getIsolate", GetIsolate,
3928 get_isolate_params }, 4023 get_isolate_params },
3929 { "_getIsolateMetric", GetIsolateMetric, 4024 { "_getIsolateMetric", GetIsolateMetric,
3930 get_isolate_metric_params }, 4025 get_isolate_metric_params },
3931 { "_getIsolateMetricList", GetIsolateMetricList, 4026 { "_getIsolateMetricList", GetIsolateMetricList,
3932 get_isolate_metric_list_params }, 4027 get_isolate_metric_list_params },
3933 { "getObject", GetObject, 4028 { "getObject", GetObject,
3934 get_object_params }, 4029 get_object_params },
3935 { "_getObjectByAddress", GetObjectByAddress, 4030 { "_getObjectByAddress", GetObjectByAddress,
3936 get_object_by_address_params }, 4031 get_object_by_address_params },
4032 { "_getPersistentHandles", GetPersistentHandles,
4033 get_persistent_handles_params, },
3937 { "_getPorts", GetPorts, 4034 { "_getPorts", GetPorts,
3938 get_ports_params }, 4035 get_ports_params },
3939 { "_getReachableSize", GetReachableSize, 4036 { "_getReachableSize", GetReachableSize,
3940 get_reachable_size_params }, 4037 get_reachable_size_params },
3941 { "_getRetainedSize", GetRetainedSize, 4038 { "_getRetainedSize", GetRetainedSize,
3942 get_retained_size_params }, 4039 get_retained_size_params },
3943 { "_getRetainingPath", GetRetainingPath, 4040 { "_getRetainingPath", GetRetainingPath,
3944 get_retaining_path_params }, 4041 get_retaining_path_params },
3945 { "_getSourceReport", GetSourceReport, 4042 { "_getSourceReport", GetSourceReport,
3946 get_source_report_params }, 4043 get_source_report_params },
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3997 if (strcmp(method_name, method.name) == 0) { 4094 if (strcmp(method_name, method.name) == 0) {
3998 return &method; 4095 return &method;
3999 } 4096 }
4000 } 4097 }
4001 return NULL; 4098 return NULL;
4002 } 4099 }
4003 4100
4004 #endif // !PRODUCT 4101 #endif // !PRODUCT
4005 4102
4006 } // namespace dart 4103 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698