1 // Copyright 2013 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 #ifndef CHROME_BROWSER_PERFORMANCE_MONITOR_PROCESS_METRICS_HISTORY_H_ 6 #define CHROME_BROWSER_PERFORMANCE_MONITOR_PROCESS_METRICS_HISTORY_H_ 7 8 #include "base/memory/linked_ptr.h" 9 #include "base/process/process_handle.h" 10 11 namespace base { 12 class ProcessMetrics; 13 } 14 15 namespace performance_monitor { 16 17 class ProcessMetricsHistory { 18 public: 19 ProcessMetricsHistory(); 20 ~ProcessMetricsHistory(); 21 22 // Configure this to monitor a specific process. 23 void Initialize(base::ProcessHandle process_handle, 24 int process_type, 25 int initial_update_sequence); 26 27 // End of a measurement cycle; check for performance issues and reset 28 // accumulated statistics. 29 void EndOfCycle(); 30 31 // Gather metrics for the process and accumulate with past data. 32 void SampleMetrics(); 33 34 // Used to mark when this object was last updated, so we can cull 35 // dead ones. 36 void set_last_update_sequence(int new_update_sequence) { 37 last_update_sequence_ = new_update_sequence; 38 } 39 40 int last_update_sequence() const { return last_update_sequence_; } 41 42 // Average CPU over all the past sampling points since last reset. 43 double GetAverageCPUUsage() const { 44 return accumulated_cpu_usage_ / sample_count_; 45 } 46 47 // Average mem usage over all the past sampling points since last reset. 48 void GetAverageMemoryBytes(size_t* private_bytes, 49 size_t* shared_bytes) const { 50 *private_bytes = accumulated_private_bytes_ / sample_count_; 51 *shared_bytes = accumulated_shared_bytes_ / sample_count_; 52 } 53 54 private: 55 void ResetCounters(); 56 void RunPerformanceTriggers(); 57 58 base::ProcessHandle process_handle_; 59 int process_type_; 60 linked_ptr<base::ProcessMetrics> process_metrics_; 61 int last_update_sequence_; 62 63 double accumulated_cpu_usage_; 64 double min_cpu_usage_; 65 size_t accumulated_private_bytes_; 66 size_t accumulated_shared_bytes_; 67 int sample_count_; 68 }; 69 70 } // namespace performance_monitor 71 72 #endif // CHROME_BROWSER_PERFORMANCE_MONITOR_PROCESS_METRICS_HISTORY_H_ 73