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

Unified Diff: base/trace_event/memory_dump_manager.cc

Issue 2041583003: [tracing] Introduce "allowed_dump_modes" for memory dump config (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@background_config
Patch Set: rebase on 2049143002 Created 4 years, 6 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
Index: base/trace_event/memory_dump_manager.cc
diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc
index 50171e5715f8399cb9b31b86230d39e8b273a345..6db676094fbfc1af5ae9830da8e852687d40fe58 100644
--- a/base/trace_event/memory_dump_manager.cc
+++ b/base/trace_event/memory_dump_manager.cc
@@ -131,6 +131,7 @@ MemoryDumpManager::MemoryDumpManager()
: delegate_(nullptr),
is_coordinator_(false),
memory_tracing_enabled_(0),
+ periodic_dump_timer_(this),
tracing_process_id_(kInvalidTracingProcessId),
dumper_registrations_ignored_for_testing_(false),
heap_profiling_enabled_(false) {
@@ -335,10 +336,13 @@ void MemoryDumpManager::RequestGlobalDump(
MemoryDumpType dump_type,
MemoryDumpLevelOfDetail level_of_detail,
const MemoryDumpCallback& callback) {
- // Bail out immediately if tracing is not enabled at all.
- if (!UNLIKELY(subtle::NoBarrier_Load(&memory_tracing_enabled_))) {
+ // Bail out immediately if tracing is not enabled at all or if the dump mode
+ // is not allowed.
+ if (!UNLIKELY(subtle::NoBarrier_Load(&memory_tracing_enabled_)) ||
+ !IsDumpModeAllowed(level_of_detail)) {
VLOG(1) << "Global memory dump failed because " << kTraceCategory
- << " tracing category is not enabled";
+ << " tracing category is not enabled or the requested dump mode is "
+ "not allowed by trace config.";
if (!callback.is_null())
callback.Run(0u /* guid */, false /* success */);
return;
@@ -707,6 +711,12 @@ void MemoryDumpManager::OnTraceLogDisabled() {
dump_thread->Stop();
}
+bool MemoryDumpManager::IsDumpModeAllowed(
+ MemoryDumpLevelOfDetail dump_mode) const {
+ return session_state_->memory_dump_config().allowed_dump_modes.count(
Primiano Tucci (use gerrit) 2016/06/09 18:46:39 - Take the AutoLock lock(lock_); session_state is
ssid 2016/06/09 21:34:15 Fixed the lock. Also renamed the session_state get
+ dump_mode) != 0;
+}
+
uint64_t MemoryDumpManager::GetTracingProcessId() const {
return delegate_->GetTracingProcessId();
}
@@ -770,7 +780,9 @@ ProcessMemoryDump* MemoryDumpManager::ProcessMemoryDumpAsyncState::
return iter->second.get();
}
-MemoryDumpManager::PeriodicGlobalDumpTimer::PeriodicGlobalDumpTimer() {}
+MemoryDumpManager::PeriodicGlobalDumpTimer::PeriodicGlobalDumpTimer(
+ MemoryDumpManager* mdm)
+ : mdm_(mdm) {}
MemoryDumpManager::PeriodicGlobalDumpTimer::~PeriodicGlobalDumpTimer() {
Stop();
@@ -791,12 +803,20 @@ void MemoryDumpManager::PeriodicGlobalDumpTimer::Start(
DCHECK_LE(triggers_list.size(), 3u);
for (const TraceConfig::MemoryDumpConfig::Trigger& config : triggers_list) {
DCHECK_NE(0u, config.periodic_interval_ms);
- if (config.level_of_detail == MemoryDumpLevelOfDetail::LIGHT) {
- DCHECK_EQ(0u, light_dump_period_ms);
- light_dump_period_ms = config.periodic_interval_ms;
- } else if (config.level_of_detail == MemoryDumpLevelOfDetail::DETAILED) {
- DCHECK_EQ(0u, heavy_dump_period_ms);
- heavy_dump_period_ms = config.periodic_interval_ms;
+ switch (config.level_of_detail) {
+ case MemoryDumpLevelOfDetail::BACKGROUND:
+ DCHECK(mdm_->IsDumpModeAllowed(MemoryDumpLevelOfDetail::BACKGROUND));
+ break;
+ case MemoryDumpLevelOfDetail::LIGHT:
+ DCHECK_EQ(0u, light_dump_period_ms);
+ DCHECK(mdm_->IsDumpModeAllowed(MemoryDumpLevelOfDetail::LIGHT));
+ light_dump_period_ms = config.periodic_interval_ms;
+ break;
+ case MemoryDumpLevelOfDetail::DETAILED:
+ DCHECK_EQ(0u, heavy_dump_period_ms);
+ DCHECK(mdm_->IsDumpModeAllowed(MemoryDumpLevelOfDetail::DETAILED));
+ heavy_dump_period_ms = config.periodic_interval_ms;
+ break;
}
min_timer_period_ms =
std::min(min_timer_period_ms, config.periodic_interval_ms);
@@ -830,8 +850,7 @@ void MemoryDumpManager::PeriodicGlobalDumpTimer::RequestPeriodicGlobalDump() {
level_of_detail = MemoryDumpLevelOfDetail::DETAILED;
++periodic_dumps_count_;
- MemoryDumpManager::GetInstance()->RequestGlobalDump(
- MemoryDumpType::PERIODIC_INTERVAL, level_of_detail);
+ mdm_->RequestGlobalDump(MemoryDumpType::PERIODIC_INTERVAL, level_of_detail);
}
} // namespace trace_event

Powered by Google App Engine
This is Rietveld 408576698