Chromium Code Reviews| Index: chrome/browser/performance_monitor/performance_monitor.h |
| diff --git a/chrome/browser/performance_monitor/performance_monitor.h b/chrome/browser/performance_monitor/performance_monitor.h |
| index a054f5832914769e2ba4ca671567e9f21e1d7e9a..c5f49d94c9c6dc17a71d1d5142feccc9ba9e9e21 100644 |
| --- a/chrome/browser/performance_monitor/performance_monitor.h |
| +++ b/chrome/browser/performance_monitor/performance_monitor.h |
| @@ -6,23 +6,24 @@ |
| #define CHROME_BROWSER_PERFORMANCE_MONITOR_PERFORMANCE_MONITOR_H_ |
| #include <map> |
| +#include <set> |
| #include <string> |
| -#include "base/callback.h" |
| -#include "base/files/file_path.h" |
| -#include "base/memory/linked_ptr.h" |
| #include "base/memory/scoped_ptr.h" |
| -#include "base/memory/singleton.h" |
| -#include "base/process/process_metrics.h" |
| -#include "base/timer/timer.h" |
| -#include "chrome/browser/performance_monitor/database.h" |
| -#include "chrome/browser/performance_monitor/event.h" |
| -#include "content/public/browser/notification_details.h" |
| +#include "base/process/process_handle.h" |
| +#include "chrome/browser/performance_monitor/event_type.h" |
| +#include "chrome/browser/performance_monitor/process_metrics_history.h" |
| #include "content/public/browser/notification_observer.h" |
| #include "content/public/browser/notification_registrar.h" |
| -#include "content/public/browser/notification_source.h" |
| #include "content/public/browser/render_process_host.h" |
| +template <typename Type> |
| +struct DefaultSingletonTraits; |
| + |
| +namespace content { |
| +class NotificationRegistrar; |
| +} |
| + |
| namespace extensions { |
| class Extension; |
| } |
| @@ -33,6 +34,8 @@ class URLRequest; |
| namespace performance_monitor { |
| class Database; |
| +class Event; |
| +struct Metric; |
| // PerformanceMonitor is a tool which will allow the user to view information |
| // about Chrome's performance over a period of time. It will gather statistics |
| @@ -56,8 +59,7 @@ class PerformanceMonitor : public content::NotificationObserver { |
| uint64 network_bytes_read; |
| }; |
| - typedef std::map<base::ProcessHandle, |
| - linked_ptr<base::ProcessMetrics> > MetricsMap; |
| + typedef std::map<base::ProcessHandle, ProcessMetricsHistory> MetricsMap; |
| // Set the path which the PerformanceMonitor should use for the database files |
| // constructed. This must be done prior to the initialization of the |
| @@ -66,6 +68,8 @@ class PerformanceMonitor : public content::NotificationObserver { |
| // time of the call). |
| bool SetDatabasePath(const base::FilePath& path); |
| + bool database_logging_enabled() const { return database_logging_enabled_; } |
| + |
| // Returns the current PerformanceMonitor instance if one exists; otherwise |
| // constructs a new PerformanceMonitor. |
| static PerformanceMonitor* GetInstance(); |
| @@ -141,22 +145,29 @@ class PerformanceMonitor : public content::NotificationObserver { |
| // Update the database record of the last time the active profiles were |
| // running; this is used in determining when an unclean exit occurred. |
| +#if !defined(OS_ANDROID) |
| void UpdateLiveProfiles(); |
| void UpdateLiveProfilesHelper( |
| scoped_ptr<std::set<std::string> > active_profiles, std::string time); |
| +#endif |
| - // Gathers CPU usage and memory usage of all Chrome processes in order to. |
| - void GatherStatisticsOnBackgroundThread(); |
| + // Stores CPU/memory usage metrics to the database. |
| + void StoreMetricsOnBackgroundThread( |
| + int current_update_sequence, |
| + const PerformanceDataForIOThread& performance_data_for_io_thread); |
| - // Gathers the CPU usage of every Chrome process that has been running since |
| - // the last call to GatherStatistics(). |
| - void GatherCPUUsageOnBackgroundThread(); |
| + void ProcessIsAlive(const base::ProcessHandle& handle, |
|
Devlin
2013/09/12 18:20:42
function comment needed
oystein (OOO til 10th of July)
2013/09/12 19:03:24
Done.
|
| + int process_type, |
| + int current_update_sequence); |
| - // Gathers the memory usage of every process in the current list of processes. |
| - void GatherMemoryUsageOnBackgroundThread(); |
| + // Updates the ProcessMetrics map with the current list of processes and |
| + // gathers metrics from each entry. |
| + void GatherMetricsMapOnUIThread(); |
| + void GatherMetricsMapOnIOThread(int current_update_sequence); |
| - // Updates the ProcessMetrics map with the current list of processes. |
| - void UpdateMetricsMapOnBackgroundThread(); |
| + // Called at the end of the metrics gathering process, to start |
| + // our timer for the next run. |
| + void ResetMetricsTimerOnUIThread(); |
| // Generate an appropriate ExtensionEvent for an extension-related occurrance |
| // and insert it in the database. |
| @@ -169,15 +180,6 @@ class PerformanceMonitor : public content::NotificationObserver { |
| content::RenderProcessHost* host, |
| const content::RenderProcessHost::RendererClosedDetails& details); |
| - // Called on the IO thread, this will call InsertIOData on the background |
| - // thread with a copy of the PerformanceDataForIOThread object to prevent |
| - // any possible race conditions. |
| - void CallInsertIOData(); |
| - |
| - // Insert the collected IO data into the database. |
| - void InsertIOData( |
| - const PerformanceDataForIOThread& performance_data_for_io_thread); |
| - |
| // The store for all performance data that must be gathered from the IO |
| // thread. |
| PerformanceDataForIOThread performance_data_for_io_thread_; |
| @@ -189,10 +191,20 @@ class PerformanceMonitor : public content::NotificationObserver { |
| scoped_ptr<Database> database_; |
| // A map of currently running ProcessHandles to ProcessMetrics. |
| - scoped_ptr<MetricsMap> metrics_map_; |
| + MetricsMap metrics_map_; |
| + |
| + // The next time we should collect averages from the performance metrics |
| + // and act on them. |
| + base::Time next_collection_time_; |
| + |
| + // How long to wait between collections. |
| + int gather_interval_in_seconds_; |
| + |
| + // Enable persistent logging of performance metrics to a database. |
| + bool database_logging_enabled_; |
| // The timer to signal PerformanceMonitor to perform its timed collections. |
| - base::RepeatingTimer<PerformanceMonitor> timer_; |
| + base::DelayTimer<PerformanceMonitor> timer_; |
| content::NotificationRegistrar registrar_; |
| @@ -202,6 +214,9 @@ class PerformanceMonitor : public content::NotificationObserver { |
| // flag. |
| static bool initialized_; |
| + // Disable auto-starting the collection timer; used for tests. |
| + bool disable_timer_autostart_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(PerformanceMonitor); |
| }; |