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

Unified Diff: chrome/test/chromedriver/capabilities.cc

Issue 429693003: [ChromeDriver] Implementing PerfLoggingPrefs for perf log (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing memory leak Created 6 years, 4 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 | « chrome/test/chromedriver/capabilities.h ('k') | chrome/test/chromedriver/capabilities_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/chromedriver/capabilities.cc
diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc
index b30e871d4ba898f70603ca2b36c314b562375457..ad11603a46d540352b47c4b18e2fc64d467dcfbf 100644
--- a/chrome/test/chromedriver/capabilities.cc
+++ b/chrome/test/chromedriver/capabilities.cc
@@ -302,6 +302,48 @@ Status ParseLoggingPrefs(const base::Value& option,
return Status(kOk);
}
+Status ParseInspectorDomainStatus(
+ PerfLoggingPrefs::InspectorDomainStatus* to_set,
+ const base::Value& option,
+ Capabilities* capabilities) {
+ bool desired_value;
+ if (!option.GetAsBoolean(&desired_value))
+ return Status(kUnknownError, "must be a boolean");
+ if (desired_value)
+ *to_set = PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyEnabled;
+ else
+ *to_set = PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyDisabled;
+ return Status(kOk);
+}
+
+Status ParsePerfLoggingPrefs(const base::Value& option,
+ Capabilities* capabilities) {
+ const base::DictionaryValue* perf_logging_prefs = NULL;
+ if (!option.GetAsDictionary(&perf_logging_prefs))
+ return Status(kUnknownError, "must be a dictionary");
+
+ std::map<std::string, Parser> parser_map;
+ parser_map["enableNetwork"] = base::Bind(
+ &ParseInspectorDomainStatus, &capabilities->perf_logging_prefs.network);
+ parser_map["enablePage"] = base::Bind(
+ &ParseInspectorDomainStatus, &capabilities->perf_logging_prefs.page);
+ parser_map["enableTimeline"] = base::Bind(
+ &ParseInspectorDomainStatus, &capabilities->perf_logging_prefs.timeline);
+ parser_map["traceCategories"] = base::Bind(
+ &ParseString, &capabilities->perf_logging_prefs.trace_categories);
+
+ for (base::DictionaryValue::Iterator it(*perf_logging_prefs); !it.IsAtEnd();
+ it.Advance()) {
+ if (parser_map.find(it.key()) == parser_map.end())
+ return Status(kUnknownError, "unrecognized performance logging "
+ "option: " + it.key());
+ Status status = parser_map[it.key()].Run(it.value(), capabilities);
+ if (status.IsError())
+ return Status(kUnknownError, "cannot parse " + it.key(), status);
+ }
+ return Status(kOk);
+}
+
Status ParseChromeOptions(
const base::Value& capability,
Capabilities* capabilities) {
@@ -318,6 +360,9 @@ Status ParseChromeOptions(
parser_map["args"] = base::Bind(&IgnoreCapability);
parser_map["binary"] = base::Bind(&IgnoreCapability);
parser_map["extensions"] = base::Bind(&IgnoreCapability);
+
+ parser_map["perfLoggingPrefs"] = base::Bind(&ParsePerfLoggingPrefs);
+
if (is_android) {
parser_map["androidActivity"] =
base::Bind(&ParseString, &capabilities->android_activity);
@@ -473,6 +518,14 @@ std::string Switches::ToString() const {
return str;
}
+PerfLoggingPrefs::PerfLoggingPrefs()
+ : network(InspectorDomainStatus::kDefaultEnabled),
+ page(InspectorDomainStatus::kDefaultEnabled),
+ timeline(InspectorDomainStatus::kDefaultEnabled),
+ trace_categories() {}
+
+PerfLoggingPrefs::~PerfLoggingPrefs() {}
+
Capabilities::Capabilities()
: android_use_running_app(false),
detach(false),
@@ -504,5 +557,16 @@ Status Capabilities::Parse(const base::DictionaryValue& desired_caps) {
}
}
}
+ // Perf log must be enabled if perf log prefs are specified; otherwise, error.
+ LoggingPrefs::const_iterator iter = logging_prefs.find(
+ WebDriverLog::kPerformanceType);
+ if (iter == logging_prefs.end() || iter->second == Log::kOff) {
+ const base::DictionaryValue* chrome_options = NULL;
+ if (desired_caps.GetDictionary("chromeOptions", &chrome_options) &&
+ chrome_options->HasKey("perfLoggingPrefs")) {
+ return Status(kUnknownError, "perfLoggingPrefs specified, "
+ "but performance logging was not enabled");
+ }
+ }
return Status(kOk);
}
« no previous file with comments | « chrome/test/chromedriver/capabilities.h ('k') | chrome/test/chromedriver/capabilities_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698