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

Unified Diff: content/public/browser/background_tracing_manager.cc

Issue 1002103004: NOT FOR REVIEW - Slow Reports Reference Implementation Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: JSON serialization. Created 5 years, 7 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 | « content/public/browser/background_tracing_manager.h ('k') | content/public/browser/tracing_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/browser/background_tracing_manager.cc
diff --git a/content/public/browser/background_tracing_manager.cc b/content/public/browser/background_tracing_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..877b369e2606b613e4b80180e20d33c9a474ef01
--- /dev/null
+++ b/content/public/browser/background_tracing_manager.cc
@@ -0,0 +1,207 @@
+// Copyright 2015 The Chromium 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 "content/public/browser/background_tracing_manager.h"
+
+namespace content {
+
+namespace {
+
+const char kConfigsKey[] = "configs";
+
+const char kConfigModeKey[] = "mode";
+const char kConfigModePreemptive[] = "preemptive";
+const char kConfigModeReactive[] = "reactive";
+
+const char kConfigCategoryKey[] = "category";
+const char kConfigCategoryBenchmark[] = "benchmark";
+const char kConfigCategoryBenchmarkDeep[] = "benchmark-deep";
+
+const char kConfigRuleKey[] = "rule";
+const char kConfigRuleMonitorNamed[] = "monitor_named";
+const char kConfigRuleTriggerNameKey[] = "trigger_name";
+
+} // namespace
+
+BackgroundTracingConfig::BackgroundTracingConfig(Mode mode) : mode_(mode) {
+}
+
+BackgroundTracingConfig::~BackgroundTracingConfig() {
+}
+
+BackgroundTracingConfig::Mode BackgroundTracingConfig::mode() const {
+ return mode_;
+}
+
+scoped_refptr<BackgroundTracingConfig> BackgroundTracingConfig::FromDict(
+ const base::DictionaryValue* dict) {
+ std::string mode;
+ if (!dict->GetString(kConfigModeKey, &mode))
+ return NULL;
+
+ scoped_refptr<BackgroundTracingConfig> config = NULL;
+
+ if (mode == kConfigModePreemptive) {
+ config = BackgroundTracingPreemptiveConfig::FromDict(dict);
+ } else if (mode == kConfigModeReactive) {
+ config = BackgroundTracingReactiveConfig::FromDict(dict);
+ } else {
+ CHECK(false);
+ }
+
+ return config;
+}
+
+void BackgroundTracingConfig::IntoDict(base::DictionaryValue* dict) {
+ CHECK(dict);
+
+ switch (mode_) {
+ case PREEMPTIVE_TRACING_MODE:
+ dict->SetString(kConfigModeKey, kConfigModePreemptive);
+ static_cast<BackgroundTracingPreemptiveConfig*>(this)->AsDict(dict);
+ break;
+ case REACTIVE_TRACING_MODE:
+ dict->SetString(kConfigModeKey, kConfigModeReactive);
+ static_cast<BackgroundTracingPreemptiveConfig*>(this)->AsDict(dict);
+ break;
+ }
+}
+
+BackgroundTracingPreemptiveConfig::BackgroundTracingPreemptiveConfig()
+ : BackgroundTracingConfig(BackgroundTracingConfig::PREEMPTIVE_TRACING_MODE),
+ category_preset_(BackgroundTracingConfig::BENCHMARK) {
+}
+
+BackgroundTracingPreemptiveConfig::~BackgroundTracingPreemptiveConfig() {
+}
+
+void BackgroundTracingPreemptiveConfig::AddHistogramTriggerRule(
+ const std::string& histogram_name,
+ int histogram_bin) {
+ MonitoringRule rule;
+ rule.type = MONITOR_AND_DUMP_WHEN_SPECIFIC_HISTOGRAM_AND_VALUE;
+ rule.histogram_trigger_info.histogram_name_to_trigger_on = histogram_name;
+ rule.histogram_trigger_info.histogram_bin_to_trigger_on = histogram_bin;
+ configs_.push_back(rule);
+}
+
+void BackgroundTracingPreemptiveConfig::AddNamedTriggerRule(
+ const std::string& name) {
+ MonitoringRule rule;
+ rule.type = MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED;
+ rule.named_trigger_info.trigger_name = name;
+ configs_.push_back(rule);
+}
+
+BackgroundTracingConfig::CategoryPreset
+BackgroundTracingPreemptiveConfig::category_preset() const {
+ return category_preset_;
+}
+
+const std::vector<BackgroundTracingPreemptiveConfig::MonitoringRule>&
+BackgroundTracingPreemptiveConfig::configs() const {
+ return configs_;
+}
+
+scoped_refptr<BackgroundTracingPreemptiveConfig>
+BackgroundTracingPreemptiveConfig::FromDict(const base::DictionaryValue* dict) {
+ scoped_refptr<BackgroundTracingPreemptiveConfig> config(
+ new BackgroundTracingPreemptiveConfig());
+
+ std::string category_preset;
+ if (!dict->GetString(kConfigCategoryKey, &category_preset))
+ return NULL;
+
+ if (category_preset == kConfigCategoryBenchmark) {
+ config->category_preset_ = BENCHMARK;
+ } else if (category_preset == kConfigCategoryBenchmarkDeep) {
+ config->category_preset_ = BENCHMARK_DEEP;
+ } else {
+ CHECK(false);
+ }
+
+ const base::ListValue* configs_list = NULL;
+ if (!dict->GetList(kConfigsKey, &configs_list))
+ return NULL;
+
+ for (auto it = configs_list->begin(); it != configs_list->end(); ++it) {
+ const base::DictionaryValue* config_dict = NULL;
+ if (!(*it)->GetAsDictionary(&config_dict))
+ return NULL;
+
+ std::string type;
+ if (!config_dict->GetString(kConfigRuleKey, &type))
+ return NULL;
+
+ if (type == kConfigRuleMonitorNamed) {
+ std::string trigger_name;
+ if (!config_dict->GetString(kConfigRuleTriggerNameKey, &trigger_name))
+ return NULL;
+
+ config->AddNamedTriggerRule(trigger_name);
+ } else {
+ CHECK(false);
+ }
+ }
+
+ return config.Pass();
+}
+
+void BackgroundTracingPreemptiveConfig::AsDict(base::DictionaryValue* dict) {
+ // TODO: Move to function.
+ switch (category_preset_) {
+ case BENCHMARK:
+ dict->SetString(kConfigCategoryKey, kConfigCategoryBenchmark);
+ break;
+ case BENCHMARK_DEEP:
+ dict->SetString(kConfigCategoryKey, kConfigCategoryBenchmarkDeep);
+ break;
+ }
+
+ base::ListValue* configs_list = new base::ListValue();
+
+ for (size_t i = 0; i < configs_.size(); ++i) {
+ base::DictionaryValue* config_dict = new base::DictionaryValue();
+
+ if (configs_[i].type == MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED) {
+ config_dict->SetString(kConfigRuleKey, kConfigRuleMonitorNamed);
+ config_dict->SetString(
+ kConfigRuleTriggerNameKey,
+ configs_[i].named_trigger_info.trigger_name.c_str());
+ }
+
+ configs_list->Append(config_dict);
+ }
+
+ dict->Set(kConfigsKey, configs_list);
+}
+
+BackgroundTracingReactiveConfig::BackgroundTracingReactiveConfig()
+ : BackgroundTracingConfig(BackgroundTracingConfig::REACTIVE_TRACING_MODE) {
+}
+
+BackgroundTracingReactiveConfig::~BackgroundTracingReactiveConfig() {
+}
+
+void BackgroundTracingReactiveConfig::AddTracingRule(
+ RuleType rule_type,
+ const char* trigger_name,
+ CategoryPreset category_preset) {
+ // TODO(simonhatch): Implement this.
+ CHECK(false);
+}
+
+scoped_refptr<BackgroundTracingReactiveConfig>
+BackgroundTracingReactiveConfig::FromDict(const base::DictionaryValue* dict) {
+ // TODO(simonhatch): Implement this.
+ CHECK(false);
+ return NULL;
+}
+
+void BackgroundTracingReactiveConfig::AsDict(base::DictionaryValue* dict) {
+ // TODO(simonhatch): Implement this.
+ CHECK(false);
+}
+}
+// namespace content
« no previous file with comments | « content/public/browser/background_tracing_manager.h ('k') | content/public/browser/tracing_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698