Index: base/trace_event/trace_config.cc |
diff --git a/base/trace_event/trace_config.cc b/base/trace_event/trace_config.cc |
index 5e2e00835ab3e7d80325df0bee5c4b5d5e05d691..314efe42f176e7bc03a8bc343f9b0a914133a0c6 100644 |
--- a/base/trace_event/trace_config.cc |
+++ b/base/trace_event/trace_config.cc |
@@ -47,6 +47,7 @@ const char kSyntheticDelayCategoryFilterPrefix[] = "DELAY("; |
// String parameters that is used to parse memory dump config in trace config |
// string. |
const char kMemoryDumpConfigParam[] = "memory_dump_config"; |
+const char kAllowedDumpModesParam[] = "allowed_dump_modes"; |
const char kTriggersParam[] = "triggers"; |
const char kPeriodicIntervalParam[] = "periodic_interval_ms"; |
const char kModeParam[] = "mode"; |
@@ -75,6 +76,18 @@ class ConvertableTraceConfigToTraceFormat |
const TraceConfig trace_config_; |
}; |
+std::set<MemoryDumpLevelOfDetail> GetDefaultAllowedMemoryDumpModes() { |
+ const MemoryDumpLevelOfDetail kDefaultAllowedDumpModes[] = { |
+ MemoryDumpLevelOfDetail::BACKGROUND, MemoryDumpLevelOfDetail::LIGHT, |
+ MemoryDumpLevelOfDetail::DETAILED}; |
+ std::set<MemoryDumpLevelOfDetail> modes(kDefaultAllowedDumpModes, |
Primiano Tucci (use gerrit)
2016/06/09 18:46:39
Hmm I'll make this a bit more self-maintaining and
ssid
2016/06/09 21:34:15
didn't know I could iterate here, thanks.
|
+ kDefaultAllowedDumpModes + 3); |
+ // To keep the |kDefaultAllowedDumpModes| updated with new modes added. |
+ DCHECK_EQ(static_cast<uint32_t>(MemoryDumpLevelOfDetail::LAST), |
Primiano Tucci (use gerrit)
2016/06/09 18:46:39
at which point you get rid of the dcheck
ssid
2016/06/09 21:34:15
Done.
|
+ modes.size() - 1); |
+ return modes; |
+} |
+ |
} // namespace |
@@ -99,6 +112,7 @@ TraceConfig::MemoryDumpConfig::MemoryDumpConfig( |
TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; |
void TraceConfig::MemoryDumpConfig::Clear() { |
+ allowed_dump_modes.clear(); |
triggers.clear(); |
heap_profiler_options.Clear(); |
} |
@@ -517,9 +531,23 @@ void TraceConfig::AddCategoryToDict(base::DictionaryValue& dict, |
void TraceConfig::SetMemoryDumpConfigFromConfigDict( |
const base::DictionaryValue& memory_dump_config) { |
+ // Set allowed dump modes. |
+ memory_dump_config_.allowed_dump_modes.clear(); |
+ const base::ListValue* allowed_modes_list; |
+ if (memory_dump_config.GetList(kAllowedDumpModesParam, &allowed_modes_list)) { |
+ for (size_t i = 0; i < allowed_modes_list->GetSize(); ++i) { |
+ std::string level_of_detail_str; |
+ allowed_modes_list->GetString(i, &level_of_detail_str); |
+ memory_dump_config_.allowed_dump_modes.insert( |
+ StringToMemoryDumpLevelOfDetail(level_of_detail_str)); |
+ } |
+ } else { |
+ // If allowed modes param is not given then allow all modes by default. |
+ memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); |
+ } |
+ |
// Set triggers |
memory_dump_config_.triggers.clear(); |
- |
const base::ListValue* trigger_list = nullptr; |
if (memory_dump_config.GetList(kTriggersParam, &trigger_list) && |
trigger_list->GetSize() > 0) { |
@@ -565,6 +593,7 @@ void TraceConfig::SetDefaultMemoryDumpConfig() { |
memory_dump_config_.Clear(); |
memory_dump_config_.triggers.push_back(kDefaultHeavyMemoryDumpTrigger); |
memory_dump_config_.triggers.push_back(kDefaultLightMemoryDumpTrigger); |
+ memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); |
} |
void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
@@ -611,6 +640,15 @@ void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { |
std::unique_ptr<base::DictionaryValue> memory_dump_config( |
new base::DictionaryValue()); |
+ std::unique_ptr<base::ListValue> allowed_modes_list(new base::ListValue()); |
+ for (MemoryDumpLevelOfDetail dump_mode : |
+ memory_dump_config_.allowed_dump_modes) { |
+ allowed_modes_list->AppendString( |
+ MemoryDumpLevelOfDetailToString(dump_mode)); |
+ } |
+ memory_dump_config->Set(kAllowedDumpModesParam, |
+ std::move(allowed_modes_list)); |
+ |
std::unique_ptr<base::ListValue> triggers_list(new base::ListValue()); |
for (const MemoryDumpConfig::Trigger& config |
: memory_dump_config_.triggers) { |