diff options
Diffstat (limited to 'chromium/base/trace_event/process_memory_totals_dump_provider.cc')
-rw-r--r-- | chromium/base/trace_event/process_memory_totals_dump_provider.cc | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/chromium/base/trace_event/process_memory_totals_dump_provider.cc b/chromium/base/trace_event/process_memory_totals_dump_provider.cc new file mode 100644 index 00000000000..06b537c4188 --- /dev/null +++ b/chromium/base/trace_event/process_memory_totals_dump_provider.cc @@ -0,0 +1,60 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/trace_event/process_memory_totals_dump_provider.h" + +#include "base/process/process_metrics.h" +#include "base/trace_event/process_memory_dump.h" +#include "base/trace_event/process_memory_totals.h" + +namespace base { +namespace trace_event { + +// static +uint64 ProcessMemoryTotalsDumpProvider::rss_bytes_for_testing = 0; + +namespace { + +ProcessMetrics* CreateProcessMetricsForCurrentProcess() { +#if !defined(OS_MACOSX) || defined(OS_IOS) + return ProcessMetrics::CreateProcessMetrics(GetCurrentProcessHandle()); +#else + return ProcessMetrics::CreateProcessMetrics(GetCurrentProcessHandle(), NULL); +#endif +} +} // namespace + +// static +ProcessMemoryTotalsDumpProvider* +ProcessMemoryTotalsDumpProvider::GetInstance() { + return Singleton< + ProcessMemoryTotalsDumpProvider, + LeakySingletonTraits<ProcessMemoryTotalsDumpProvider>>::get(); +} + +ProcessMemoryTotalsDumpProvider::ProcessMemoryTotalsDumpProvider() + : process_metrics_(CreateProcessMetricsForCurrentProcess()) { +} + +ProcessMemoryTotalsDumpProvider::~ProcessMemoryTotalsDumpProvider() { +} + +// Called at trace dump point time. Creates a snapshot the memory counters for +// the current process. +bool ProcessMemoryTotalsDumpProvider::OnMemoryDump(ProcessMemoryDump* pmd) { + const uint64 rss_bytes = rss_bytes_for_testing + ? rss_bytes_for_testing + : process_metrics_->GetWorkingSetSize(); + + if (rss_bytes > 0) { + pmd->process_totals()->set_resident_set_bytes(rss_bytes); + pmd->set_has_process_totals(); + return true; + } + + return false; +} + +} // namespace trace_event +} // namespace base |