1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_PERFORMANCE_MONITOR_PERFORMANCE_MONITOR_H_
6 #define CHROME_BROWSER_PERFORMANCE_MONITOR_PERFORMANCE_MONITOR_H_
11 #include "base/process/process_handle.h"
12 #include "base/timer/timer.h"
13 #include "chrome/browser/performance_monitor/process_metrics_history.h"
16 template <typename Type
>
17 struct DefaultSingletonTraits
;
21 struct ChildProcessData
;
24 namespace performance_monitor
{
26 // PerformanceMonitor is a tool which periodically monitors performance metrics
27 // for histogram logging and possibly taking action upon noticing serious
28 // performance degradation.
29 class PerformanceMonitor
{
31 // Returns the current PerformanceMonitor instance if one exists; otherwise
32 // constructs a new PerformanceMonitor.
33 static PerformanceMonitor
* GetInstance();
35 // Start the cycle of metrics gathering.
36 void StartGatherCycle();
39 typedef std::map
<base::ProcessHandle
, ProcessMetricsHistory
> MetricsMap
;
41 friend struct base::DefaultSingletonTraits
<PerformanceMonitor
>;
44 virtual ~PerformanceMonitor();
46 // Perform any collections that are done on a timed basis.
47 void DoTimedCollections();
49 // Mark the given process as alive in the current update iteration.
50 // This means adding an entry to the map of watched processes if it's not
52 void MarkProcessAsAlive(const ProcessMetricsMetadata
& process_data
,
53 int current_update_sequence
);
54 void MarkProcessesAsAliveOnUIThread(
55 scoped_ptr
<std::vector
<ProcessMetricsMetadata
>> process_data_list
,
56 int current_update_sequence
);
58 // Updates the ProcessMetrics map with the current list of processes and
59 // gathers metrics from each entry.
60 void GatherMetricsMapOnUIThread();
61 void GatherMetricsMapOnIOThread(int current_update_sequence
);
63 void UpdateMetricsOnIOThread(int current_update_sequence
);
64 void RunTriggersUIThread();
66 // A map of currently running ProcessHandles to ProcessMetrics.
67 MetricsMap metrics_map_
;
69 // The timer to signal PerformanceMonitor to perform its timed collections.
70 base::OneShotTimer
<PerformanceMonitor
> repeating_timer_
;
72 DISALLOW_COPY_AND_ASSIGN(PerformanceMonitor
);
75 } // namespace performance_monitor
77 #endif // CHROME_BROWSER_PERFORMANCE_MONITOR_PERFORMANCE_MONITOR_H_