| 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..ff14abbb908cc99fccfc9fa17c6869a74f176da9 100644
|
| --- a/chrome/browser/performance_monitor/performance_monitor.h
|
| +++ b/chrome/browser/performance_monitor/performance_monitor.h
|
| @@ -6,23 +6,23 @@
|
| #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/process/process_handle.h"
|
| +#include "base/time/time.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 "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 extensions {
|
| class Extension;
|
| }
|
| @@ -33,6 +33,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 +58,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 +67,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 +144,32 @@ 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();
|
| + // Mark the given process as alive in the current update iteration.
|
| + // This means adding an entry to the map of watched processes if it's not
|
| + // already present.
|
| + void MarkProcessAsAlive(const base::ProcessHandle& handle,
|
| + 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 +182,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 +193,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 +216,9 @@ class PerformanceMonitor : public content::NotificationObserver {
|
| // flag.
|
| static bool initialized_;
|
|
|
| + // Disable auto-starting the collection timer; used for tests.
|
| + bool disable_timer_autostart_for_testing_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(PerformanceMonitor);
|
| };
|
|
|
|
|