| Index: chrome/browser/metrics/process_memory_metrics_emitter.cc
|
| diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.cc b/chrome/browser/metrics/process_memory_metrics_emitter.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2b53ff17370fc73ac7d37f4ca6b3fef97dd2e0a6
|
| --- /dev/null
|
| +++ b/chrome/browser/metrics/process_memory_metrics_emitter.cc
|
| @@ -0,0 +1,100 @@
|
| +// Copyright 2017 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 "chrome/browser/metrics/process_memory_metrics_emitter.h"
|
| +
|
| +#include "base/metrics/histogram_macros.h"
|
| +#include "base/trace_event/memory_dump_request_args.h"
|
| +#include "content/public/common/service_manager_connection.h"
|
| +#include "content/public/common/service_names.mojom.h"
|
| +#include "services/service_manager/public/cpp/connector.h"
|
| +
|
| +using ProcessMemoryDumpPtr =
|
| + memory_instrumentation::mojom::ProcessMemoryDumpPtr;
|
| +
|
| +namespace {
|
| +
|
| +void EmitBrowserMemoryMetrics(const ProcessMemoryDumpPtr& pmd) {
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Browser2.Resident",
|
| + pmd->os_dump.resident_set_kb * 1024);
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Browser2.Malloc",
|
| + pmd->chrome_dump.malloc_total_kb * 1024);
|
| +
|
| + // TODO(erikchen): Emit private memory footprint. https://crbug.com/721434.
|
| +}
|
| +
|
| +void EmitRendererMemoryMetrics(const ProcessMemoryDumpPtr& pmd) {
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Renderer2.Resident",
|
| + pmd->os_dump.resident_set_kb * 1024);
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Renderer2.Malloc",
|
| + pmd->chrome_dump.malloc_total_kb * 1024);
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB(
|
| + "Memory.Experimental.Renderer2.PartitionAlloc",
|
| + pmd->chrome_dump.partition_alloc_total_kb * 1024);
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Renderer2.BlinkGC",
|
| + pmd->chrome_dump.blink_gc_total_kb * 1024);
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Renderer2.V8",
|
| + pmd->chrome_dump.v8_total_kb * 1024);
|
| +
|
| + // TODO(erikchen): Emit private memory footprint. https://crbug.com/721434.
|
| +}
|
| +
|
| +void EmitGpuMemoryMetrics(const ProcessMemoryDumpPtr& pmd) {
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Gpu2.Resident",
|
| + pmd->os_dump.resident_set_kb * 1024);
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Gpu2.Malloc",
|
| + pmd->chrome_dump.malloc_total_kb * 1024);
|
| +
|
| + // TODO(erikchen): Emit private memory footprint. https://crbug.com/721434.
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +ProcessMemoryMetricsEmitter::ProcessMemoryMetricsEmitter() {}
|
| +
|
| +void ProcessMemoryMetricsEmitter::FetchAndEmitProcessMemoryMetrics() {
|
| + service_manager::Connector* connector =
|
| + content::ServiceManagerConnection::GetForProcess()->GetConnector();
|
| + connector->BindInterface(content::mojom::kBrowserServiceName,
|
| + mojo::MakeRequest(&coordinator_));
|
| +
|
| + // The callback keeps this object alive until the callback is invoked..
|
| + auto callback =
|
| + base::Bind(&ProcessMemoryMetricsEmitter::ReceivedMemoryDump, this);
|
| +
|
| + base::trace_event::MemoryDumpRequestArgs args = {
|
| + 0, base::trace_event::MemoryDumpType::SUMMARY_ONLY,
|
| + base::trace_event::MemoryDumpLevelOfDetail::BACKGROUND};
|
| + coordinator_->RequestGlobalMemoryDump(args, callback);
|
| +}
|
| +
|
| +ProcessMemoryMetricsEmitter::~ProcessMemoryMetricsEmitter() {}
|
| +
|
| +void ProcessMemoryMetricsEmitter::ReceivedMemoryDump(
|
| + uint64_t dump_guid,
|
| + bool success,
|
| + memory_instrumentation::mojom::GlobalMemoryDumpPtr ptr) {
|
| + if (!success)
|
| + return;
|
| + if (!ptr)
|
| + return;
|
| +
|
| + for (const ProcessMemoryDumpPtr& pmd : ptr->process_dumps) {
|
| + switch (pmd->process_type) {
|
| + case memory_instrumentation::mojom::ProcessType::BROWSER:
|
| + EmitBrowserMemoryMetrics(pmd);
|
| + break;
|
| + case memory_instrumentation::mojom::ProcessType::RENDERER:
|
| + EmitRendererMemoryMetrics(pmd);
|
| + break;
|
| + case memory_instrumentation::mojom::ProcessType::GPU:
|
| + EmitGpuMemoryMetrics(pmd);
|
| + break;
|
| + case memory_instrumentation::mojom::ProcessType::UTILITY:
|
| + case memory_instrumentation::mojom::ProcessType::PLUGIN:
|
| + case memory_instrumentation::mojom::ProcessType::OTHER:
|
| + break;
|
| + }
|
| + }
|
| +}
|
|
|