chrome_metrics_service_client.h revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2014 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_METRICS_CHROME_METRICS_SERVICE_CLIENT_H_ 6#define CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_CLIENT_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/callback.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/memory/weak_ptr.h" 14#include "base/threading/thread_checker.h" 15#include "chrome/browser/memory_details.h" 16#include "chrome/browser/metrics/network_stats_uploader.h" 17#include "chrome/browser/metrics/tracking_synchronizer_observer.h" 18#include "components/metrics/metrics_service_client.h" 19#include "content/public/browser/notification_observer.h" 20#include "content/public/browser/notification_registrar.h" 21 22class ChromeOSMetricsProvider; 23class GoogleUpdateMetricsProviderWin; 24class MetricsService; 25class PluginMetricsProvider; 26class PrefRegistrySimple; 27class ProfilerMetricsProvider; 28 29namespace base { 30class FilePath; 31} 32 33namespace metrics { 34class MetricsStateManager; 35} 36 37// ChromeMetricsServiceClient provides an implementation of MetricsServiceClient 38// that depends on chrome/. 39class ChromeMetricsServiceClient 40 : public metrics::MetricsServiceClient, 41 public chrome_browser_metrics::TrackingSynchronizerObserver, 42 public content::NotificationObserver { 43 public: 44 virtual ~ChromeMetricsServiceClient(); 45 46 // Factory function. 47 static scoped_ptr<ChromeMetricsServiceClient> Create( 48 metrics::MetricsStateManager* state_manager, 49 PrefService* local_state); 50 51 // Registers local state prefs used by this class. 52 static void RegisterPrefs(PrefRegistrySimple* registry); 53 54 // metrics::MetricsServiceClient: 55 virtual void SetMetricsClientId(const std::string& client_id) OVERRIDE; 56 virtual bool IsOffTheRecordSessionActive() OVERRIDE; 57 virtual std::string GetApplicationLocale() OVERRIDE; 58 virtual bool GetBrand(std::string* brand_code) OVERRIDE; 59 virtual metrics::SystemProfileProto::Channel GetChannel() OVERRIDE; 60 virtual std::string GetVersionString() OVERRIDE; 61 virtual void OnLogUploadComplete() OVERRIDE; 62 virtual void StartGatheringMetrics( 63 const base::Closure& done_callback) OVERRIDE; 64 virtual void CollectFinalMetrics(const base::Closure& done_callback) 65 OVERRIDE; 66 virtual scoped_ptr<metrics::MetricsLogUploader> CreateUploader( 67 const std::string& server_url, 68 const std::string& mime_type, 69 const base::Callback<void(int)>& on_upload_complete) OVERRIDE; 70 71 MetricsService* metrics_service() { return metrics_service_.get(); } 72 73 void LogPluginLoadingError(const base::FilePath& plugin_path); 74 75 private: 76 explicit ChromeMetricsServiceClient( 77 metrics::MetricsStateManager* state_manager); 78 79 // Completes the two-phase initialization of ChromeMetricsServiceClient. 80 void Initialize(); 81 82 // Callback that continues the init task by loading plugin information. 83 void OnInitTaskGotHardwareClass(); 84 85 // Called after the Plugin init task has been completed that continues the 86 // init task by launching a task to gather Google Update statistics. 87 void OnInitTaskGotPluginInfo(); 88 89 // Called after GoogleUpdate init task has been completed that continues the 90 // init task by loading profiler data. 91 void OnInitTaskGotGoogleUpdateData(); 92 93 // TrackingSynchronizerObserver: 94 virtual void ReceivedProfilerData( 95 const tracked_objects::ProcessDataSnapshot& process_data, 96 int process_type) OVERRIDE; 97 virtual void FinishedReceivingProfilerData() OVERRIDE; 98 99 // Callbacks for various stages of final log info collection. Do not call 100 // these directly. 101 void OnMemoryDetailCollectionDone(); 102 void OnHistogramSynchronizationDone(); 103 104 // Records metrics about the switches present on the command line. 105 void RecordCommandLineMetrics(); 106 107 // Registers |this| as an observer for notifications which indicate that a 108 // user is performing work. This is useful to allow some features to sleep, 109 // until the machine becomes active, such as precluding UMA uploads unless 110 // there was recent activity. 111 void RegisterForNotifications(); 112 113 // content::NotificationObserver: 114 virtual void Observe(int type, 115 const content::NotificationSource& source, 116 const content::NotificationDetails& details) OVERRIDE; 117 118#if defined(OS_WIN) 119 // Counts (and removes) the browser crash dump attempt signals left behind by 120 // any previous browser processes which generated a crash dump. 121 void CountBrowserCrashDumpAttempts(); 122#endif // OS_WIN 123 124 base::ThreadChecker thread_checker_; 125 126 // Weak pointer to the MetricsStateManager. 127 metrics::MetricsStateManager* metrics_state_manager_; 128 129 // The MetricsService that |this| is a client of. 130 scoped_ptr<MetricsService> metrics_service_; 131 132 content::NotificationRegistrar registrar_; 133 134 // On ChromeOS, holds a weak pointer to the ChromeOSMetricsProvider instance 135 // that has been registered with MetricsService. On other platforms, is NULL. 136 ChromeOSMetricsProvider* chromeos_metrics_provider_; 137 138 NetworkStatsUploader network_stats_uploader_; 139 140 // Saved callback received from CollectFinalMetrics(). 141 base::Closure collect_final_metrics_done_callback_; 142 143 // Indicates that collect final metrics step is running. 144 bool waiting_for_collect_final_metrics_step_; 145 146 // Number of async histogram fetch requests in progress. 147 int num_async_histogram_fetches_in_progress_; 148 149 // The ProfilerMetricsProvider instance that was registered with 150 // MetricsService. Has the same lifetime as |metrics_service_|. 151 ProfilerMetricsProvider* profiler_metrics_provider_; 152 153#if defined(ENABLE_PLUGINS) 154 // The PluginMetricsProvider instance that was registered with 155 // MetricsService. Has the same lifetime as |metrics_service_|. 156 PluginMetricsProvider* plugin_metrics_provider_; 157#endif 158 159#if defined(OS_WIN) 160 // The GoogleUpdateMetricsProviderWin instance that was registered with 161 // MetricsService. Has the same lifetime as |metrics_service_|. 162 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_; 163#endif 164 165 // Callback that is called when initial metrics gathering is complete. 166 base::Closure finished_gathering_initial_metrics_callback_; 167 168 // The MemoryGrowthTracker instance that tracks memory usage growth in 169 // MemoryDetails. 170 MemoryGrowthTracker memory_growth_tracker_; 171 172 base::WeakPtrFactory<ChromeMetricsServiceClient> weak_ptr_factory_; 173 174 DISALLOW_COPY_AND_ASSIGN(ChromeMetricsServiceClient); 175}; 176 177#endif // CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_CLIENT_H_ 178