Index: base/trace_event/trace_config.cc |
diff --git a/base/trace_event/trace_config.cc b/base/trace_event/trace_config.cc |
index 653b1995f81a8397b2ebd474a79a81e7af658293..ef9b8925fff6cd1144d2bf48bcdc0f88f3e48fd4 100644 |
--- a/base/trace_event/trace_config.cc |
+++ b/base/trace_event/trace_config.cc |
@@ -44,71 +44,34 @@ TraceConfig::TraceConfig() { |
TraceConfig::TraceConfig(const std::string& category_filter_string, |
const std::string& trace_options_string) { |
- if (!category_filter_string.empty()) { |
- std::vector<std::string> split; |
- std::vector<std::string>::iterator iter; |
- base::SplitString(category_filter_string, ',', &split); |
- for (iter = split.begin(); iter != split.end(); ++iter) { |
- std::string category = *iter; |
- // Ignore empty categories. |
- if (category.empty()) |
- continue; |
- // Synthetic delays are of the form 'DELAY(delay;option;option;...)'. |
- if (category.find(kSyntheticDelayCategoryFilterPrefix) == 0 && |
- category.at(category.size() - 1) == ')') { |
- category = category.substr( |
- strlen(kSyntheticDelayCategoryFilterPrefix), |
- category.size() - strlen(kSyntheticDelayCategoryFilterPrefix) - 1); |
- size_t name_length = category.find(';'); |
- if (name_length != std::string::npos && name_length > 0 && |
- name_length != category.size() - 1) { |
- synthetic_delays_.push_back(category); |
- } |
- } else if (category.at(0) == '-') { |
- // Excluded categories start with '-'. |
- // Remove '-' from category string. |
- category = category.substr(1); |
- excluded_categories_.push_back(category); |
- } else if (category.compare(0, strlen(TRACE_DISABLED_BY_DEFAULT("")), |
- TRACE_DISABLED_BY_DEFAULT("")) == 0) { |
- disabled_categories_.push_back(category); |
- } else { |
- included_categories_.push_back(category); |
- } |
- } |
- } |
+ InitializeFromStrings(category_filter_string, trace_options_string); |
+} |
- record_mode_ = RECORD_UNTIL_FULL; |
- enable_sampling_ = false; |
- enable_systrace_ = false; |
- enable_argument_filter_ = false; |
- if(!trace_options_string.empty()) { |
- std::vector<std::string> split; |
- std::vector<std::string>::iterator iter; |
- base::SplitString(trace_options_string, ',', &split); |
- for (iter = split.begin(); iter != split.end(); ++iter) { |
- if (*iter == kRecordUntilFull) { |
- record_mode_ = RECORD_UNTIL_FULL; |
- } else if (*iter == kRecordContinuously) { |
- record_mode_ = RECORD_CONTINUOUSLY; |
- } else if (*iter == kTraceToConsole) { |
- record_mode_ = ECHO_TO_CONSOLE; |
- } else if (*iter == kRecordAsMuchAsPossible) { |
- record_mode_ = RECORD_AS_MUCH_AS_POSSIBLE; |
- } else if (*iter == kEnableSampling) { |
- enable_sampling_ = true; |
- } else if (*iter == kEnableSystrace) { |
- enable_systrace_ = true; |
- } else if (*iter == kEnableArgumentFilter) { |
- enable_argument_filter_ = true; |
- } |
- } |
+TraceConfig::TraceConfig(const std::string& category_filter_string, |
+ TraceRecordMode record_mode) { |
+ std::string trace_options_string; |
+ switch (record_mode) { |
+ case RECORD_UNTIL_FULL: |
+ trace_options_string = kRecordUntilFull; |
+ break; |
+ case RECORD_CONTINUOUSLY: |
+ trace_options_string = kRecordContinuously; |
+ break; |
+ case RECORD_AS_MUCH_AS_POSSIBLE: |
+ trace_options_string = kRecordAsMuchAsPossible; |
+ break; |
+ case ECHO_TO_CONSOLE: |
+ trace_options_string = kTraceToConsole; |
+ break; |
+ default: |
+ NOTREACHED(); |
} |
+ InitializeFromStrings(category_filter_string, trace_options_string); |
} |
TraceConfig::TraceConfig(const std::string& config_string) { |
if (!config_string.empty()) |
- Initialize(config_string); |
+ InitializeFromConfigString(config_string); |
else |
InitializeDefault(); |
} |
@@ -274,7 +237,7 @@ void TraceConfig::InitializeDefault() { |
excluded_categories_.push_back("*Test"); |
} |
-void TraceConfig::Initialize(const std::string& config_string) { |
+void TraceConfig::InitializeFromConfigString(const std::string& config_string) { |
scoped_ptr<base::Value> value(base::JSONReader::Read(config_string)); |
if (!value || !value->IsType(base::Value::TYPE_DICTIONARY)) { |
InitializeDefault(); |
@@ -325,6 +288,71 @@ void TraceConfig::Initialize(const std::string& config_string) { |
SetSyntheticDelaysFromList(*category_list); |
} |
+void TraceConfig::InitializeFromStrings( |
+ const std::string& category_filter_string, |
+ const std::string& trace_options_string) { |
+ if (!category_filter_string.empty()) { |
+ std::vector<std::string> split; |
+ std::vector<std::string>::iterator iter; |
+ base::SplitString(category_filter_string, ',', &split); |
+ for (iter = split.begin(); iter != split.end(); ++iter) { |
+ std::string category = *iter; |
+ // Ignore empty categories. |
+ if (category.empty()) |
+ continue; |
+ // Synthetic delays are of the form 'DELAY(delay;option;option;...)'. |
+ if (category.find(kSyntheticDelayCategoryFilterPrefix) == 0 && |
+ category.at(category.size() - 1) == ')') { |
+ category = category.substr( |
+ strlen(kSyntheticDelayCategoryFilterPrefix), |
+ category.size() - strlen(kSyntheticDelayCategoryFilterPrefix) - 1); |
+ size_t name_length = category.find(';'); |
+ if (name_length != std::string::npos && name_length > 0 && |
+ name_length != category.size() - 1) { |
+ synthetic_delays_.push_back(category); |
+ } |
+ } else if (category.at(0) == '-') { |
+ // Excluded categories start with '-'. |
+ // Remove '-' from category string. |
+ category = category.substr(1); |
+ excluded_categories_.push_back(category); |
+ } else if (category.compare(0, strlen(TRACE_DISABLED_BY_DEFAULT("")), |
+ TRACE_DISABLED_BY_DEFAULT("")) == 0) { |
+ disabled_categories_.push_back(category); |
+ } else { |
+ included_categories_.push_back(category); |
+ } |
+ } |
+ } |
+ |
+ record_mode_ = RECORD_UNTIL_FULL; |
+ enable_sampling_ = false; |
+ enable_systrace_ = false; |
+ enable_argument_filter_ = false; |
+ if(!trace_options_string.empty()) { |
+ std::vector<std::string> split; |
+ std::vector<std::string>::iterator iter; |
+ base::SplitString(trace_options_string, ',', &split); |
+ for (iter = split.begin(); iter != split.end(); ++iter) { |
+ if (*iter == kRecordUntilFull) { |
+ record_mode_ = RECORD_UNTIL_FULL; |
+ } else if (*iter == kRecordContinuously) { |
+ record_mode_ = RECORD_CONTINUOUSLY; |
+ } else if (*iter == kTraceToConsole) { |
+ record_mode_ = ECHO_TO_CONSOLE; |
+ } else if (*iter == kRecordAsMuchAsPossible) { |
+ record_mode_ = RECORD_AS_MUCH_AS_POSSIBLE; |
+ } else if (*iter == kEnableSampling) { |
+ enable_sampling_ = true; |
+ } else if (*iter == kEnableSystrace) { |
+ enable_systrace_ = true; |
+ } else if (*iter == kEnableArgumentFilter) { |
+ enable_argument_filter_ = true; |
+ } |
+ } |
+ } |
+} |
+ |
void TraceConfig::SetCategoriesFromIncludedList( |
const base::ListValue& included_list) { |
included_categories_.clear(); |
@@ -390,12 +418,12 @@ void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
case RECORD_CONTINUOUSLY: |
dict.SetString(kRecordModeParam, kRecordContinuously); |
break; |
- case ECHO_TO_CONSOLE: |
- dict.SetString(kRecordModeParam, kTraceToConsole); |
- break; |
case RECORD_AS_MUCH_AS_POSSIBLE: |
dict.SetString(kRecordModeParam, kRecordAsMuchAsPossible); |
break; |
+ case ECHO_TO_CONSOLE: |
+ dict.SetString(kRecordModeParam, kTraceToConsole); |
+ break; |
default: |
NOTREACHED(); |
} |
@@ -425,12 +453,30 @@ void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
} |
std::string TraceConfig::ToTraceOptionsString() const { |
- TraceOptions to; |
- to.record_mode = record_mode_; |
- to.enable_sampling = enable_sampling_; |
- to.enable_systrace = enable_systrace_; |
- to.enable_argument_filter = enable_argument_filter_; |
- return to.ToString(); |
+ std::string ret; |
+ switch (record_mode_) { |
+ case RECORD_UNTIL_FULL: |
+ ret = kRecordUntilFull; |
+ break; |
+ case RECORD_CONTINUOUSLY: |
+ ret = kRecordContinuously; |
+ break; |
+ case RECORD_AS_MUCH_AS_POSSIBLE: |
+ ret = kRecordAsMuchAsPossible; |
+ break; |
+ case ECHO_TO_CONSOLE: |
+ ret = kTraceToConsole; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ if (enable_sampling_) |
+ ret = ret + "," + kEnableSampling; |
+ if (enable_systrace_) |
+ ret = ret + "," + kEnableSystrace; |
+ if (enable_argument_filter_) |
+ ret = ret + "," + kEnableArgumentFilter; |
+ return ret; |
} |
void TraceConfig::WriteCategoryFilterString(const StringList& values, |