Index: base/trace_event/trace_config.cc |
diff --git a/base/trace_event/trace_config.cc b/base/trace_event/trace_config.cc |
index 045c58ff10273979fa015e2e5bc5a139905d6204..d4dc2cc2e4e3594abf9dacc02117c19a6de0fd40 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,15 @@ class ConvertableTraceConfigToTraceFormat |
const TraceConfig trace_config_; |
}; |
+std::set<MemoryDumpLevelOfDetail> GetDefaultAllowedMemoryDumpModes() { |
+ std::set<MemoryDumpLevelOfDetail> all_modes; |
+ for (uint32_t mode = static_cast<uint32_t>(MemoryDumpLevelOfDetail::FIRST); |
+ mode <= static_cast<uint32_t>(MemoryDumpLevelOfDetail::LAST); mode++) { |
+ all_modes.insert(static_cast<MemoryDumpLevelOfDetail>(mode)); |
+ } |
+ return all_modes; |
+} |
+ |
} // namespace |
@@ -99,6 +109,7 @@ TraceConfig::MemoryDumpConfig::MemoryDumpConfig( |
TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; |
void TraceConfig::MemoryDumpConfig::Clear() { |
+ allowed_dump_modes.clear(); |
triggers.clear(); |
heap_profiler_options.Clear(); |
} |
@@ -515,9 +526,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) { |
@@ -563,6 +588,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 { |
@@ -609,6 +635,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) { |