| Index: chrome/browser/metrics/renderer_uptime_tracker.cc
|
| diff --git a/chrome/browser/metrics/renderer_uptime_tracker.cc b/chrome/browser/metrics/renderer_uptime_tracker.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f830de212b93440f1c26d5e5ffc73de94191d6d9
|
| --- /dev/null
|
| +++ b/chrome/browser/metrics/renderer_uptime_tracker.cc
|
| @@ -0,0 +1,57 @@
|
| +// 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/renderer_uptime_tracker.h"
|
| +
|
| +#include "base/metrics/histogram_macros.h"
|
| +
|
| +namespace {
|
| +
|
| +RendererUptimeTracker* g_instance = nullptr;
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +void RendererUptimeTracker::Initialize() {
|
| + g_instance = new RendererUptimeTracker;
|
| +}
|
| +
|
| +// static
|
| +bool RendererUptimeTracker::IsInitialized() {
|
| + return g_instance != nullptr;
|
| +}
|
| +
|
| +// static
|
| +RendererUptimeTracker* RendererUptimeTracker::Get() {
|
| + DCHECK(g_instance);
|
| + return g_instance;
|
| +}
|
| +
|
| +RendererUptimeTracker::RendererUptimeTracker() {}
|
| +
|
| +RendererUptimeTracker::~RendererUptimeTracker() {}
|
| +
|
| +void RendererUptimeTracker::OnRendererStarted(int pid) {
|
| + info_map_[pid] = RendererInfo{base::TimeTicks::Now(), 0, 0};
|
| +}
|
| +
|
| +void RendererUptimeTracker::OnRendererTerminated(int pid) {
|
| + auto it = info_map_.find(pid);
|
| + if (it != info_map_.end()) {
|
| + auto uptime = base::TimeTicks::Now() - it->second.launched_at_;
|
| + UMA_HISTOGRAM_CUSTOM_TIMES("Memory.Experimental.Renderer.Uptime", uptime,
|
| + base::TimeDelta::FromHours(1),
|
| + base::TimeDelta::FromDays(7), 100);
|
| + UMA_HISTOGRAM_COUNTS_10000(
|
| + "Memory.Experimental.Renderer.LoadsInMainFrameDuringUptime",
|
| + it->second.num_loads_in_main_frame_);
|
| + info_map_.erase(it);
|
| + }
|
| +}
|
| +
|
| +void RendererUptimeTracker::OnLoadInMainFrame(int pid) {
|
| + auto it = info_map_.find(pid);
|
| + if (it != info_map_.end())
|
| + it->second.num_loads_in_main_frame_++;
|
| +}
|
|
|