Chromium Code Reviews| 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) { |