Index: runtime/vm/service.cc |
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc |
index b47a133c76ae4f299214cd2ed228162fadc8393f..066354f0d59c8066470953dd4e2642609acece5f 100644 |
--- a/runtime/vm/service.cc |
+++ b/runtime/vm/service.cc |
@@ -109,6 +109,7 @@ const ServiceMethodDescriptor* FindMethod(const char* method_name); |
Dart_ServiceStreamListenCallback Service::stream_listen_callback_ = NULL; |
Dart_ServiceStreamCancelCallback Service::stream_cancel_callback_ = NULL; |
Dart_GetVMServiceAssetsArchive Service::get_service_assets_callback_ = NULL; |
+Dart_EmbedderInformationCallback Service::embedder_information_callback_ = NULL; |
// These are the set of streams known to the core VM. |
StreamInfo Service::vm_stream("VM"); |
@@ -1227,6 +1228,41 @@ void Service::SetGetServiceAssetsCallback( |
get_service_assets_callback_ = get_service_assets; |
} |
+void Service::SetEmbedderInformationCallback( |
+ Dart_EmbedderInformationCallback callback) { |
+ embedder_information_callback_ = callback; |
+} |
+ |
+int64_t Service::CurrentRSS() { |
+ if (embedder_information_callback_ == NULL) { |
+ return -1; |
+ } |
+ Dart_EmbedderInformation info = { |
+ 0, // version |
+ NULL, // name |
+ 0, // max_rss |
+ 0 // current_rss |
+ }; |
+ embedder_information_callback_(&info); |
+ ASSERT(info.version == DART_EMBEDDER_INFORMATION_CURRENT_VERSION); |
+ return info.current_rss; |
+} |
+ |
+int64_t Service::MaxRSS() { |
+ if (embedder_information_callback_ == NULL) { |
+ return -1; |
+ } |
+ Dart_EmbedderInformation info = { |
+ 0, // version |
+ NULL, // name |
+ 0, // max_rss |
+ 0 // current_rss |
+ }; |
+ embedder_information_callback_(&info); |
+ ASSERT(info.version == DART_EMBEDDER_INFORMATION_CURRENT_VERSION); |
+ return info.max_rss; |
+} |
+ |
EmbedderServiceHandler* Service::FindRootEmbedderHandler(const char* name) { |
EmbedderServiceHandler* current = root_service_handler_head_; |
while (current != NULL) { |
@@ -3821,6 +3857,28 @@ static const MethodParameter* get_vm_params[] = { |
NO_ISOLATE_PARAMETER, NULL, |
}; |
+void Service::PrintJSONForEmbedderInformation(JSONObject *jsobj) { |
+ if (embedder_information_callback_ != NULL) { |
+ Dart_EmbedderInformation info = { |
+ 0, // version |
+ NULL, // name |
+ 0, // max_rss |
+ 0 // current_rss |
+ }; |
+ embedder_information_callback_(&info); |
+ ASSERT(info.version == DART_EMBEDDER_INFORMATION_CURRENT_VERSION); |
+ if (info.name != NULL) { |
+ jsobj->AddProperty("_embedder", info.name); |
+ } |
+ if (info.max_rss > 0) { |
+ jsobj->AddProperty64("_maxRSS", info.max_rss); |
+ } |
+ if (info.max_rss > 0) { |
+ jsobj->AddProperty64("_currentRSS", info.current_rss); |
+ } |
+ } |
+} |
+ |
void Service::PrintJSONForVM(JSONStream* js, bool ref) { |
JSONObject jsobj(js); |
jsobj.AddProperty("type", (ref ? "@VM" : "VM")); |
@@ -3836,10 +3894,10 @@ void Service::PrintJSONForVM(JSONStream* js, bool ref) { |
jsobj.AddProperty64("_nativeZoneMemoryUsage", |
ApiNativeScope::current_memory_usage()); |
jsobj.AddProperty64("pid", OS::ProcessId()); |
- jsobj.AddProperty64("_maxRSS", OS::MaxRSS()); |
jsobj.AddPropertyTimeMillis( |
"startTime", OS::GetCurrentTimeMillis() - Dart::UptimeMillis()); |
MallocHooks::PrintToJSONObject(&jsobj); |
+ PrintJSONForEmbedderInformation(&jsobj); |
// Construct the isolate list. |
{ |
JSONArray jsarr(&jsobj, "isolates"); |