| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file defines a service that collects information about the user | 5 // This file defines a service that collects information about the user |
| 6 // experience in order to help improve future versions of the app. | 6 // experience in order to help improve future versions of the app. |
| 7 | 7 |
| 8 #ifndef CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 8 #ifndef CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
| 9 #define CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 9 #define CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "content/public/browser/notification_registrar.h" | 34 #include "content/public/browser/notification_registrar.h" |
| 35 #include "content/public/browser/user_metrics.h" | 35 #include "content/public/browser/user_metrics.h" |
| 36 #include "net/url_request/url_fetcher_delegate.h" | 36 #include "net/url_request/url_fetcher_delegate.h" |
| 37 | 37 |
| 38 class ChromeBrowserMetricsServiceObserver; | 38 class ChromeBrowserMetricsServiceObserver; |
| 39 class GoogleUpdateMetricsProviderWin; | 39 class GoogleUpdateMetricsProviderWin; |
| 40 class MetricsReportingScheduler; | 40 class MetricsReportingScheduler; |
| 41 class PrefService; | 41 class PrefService; |
| 42 class PrefRegistrySimple; | 42 class PrefRegistrySimple; |
| 43 class Profile; | 43 class Profile; |
| 44 class PluginMetricsProvider; |
| 44 class TemplateURLService; | 45 class TemplateURLService; |
| 45 | 46 |
| 46 namespace { | 47 namespace { |
| 47 class CrashesDOMHandler; | 48 class CrashesDOMHandler; |
| 48 class FlashDOMHandler; | 49 class FlashDOMHandler; |
| 49 } | 50 } |
| 50 | 51 |
| 51 namespace base { | 52 namespace base { |
| 52 class DictionaryValue; | 53 class DictionaryValue; |
| 53 class MessageLoopProxy; | 54 class MessageLoopProxy; |
| 54 } | 55 } |
| 55 | 56 |
| 56 namespace variations { | 57 namespace variations { |
| 57 struct ActiveGroupId; | 58 struct ActiveGroupId; |
| 58 } | 59 } |
| 59 | 60 |
| 60 namespace content { | 61 namespace content { |
| 61 class RenderProcessHost; | 62 class RenderProcessHost; |
| 62 class WebContents; | 63 class WebContents; |
| 63 struct WebPluginInfo; | |
| 64 } | 64 } |
| 65 | 65 |
| 66 namespace extensions { | 66 namespace extensions { |
| 67 class ExtensionDownloader; | 67 class ExtensionDownloader; |
| 68 class ManifestFetchData; | 68 class ManifestFetchData; |
| 69 class MetricsPrivateGetIsCrashReportingEnabledFunction; | 69 class MetricsPrivateGetIsCrashReportingEnabledFunction; |
| 70 } | 70 } |
| 71 | 71 |
| 72 namespace metrics { | 72 namespace metrics { |
| 73 class MetricsServiceClient; | 73 class MetricsServiceClient; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 // types we'll be using. | 185 // types we'll be using. |
| 186 static void RegisterPrefs(PrefRegistrySimple* registry); | 186 static void RegisterPrefs(PrefRegistrySimple* registry); |
| 187 | 187 |
| 188 // Set up notifications which indicate that a user is performing work. This is | 188 // Set up notifications which indicate that a user is performing work. This is |
| 189 // useful to allow some features to sleep, until the machine becomes active, | 189 // useful to allow some features to sleep, until the machine becomes active, |
| 190 // such as precluding UMA uploads unless there was recent activity. | 190 // such as precluding UMA uploads unless there was recent activity. |
| 191 static void SetUpNotifications(content::NotificationRegistrar* registrar, | 191 static void SetUpNotifications(content::NotificationRegistrar* registrar, |
| 192 content::NotificationObserver* observer); | 192 content::NotificationObserver* observer); |
| 193 | 193 |
| 194 // Implementation of content::BrowserChildProcessObserver | 194 // Implementation of content::BrowserChildProcessObserver |
| 195 virtual void BrowserChildProcessHostConnected( | |
| 196 const content::ChildProcessData& data) OVERRIDE; | |
| 197 virtual void BrowserChildProcessCrashed( | 195 virtual void BrowserChildProcessCrashed( |
| 198 const content::ChildProcessData& data) OVERRIDE; | 196 const content::ChildProcessData& data) OVERRIDE; |
| 199 virtual void BrowserChildProcessInstanceCreated( | |
| 200 const content::ChildProcessData& data) OVERRIDE; | |
| 201 | 197 |
| 202 // Implementation of content::NotificationObserver | 198 // Implementation of content::NotificationObserver |
| 203 virtual void Observe(int type, | 199 virtual void Observe(int type, |
| 204 const content::NotificationSource& source, | 200 const content::NotificationSource& source, |
| 205 const content::NotificationDetails& details) OVERRIDE; | 201 const content::NotificationDetails& details) OVERRIDE; |
| 206 | 202 |
| 207 // This should be called when the application is not idle, i.e. the user seems | 203 // This should be called when the application is not idle, i.e. the user seems |
| 208 // to be interacting with the application. | 204 // to be interacting with the application. |
| 209 void OnApplicationNotIdle(); | 205 void OnApplicationNotIdle(); |
| 210 | 206 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 SENDING_INITIAL_METRICS_LOG, // Initial metrics log being sent. | 285 SENDING_INITIAL_METRICS_LOG, // Initial metrics log being sent. |
| 290 SENDING_OLD_LOGS, // Sending unsent logs from last session. | 286 SENDING_OLD_LOGS, // Sending unsent logs from last session. |
| 291 SENDING_CURRENT_LOGS, // Sending ongoing logs as they accrue. | 287 SENDING_CURRENT_LOGS, // Sending ongoing logs as they accrue. |
| 292 }; | 288 }; |
| 293 | 289 |
| 294 enum ShutdownCleanliness { | 290 enum ShutdownCleanliness { |
| 295 CLEANLY_SHUTDOWN = 0xdeadbeef, | 291 CLEANLY_SHUTDOWN = 0xdeadbeef, |
| 296 NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN | 292 NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN |
| 297 }; | 293 }; |
| 298 | 294 |
| 299 struct ChildProcessStats; | |
| 300 | |
| 301 typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups; | 295 typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups; |
| 302 | 296 |
| 303 // First part of the init task. Called on the FILE thread to load hardware | 297 // First part of the init task. Called on the FILE thread to load hardware |
| 304 // class information. | 298 // class information. |
| 305 static void InitTaskGetHardwareClass(base::WeakPtr<MetricsService> self, | 299 static void InitTaskGetHardwareClass(base::WeakPtr<MetricsService> self, |
| 306 base::MessageLoopProxy* target_loop); | 300 base::MessageLoopProxy* target_loop); |
| 307 | 301 |
| 308 // Callback from InitTaskGetHardwareClass() that continues the init task by | 302 // Callback from InitTaskGetHardwareClass() that continues the init task by |
| 309 // loading plugin information. | 303 // loading plugin information. |
| 310 void OnInitTaskGotHardwareClass(const std::string& hardware_class); | 304 void OnInitTaskGotHardwareClass(const std::string& hardware_class); |
| 311 | 305 |
| 312 // Callback from PluginService::GetPlugins() that continues the init task by | 306 // Called after the Plugin init task has been completed that continues the |
| 313 // launching a task to gather Google Update statistics. | 307 // init task by launching a task to gather Google Update statistics. |
| 314 void OnInitTaskGotPluginInfo( | 308 void OnInitTaskGotPluginInfo(); |
| 315 const std::vector<content::WebPluginInfo>& plugins); | |
| 316 | 309 |
| 317 // Called after GoogleUpdate init task has been completed that continues the | 310 // Called after GoogleUpdate init task has been completed that continues the |
| 318 // init task by loading profiler data. | 311 // init task by loading profiler data. |
| 319 void OnInitTaskGotGoogleUpdateData(); | 312 void OnInitTaskGotGoogleUpdateData(); |
| 320 | 313 |
| 321 void OnUserAction(const std::string& action); | 314 void OnUserAction(const std::string& action); |
| 322 | 315 |
| 323 // TrackingSynchronizerObserver: | 316 // TrackingSynchronizerObserver: |
| 324 virtual void ReceivedProfilerData( | 317 virtual void ReceivedProfilerData( |
| 325 const tracked_objects::ProcessDataSnapshot& process_data, | 318 const tracked_objects::ProcessDataSnapshot& process_data, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 void LogRendererCrash(content::RenderProcessHost* host, | 422 void LogRendererCrash(content::RenderProcessHost* host, |
| 430 base::TerminationStatus status, | 423 base::TerminationStatus status, |
| 431 int exit_code); | 424 int exit_code); |
| 432 | 425 |
| 433 // Records a renderer process hang. | 426 // Records a renderer process hang. |
| 434 void LogRendererHang(); | 427 void LogRendererHang(); |
| 435 | 428 |
| 436 // Records that the browser was shut down cleanly. | 429 // Records that the browser was shut down cleanly. |
| 437 void LogCleanShutdown(); | 430 void LogCleanShutdown(); |
| 438 | 431 |
| 439 // Returns reference to ChildProcessStats corresponding to |data|. | |
| 440 ChildProcessStats& GetChildProcessStats( | |
| 441 const content::ChildProcessData& data); | |
| 442 | |
| 443 // Saves plugin-related updates from the in-object buffer to Local State | |
| 444 // for retrieval next time we send a Profile log (generally next launch). | |
| 445 void RecordPluginChanges(PrefService* pref); | |
| 446 | |
| 447 // Records state that should be periodically saved, like uptime and | 432 // Records state that should be periodically saved, like uptime and |
| 448 // buffered plugin stability statistics. | 433 // buffered plugin stability statistics. |
| 449 void RecordCurrentState(PrefService* pref); | 434 void RecordCurrentState(PrefService* pref); |
| 450 | 435 |
| 451 // Logs the initiation of a page load and uses |web_contents| to do | 436 // Logs the initiation of a page load and uses |web_contents| to do |
| 452 // additional logging of the type of page loaded. | 437 // additional logging of the type of page loaded. |
| 453 void LogLoadStarted(content::WebContents* web_contents); | 438 void LogLoadStarted(content::WebContents* web_contents); |
| 454 | 439 |
| 455 // Checks whether events should currently be logged. | 440 // Checks whether events should currently be logged. |
| 456 bool ShouldLogEvents(); | 441 bool ShouldLogEvents(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 | 483 |
| 499 // Whether the initial stability log has been recorded during startup. | 484 // Whether the initial stability log has been recorded during startup. |
| 500 bool has_initial_stability_log_; | 485 bool has_initial_stability_log_; |
| 501 | 486 |
| 502 // Chrome OS hardware class (e.g., hardware qualification ID). This | 487 // Chrome OS hardware class (e.g., hardware qualification ID). This |
| 503 // class identifies the configured system components such as CPU, | 488 // class identifies the configured system components such as CPU, |
| 504 // WiFi adapter, etc. For non Chrome OS hosts, this will be an | 489 // WiFi adapter, etc. For non Chrome OS hosts, this will be an |
| 505 // empty string. | 490 // empty string. |
| 506 std::string hardware_class_; | 491 std::string hardware_class_; |
| 507 | 492 |
| 508 // The list of plugins which was retrieved on the file thread. | 493 #if defined(ENABLE_PLUGINS) |
| 509 std::vector<content::WebPluginInfo> plugins_; | 494 PluginMetricsProvider* plugin_metrics_provider_; |
| 495 #endif |
| 510 | 496 |
| 511 #if defined(OS_WIN) | 497 #if defined(OS_WIN) |
| 512 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_; | 498 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_; |
| 513 #endif | 499 #endif |
| 514 | 500 |
| 515 // The initial metrics log, used to record startup metrics (histograms and | 501 // The initial metrics log, used to record startup metrics (histograms and |
| 516 // profiler data). Note that if a crash occurred in the previous session, an | 502 // profiler data). Note that if a crash occurred in the previous session, an |
| 517 // initial stability log may be sent before this. | 503 // initial stability log may be sent before this. |
| 518 scoped_ptr<MetricsLog> initial_metrics_log_; | 504 scoped_ptr<MetricsLog> initial_metrics_log_; |
| 519 | 505 |
| 520 // The outstanding transmission appears as a URL Fetch operation. | 506 // The outstanding transmission appears as a URL Fetch operation. |
| 521 scoped_ptr<net::URLFetcher> current_fetch_; | 507 scoped_ptr<net::URLFetcher> current_fetch_; |
| 522 | 508 |
| 523 // Whether the MetricsService object has received any notifications since | 509 // Whether the MetricsService object has received any notifications since |
| 524 // the last time a transmission was sent. | 510 // the last time a transmission was sent. |
| 525 bool idle_since_last_transmission_; | 511 bool idle_since_last_transmission_; |
| 526 | 512 |
| 527 // A number that identifies the how many times the app has been launched. | 513 // A number that identifies the how many times the app has been launched. |
| 528 int session_id_; | 514 int session_id_; |
| 529 | 515 |
| 530 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to | 516 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to |
| 531 // Windows) to a unique integer that we will use to identify them. | 517 // Windows) to a unique integer that we will use to identify them. |
| 532 // |next_window_id_| is used to track which IDs we have used so far. | 518 // |next_window_id_| is used to track which IDs we have used so far. |
| 533 typedef std::map<uintptr_t, int> WindowMap; | 519 typedef std::map<uintptr_t, int> WindowMap; |
| 534 WindowMap window_map_; | 520 WindowMap window_map_; |
| 535 int next_window_id_; | 521 int next_window_id_; |
| 536 | 522 |
| 537 // Buffer of child process notifications for quick access. | |
| 538 std::map<base::string16, ChildProcessStats> child_process_stats_buffer_; | |
| 539 | |
| 540 // Weak pointers factory used to post task on different threads. All weak | 523 // Weak pointers factory used to post task on different threads. All weak |
| 541 // pointers managed by this factory have the same lifetime as MetricsService. | 524 // pointers managed by this factory have the same lifetime as MetricsService. |
| 542 base::WeakPtrFactory<MetricsService> self_ptr_factory_; | 525 base::WeakPtrFactory<MetricsService> self_ptr_factory_; |
| 543 | 526 |
| 544 // Weak pointers factory used for saving state. All weak pointers managed by | 527 // Weak pointers factory used for saving state. All weak pointers managed by |
| 545 // this factory are invalidated in ScheduleNextStateSave. | 528 // this factory are invalidated in ScheduleNextStateSave. |
| 546 base::WeakPtrFactory<MetricsService> state_saver_factory_; | 529 base::WeakPtrFactory<MetricsService> state_saver_factory_; |
| 547 | 530 |
| 548 // The scheduler for determining when uploads should happen. | 531 // The scheduler for determining when uploads should happen. |
| 549 scoped_ptr<MetricsReportingScheduler> scheduler_; | 532 scoped_ptr<MetricsReportingScheduler> scheduler_; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 | 600 |
| 618 // Registers/unregisters |observer| to receive MetricsLog notifications | 601 // Registers/unregisters |observer| to receive MetricsLog notifications |
| 619 // from metrics service. | 602 // from metrics service. |
| 620 static void AddMetricsServiceObserver(MetricsServiceObserver* observer); | 603 static void AddMetricsServiceObserver(MetricsServiceObserver* observer); |
| 621 static void RemoveMetricsServiceObserver(MetricsServiceObserver* observer); | 604 static void RemoveMetricsServiceObserver(MetricsServiceObserver* observer); |
| 622 | 605 |
| 623 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); | 606 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); |
| 624 }; | 607 }; |
| 625 | 608 |
| 626 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 609 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
| OLD | NEW |