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

Unified Diff: src/libplatform/tracing/trace-config.cc

Issue 2137013006: [Tracing] V8 Tracing Controller (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add getter for more attributes of TraceObject Created 4 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 side-by-side diff with in-line comments
Download patch
Index: src/libplatform/tracing/trace-config.cc
diff --git a/src/libplatform/tracing/trace-config.cc b/src/libplatform/tracing/trace-config.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5e5735460722b2f006e29c011f5a63d2f734bbd8
--- /dev/null
+++ b/src/libplatform/tracing/trace-config.cc
@@ -0,0 +1,139 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string.h>
+
+#include "include/libplatform/v8-tracing.h"
+
+namespace v8 {
+
+class Isolate;
+
+namespace platform {
+namespace tracing {
+
+// String options that can be used to initialize TraceOptions.
+const char kRecordUntilFull[] = "record-until-full";
+const char kRecordContinuously[] = "record-continuously";
+const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible";
+
+const char kRecordModeParam[] = "record_mode";
+const char kEnableSamplingParam[] = "enable_sampling";
+const char kEnableSystraceParam[] = "enable_systrace";
+const char kEnableArgumentFilterParam[] = "enable_argument_filter";
+const char kIncludedCategoriesParam[] = "included_categories";
+const char kExcludedCategoriesParam[] = "excluded_categories";
+
+class TraceConfigParser {
+ public:
+ static void FillTraceConfig(v8::Isolate* isolate, TraceConfig* trace_config,
+ const char* json_str) {
+ HandleScope outer_scope(isolate);
+ Local<Context> context = Context::New(isolate);
+ Context::Scope context_scope(context);
+ HandleScope inner_scope(isolate);
+
+ Local<String> source =
+ String::NewFromUtf8(isolate, json_str, NewStringType::kNormal)
+ .ToLocalChecked();
+ Local<Value> result = JSON::Parse(context, source).ToLocalChecked();
+ Local<v8::Object> trace_config_object = Local<v8::Object>::Cast(result);
+
+ trace_config->record_mode_ =
+ GetTraceRecordMode(isolate, context, trace_config_object);
+ trace_config->enable_sampling_ =
+ GetBoolean(isolate, context, trace_config_object, kEnableSamplingParam);
+ trace_config->enable_systrace_ =
+ GetBoolean(isolate, context, trace_config_object, kEnableSystraceParam);
+ trace_config->enable_argument_filter_ = GetBoolean(
+ isolate, context, trace_config_object, kEnableArgumentFilterParam);
+ UpdateCategoriesList(isolate, context, trace_config_object,
+ kIncludedCategoriesParam,
+ trace_config->included_categories_);
+ UpdateCategoriesList(isolate, context, trace_config_object,
+ kExcludedCategoriesParam,
+ trace_config->excluded_categories_);
+ }
+
+ private:
+ static bool GetBoolean(v8::Isolate* isolate, Local<Context> context,
+ Local<v8::Object> object, const char* property) {
+ Local<Value> value = GetValue(isolate, context, object, property);
+ if (value->IsNumber()) {
+ Local<Boolean> v8_boolean = value->ToBoolean(context).ToLocalChecked();
+ return v8_boolean->Value();
+ }
+ return false;
+ }
+
+ static int UpdateCategoriesList(v8::Isolate* isolate, Local<Context> context,
+ Local<v8::Object> object,
+ const char* property,
+ TraceConfig::StringList& categories_list) {
+ Local<Value> value = GetValue(isolate, context, object, property);
+ if (value->IsArray()) {
+ Local<Array> v8_array = Local<Array>::Cast(value);
+ for (int i = 0, length = v8_array->Length(); i < length; ++i) {
+ Local<Value> v = v8_array->Get(context, i)
+ .ToLocalChecked()
+ ->ToString(context)
+ .ToLocalChecked();
+ String::Utf8Value str(v->ToString(context).ToLocalChecked());
+ categories_list.push_back(std::string(*str));
+ }
+ return v8_array->Length();
+ }
+ return 0;
+ }
+
+ static TraceRecordMode GetTraceRecordMode(v8::Isolate* isolate,
+ Local<Context> context,
+ Local<v8::Object> object) {
+ Local<Value> value = GetValue(isolate, context, object, kRecordModeParam);
+ if (value->IsString()) {
+ Local<String> v8_string = value->ToString(context).ToLocalChecked();
+ String::Utf8Value str(v8_string);
+ if (strcmp(kRecordUntilFull, *str) == 0) {
+ return TraceRecordMode::RECORD_UNTIL_FULL;
+ } else if (strcmp(kRecordContinuously, *str) == 0) {
+ return TraceRecordMode::RECORD_CONTINUOUSLY;
+ } else if (strcmp(kRecordAsMuchAsPossible, *str) == 0) {
+ return TraceRecordMode::RECORD_AS_MUCH_AS_POSSIBLE;
+ }
+ }
+ return TraceRecordMode::RECORD_UNTIL_FULL;
+ }
+
+ static Local<Value> GetValue(v8::Isolate* isolate, Local<Context> context,
+ Local<v8::Object> object, const char* property) {
+ Local<String> v8_str =
+ String::NewFromUtf8(isolate, property, NewStringType::kNormal)
+ .ToLocalChecked();
+ return object->Get(context, v8_str).ToLocalChecked();
+ }
+};
+
+TraceConfig* TraceConfig::CreateTraceConfigFromJSON(v8::Isolate* isolate,
+ const char* json_str) {
+ TraceConfig* trace_config = new TraceConfig();
+ TraceConfigParser::FillTraceConfig(isolate, trace_config, json_str);
+ return trace_config;
+}
+
+TraceConfig* TraceConfig::CreateDefaultTraceConfig() {
+ TraceConfig* trace_config = new TraceConfig();
+ trace_config->included_categories_.push_back("v8");
+ return trace_config;
+}
+
+bool TraceConfig::IsCategoryGroupEnabled(const char* category_group) const {
+ for (auto included_category : included_categories_) {
+ if (strcmp(included_category.data(), category_group) == 0) return true;
+ }
+ return false;
+}
+
+} // namespace tracing
+} // namespace platform
+} // namespace v8

Powered by Google App Engine
This is Rietveld 408576698