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

Side by Side Diff: chrome/browser/performance_monitor/process_metrics_history.cc

Issue 23825004: PerformanceMonitor: UMA alert for high browser CPU usage. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed dependencies. Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
Devlin 2013/09/12 00:44:47 no (c)
oystein (OOO til 10th of July) 2013/09/12 15:02:31 Done.
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 <limits>
6
7 #include "base/logging.h"
8 #include "base/process/process_metrics.h"
9
10 #include "chrome/browser/performance_monitor/constants.h"
11 #include "chrome/browser/performance_monitor/process_metrics_history.h"
12 #if defined(OS_MACOSX)
13 #include "content/public/browser/browser_child_process_host.h"
14 #endif
15 #include "content/public/browser/user_metrics.h"
16 #include "content/public/common/process_type.h"
17
18 namespace performance_monitor {
19
20 ProcessMetricsHistory::ProcessMetricsHistory()
21 : process_handle_(0),
22 process_type_(content::PROCESS_TYPE_UNKNOWN),
23 last_update_sequence_(0) {
24 ResetCounters();
25 }
26
27 ProcessMetricsHistory::~ProcessMetricsHistory() {}
28
29 void ProcessMetricsHistory::ResetCounters() {
30 min_cpu_usage_ = std::numeric_limits<double>::max();
31 accumulated_cpu_usage_ = 0.0;
32 accumulated_private_bytes_ = 0;
33 accumulated_shared_bytes_ = 0;
34 sample_count_ = 0;
35 }
36
37 void ProcessMetricsHistory::Initialize(base::ProcessHandle process_handle,
38 int process_type,
39 int initial_update_sequence) {
40 DCHECK(process_handle_ == 0);
41 process_handle_ = process_handle;
42 process_type_ = process_type;
43 last_update_sequence_ = initial_update_sequence;
44
45 #if defined(OS_MACOSX)
46 process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(
47 process_handle_, content::BrowserChildProcessHost::GetPortProvider()));
48 #else
49 process_metrics_.reset(
50 base::ProcessMetrics::CreateProcessMetrics(process_handle_));
51 #endif
52 }
53
54 void ProcessMetricsHistory::SampleMetrics() {
55 double cpu_usage = process_metrics_->GetCPUUsage();
56 min_cpu_usage_ = std::min(min_cpu_usage_, cpu_usage);
57 accumulated_cpu_usage_ += cpu_usage;
58
59 size_t private_bytes = 0;
60 size_t shared_bytes = 0;
61 if (!process_metrics_->GetMemoryBytes(&private_bytes, &shared_bytes)) {
Devlin 2013/09/12 00:44:47 nit: no brackets
oystein (OOO til 10th of July) 2013/09/12 15:02:31 Done.
62 LOG(WARNING) << "GetMemoryBytes returned NULL (platform-specific error)";
63 }
64
65 accumulated_private_bytes_ += private_bytes;
66 accumulated_shared_bytes_ += shared_bytes;
67
68 sample_count_++;
69 }
70
71 void ProcessMetricsHistory::EndOfCycle() {
72 RunPerformanceTriggers();
73 ResetCounters();
74 }
75
76 void ProcessMetricsHistory::RunPerformanceTriggers() {
77 // As an initial step, we only care about browser processes.
78 if (process_type_ != content::PROCESS_TYPE_BROWSER) {
Devlin 2013/09/12 00:44:47 nit: no brackets
oystein (OOO til 10th of July) 2013/09/12 15:02:31 Done.
79 return;
80 }
81
82 // If CPU usage has consistently been above our threshold,
83 // we *may* have an issue.
84 if (min_cpu_usage_ > kHighCPUUtilizationThreshold) {
85 content::RecordAction(
86 content::UserMetricsAction("PerformanceMonitor.HighCPU.Browser"));
87 }
88 }
89
90 } // namespace performance_monitor
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698