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

Side by Side Diff: chrome/browser/metrics/renderer_uptime_tracker.cc

Issue 2697323004: Adds UMA metrics for renderer uptime (Closed)
Patch Set: fix Created 3 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/metrics/renderer_uptime_tracker.h"
6
7 #include "base/metrics/histogram_macros.h"
8 #include "content/public/browser/notification_service.h"
9 #include "content/public/browser/notification_types.h"
10 #include "content/public/browser/render_process_host.h"
11 #include "extensions/features/features.h"
12
13 #if BUILDFLAG(ENABLE_EXTENSIONS)
14 #include "extensions/browser/process_map.h"
15 #endif
16
17 namespace metrics {
18
19 namespace {
20
21 RendererUptimeTracker* g_instance = nullptr;
22
23 } // namespace
24
25 // static
26 void RendererUptimeTracker::Initialize() {
27 DCHECK(!g_instance);
28 g_instance = new RendererUptimeTracker;
29 }
30
31 // static
32 RendererUptimeTracker* RendererUptimeTracker::Get() {
33 DCHECK(g_instance);
34 return g_instance;
35 }
36
37 RendererUptimeTracker::RendererUptimeTracker() {
38 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CREATED,
39 content::NotificationService::AllBrowserContextsAndSources());
40 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
41 content::NotificationService::AllBrowserContextsAndSources());
42 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
43 content::NotificationService::AllBrowserContextsAndSources());
44 }
45
46 RendererUptimeTracker::~RendererUptimeTracker() {}
47
48 void RendererUptimeTracker::OnRendererStarted(int pid) {
49 info_map_[pid] = RendererInfo{base::TimeTicks::Now(), 0};
50 }
51
52 void RendererUptimeTracker::OnRendererTerminated(int pid) {
53 auto it = info_map_.find(pid);
54 // The pid may not exist when process fails to start up or when process is
55 // terminated without reuse.
56 if (it != info_map_.end()) {
57 auto uptime = base::TimeTicks::Now() - it->second.launched_at_;
58 UMA_HISTOGRAM_CUSTOM_TIMES("Memory.Experimental.Renderer.Uptime", uptime,
59 base::TimeDelta::FromHours(1),
60 base::TimeDelta::FromDays(7), 50);
61 UMA_HISTOGRAM_COUNTS_10000(
62 "Memory.Experimental.Renderer.LoadsInMainFrameDuringUptime",
63 it->second.num_loads_in_main_frame_);
64 info_map_.erase(it);
65 }
66 }
67
68 void RendererUptimeTracker::OnLoadInMainFrame(int pid) {
69 auto it = info_map_.find(pid);
70 DCHECK(it != info_map_.end());
71 it->second.num_loads_in_main_frame_++;
72 }
73
74 void RendererUptimeTracker::Observe(
75 int type,
76 const content::NotificationSource& source,
77 const content::NotificationDetails& details) {
78 switch (type) {
79 case content::NOTIFICATION_RENDERER_PROCESS_CREATED: {
80 content::RenderProcessHost* host =
81 content::Source<content::RenderProcessHost>(source).ptr();
82 #if BUILDFLAG(ENABLE_EXTENSIONS)
83 if (extensions::ProcessMap::Get(host->GetBrowserContext())
84 ->Contains(host->GetID())) {
85 break;
86 }
87 #endif
88 OnRendererStarted(host->GetID());
89 break;
90 }
91
92 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
keishi 2017/03/02 09:37:14 Added. This seems to be called in case of a crash.
93 content::RenderProcessHost* host =
94 content::Source<content::RenderProcessHost>(source).ptr();
95 #if BUILDFLAG(ENABLE_EXTENSIONS)
96 if (extensions::ProcessMap::Get(host->GetBrowserContext())
97 ->Contains(host->GetID())) {
98 break;
99 }
100 #endif
101 OnRendererTerminated(host->GetID());
102 break;
103 }
104
105 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: {
106 content::RenderProcessHost* host =
107 content::Source<content::RenderProcessHost>(source).ptr();
108 #if BUILDFLAG(ENABLE_EXTENSIONS)
109 if (extensions::ProcessMap::Get(host->GetBrowserContext())
110 ->Contains(host->GetID())) {
111 break;
112 }
113 #endif
114 OnRendererTerminated(host->GetID());
115 break;
116 }
117
118 default:
119 NOTREACHED();
120 break;
121 }
122 }
123
124 } // namespace metrics
OLDNEW
« no previous file with comments | « chrome/browser/metrics/renderer_uptime_tracker.h ('k') | chrome/browser/metrics/renderer_uptime_web_contents_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698