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

Unified Diff: runtime/vm/service.cc

Issue 1690333002: Add fine grained command line and service protocol control over timeline streams recording (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/timeline.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service.cc
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index cdfdd288fd5a6bdac4b41a622febbfbb234d28de..ed5e89da31614cc00b06de8bfdcb0d31a1dd32db 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -647,7 +647,6 @@ class EnumListParameter : public MethodParameter {
// Returns number of elements in the list. -1 on parse error.
intptr_t ElementCount(const char* value) const {
const char* kJsonWhitespaceChars = " \t\r\n";
-
if (value == NULL) {
return -1;
}
@@ -2408,13 +2407,9 @@ static const char* const report_enum_names[] = {
};
-static const EnumListParameter* reports_parameter =
- new EnumListParameter("reports", true, report_enum_names);
-
-
static const MethodParameter* get_source_report_params[] = {
RUNNABLE_ISOLATE_PARAMETER,
- reports_parameter,
+ new EnumListParameter("reports", true, report_enum_names),
new IdParameter("scriptId", false),
new UIntParameter("tokenPos", false),
new UIntParameter("endTokenPos", false),
@@ -2425,6 +2420,8 @@ static const MethodParameter* get_source_report_params[] = {
static bool GetSourceReport(Thread* thread, JSONStream* js) {
const char* reports_str = js->LookupParam("reports");
+ const EnumListParameter* reports_parameter =
+ static_cast<const EnumListParameter*>(get_source_report_params[1]);
const char** reports = reports_parameter->Parse(thread->zone(), reports_str);
intptr_t report_set = 0;
while (*reports != NULL) {
@@ -2860,27 +2857,54 @@ static bool GetVMMetric(Thread* thread, JSONStream* js) {
return false;
}
+static const char* const timeline_streams_enum_names[] = {
+ "all",
+#define DEFINE_NAME(name, unused) \
+ #name,
+ISOLATE_TIMELINE_STREAM_LIST(DEFINE_NAME)
+#undef DEFINE_NAME
+ "VM",
+ NULL
+};
-static const MethodParameter* set_vm_timeline_flag_params[] = {
+static const MethodParameter* set_vm_timeline_flags_params[] = {
NO_ISOLATE_PARAMETER,
- new MethodParameter("_record", true),
+ new EnumListParameter("recordedStreams",
+ false,
+ timeline_streams_enum_names),
NULL,
};
-static bool SetVMTimelineFlag(Thread* thread, JSONStream* js) {
+static bool HasStream(const char** recorded_streams, const char* stream) {
+ while (*recorded_streams != NULL) {
+ if ((strcasestr(*recorded_streams, "all") != NULL) ||
+ (strcasestr(*recorded_streams, stream) != NULL)) {
+ return true;
+ }
+ recorded_streams++;
+ }
+ return false;
+}
+
+
+static bool SetVMTimelineFlags(Thread* thread, JSONStream* js) {
Isolate* isolate = thread->isolate();
ASSERT(isolate != NULL);
StackZone zone(thread);
- bool recording = strcmp(js->LookupParam("_record"), "all") == 0;
- Timeline::SetStreamAPIEnabled(recording);
- Timeline::SetStreamCompilerEnabled(recording);
- Timeline::SetStreamDartEnabled(recording);
- Timeline::SetStreamDebuggerEnabled(recording);
- Timeline::SetStreamEmbedderEnabled(recording);
- Timeline::SetStreamGCEnabled(recording);
- Timeline::SetStreamIsolateEnabled(recording);
+ const EnumListParameter* recorded_streams_param =
+ static_cast<const EnumListParameter*>(set_vm_timeline_flags_params[1]);
+
+ const char* recorded_streams_str = js->LookupParam("recordedStreams");
+ const char** recorded_streams =
+ recorded_streams_param->Parse(thread->zone(), recorded_streams_str);
+
+#define SET_ENABLE_STREAM(name, unused) \
+ Timeline::SetStream##name##Enabled(HasStream(recorded_streams, #name));
+ISOLATE_TIMELINE_STREAM_LIST(SET_ENABLE_STREAM);
+#undef SET_ENABLE_STREAM
+ Timeline::SetVMStreamEnabled(HasStream(recorded_streams, "VM"));
PrintSuccess(js);
@@ -2888,19 +2912,17 @@ static bool SetVMTimelineFlag(Thread* thread, JSONStream* js) {
}
-static const MethodParameter* get_vm_timeline_flag_params[] = {
+static const MethodParameter* get_vm_timeline_flags_params[] = {
NO_ISOLATE_PARAMETER,
- new MethodParameter("_record", false),
NULL,
};
-static bool GetVMTimelineFlag(Thread* thread, JSONStream* js) {
+static bool GetVMTimelineFlags(Thread* thread, JSONStream* js) {
Isolate* isolate = thread->isolate();
ASSERT(isolate != NULL);
StackZone zone(thread);
-
- js->PrintError(kFeatureDisabled, "TODO(johnmccutchan)");
+ Timeline::PrintFlagsToJSON(js);
return true;
}
@@ -3918,8 +3940,8 @@ static const ServiceMethodDescriptor service_methods_[] = {
get_vm_metric_list_params },
{ "_getVMTimeline", GetVMTimeline,
get_vm_timeline_params },
- { "_getVMTimelineFlag", GetVMTimelineFlag,
- get_vm_timeline_flag_params },
+ { "_getVMTimelineFlags", GetVMTimelineFlags,
+ get_vm_timeline_flags_params },
{ "pause", Pause,
pause_params },
{ "removeBreakpoint", RemoveBreakpoint,
@@ -3942,8 +3964,8 @@ static const ServiceMethodDescriptor service_methods_[] = {
set_trace_class_allocation_params },
{ "setVMName", SetVMName,
set_vm_name_params },
- { "_setVMTimelineFlag", SetVMTimelineFlag,
- set_vm_timeline_flag_params },
+ { "_setVMTimelineFlags", SetVMTimelineFlags,
+ set_vm_timeline_flags_params },
};
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/timeline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698