Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: chrome/browser/metrics/metrics_service.h

Issue 12212089: content: convert child process notifications to observer usage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: private Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/android/crash_dump_manager.cc ('k') | chrome/browser/metrics/metrics_service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 #include <map> 11 #include <map>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/basictypes.h" 15 #include "base/basictypes.h"
16 #include "base/gtest_prod_util.h" 16 #include "base/gtest_prod_util.h"
17 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
18 #include "base/memory/weak_ptr.h" 18 #include "base/memory/weak_ptr.h"
19 #include "base/metrics/field_trial.h" 19 #include "base/metrics/field_trial.h"
20 #include "base/process_util.h" 20 #include "base/process_util.h"
21 #include "chrome/browser/metrics/metrics_log.h" 21 #include "chrome/browser/metrics/metrics_log.h"
22 #include "chrome/browser/metrics/tracking_synchronizer_observer.h" 22 #include "chrome/browser/metrics/tracking_synchronizer_observer.h"
23 #include "chrome/common/metrics/metrics_service_base.h" 23 #include "chrome/common/metrics/metrics_service_base.h"
24 #include "chrome/installer/util/google_update_settings.h" 24 #include "chrome/installer/util/google_update_settings.h"
25 #include "content/public/browser/browser_child_process_observer.h"
25 #include "content/public/browser/notification_observer.h" 26 #include "content/public/browser/notification_observer.h"
26 #include "content/public/browser/notification_registrar.h" 27 #include "content/public/browser/notification_registrar.h"
27 #include "content/public/browser/user_metrics.h" 28 #include "content/public/browser/user_metrics.h"
28 #include "net/url_request/url_fetcher_delegate.h" 29 #include "net/url_request/url_fetcher_delegate.h"
29 30
30 #if defined(OS_CHROMEOS) 31 #if defined(OS_CHROMEOS)
31 #include "chrome/browser/chromeos/external_metrics.h" 32 #include "chrome/browser/chromeos/external_metrics.h"
32 #endif 33 #endif
33 34
34 class MetricsReportingScheduler; 35 class MetricsReportingScheduler;
(...skipping 27 matching lines...) Expand all
62 namespace tracked_objects { 63 namespace tracked_objects {
63 struct ProcessDataSnapshot; 64 struct ProcessDataSnapshot;
64 } 65 }
65 66
66 namespace webkit { 67 namespace webkit {
67 struct WebPluginInfo; 68 struct WebPluginInfo;
68 } 69 }
69 70
70 class MetricsService 71 class MetricsService
71 : public chrome_browser_metrics::TrackingSynchronizerObserver, 72 : public chrome_browser_metrics::TrackingSynchronizerObserver,
73 public content::BrowserChildProcessObserver,
72 public content::NotificationObserver, 74 public content::NotificationObserver,
73 public net::URLFetcherDelegate, 75 public net::URLFetcherDelegate,
74 public MetricsServiceBase { 76 public MetricsServiceBase {
75 public: 77 public:
76 MetricsService(); 78 MetricsService();
77 virtual ~MetricsService(); 79 virtual ~MetricsService();
78 80
79 // Starts the metrics system, turning on recording and uploading of metrics. 81 // Starts the metrics system, turning on recording and uploading of metrics.
80 // Should be called when starting up with metrics enabled, or when metrics 82 // Should be called when starting up with metrics enabled, or when metrics
81 // are turned on. 83 // are turned on.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 // At startup, prefs needs to be called with a list of all the pref names and 126 // At startup, prefs needs to be called with a list of all the pref names and
125 // types we'll be using. 127 // types we'll be using.
126 static void RegisterPrefs(PrefRegistrySimple* registry); 128 static void RegisterPrefs(PrefRegistrySimple* registry);
127 129
128 // Set up notifications which indicate that a user is performing work. This is 130 // Set up notifications which indicate that a user is performing work. This is
129 // useful to allow some features to sleep, until the machine becomes active, 131 // useful to allow some features to sleep, until the machine becomes active,
130 // such as precluding UMA uploads unless there was recent activity. 132 // such as precluding UMA uploads unless there was recent activity.
131 static void SetUpNotifications(content::NotificationRegistrar* registrar, 133 static void SetUpNotifications(content::NotificationRegistrar* registrar,
132 content::NotificationObserver* observer); 134 content::NotificationObserver* observer);
133 135
136 // Implementation of content::BrowserChildProcessObserver
137 virtual void BrowserChildProcessHostConnected(
138 const content::ChildProcessData& data) OVERRIDE;
139 virtual void BrowserChildProcessCrashed(
140 const content::ChildProcessData& data) OVERRIDE;
141 virtual void BrowserChildProcessInstanceCreated(
142 const content::ChildProcessData& data) OVERRIDE;
143
134 // Implementation of content::NotificationObserver 144 // Implementation of content::NotificationObserver
135 virtual void Observe(int type, 145 virtual void Observe(int type,
136 const content::NotificationSource& source, 146 const content::NotificationSource& source,
137 const content::NotificationDetails& details) OVERRIDE; 147 const content::NotificationDetails& details) OVERRIDE;
138 148
139 // Invoked when we get a WM_SESSIONEND. This places a value in prefs that is 149 // Invoked when we get a WM_SESSIONEND. This places a value in prefs that is
140 // reset when RecordCompletedSessionEnd is invoked. 150 // reset when RecordCompletedSessionEnd is invoked.
141 void RecordStartOfSessionEnd(); 151 void RecordStartOfSessionEnd();
142 152
143 // This should be called when the application is shutting down. It records 153 // This should be called when the application is shutting down. It records
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 214
205 // Designates which entropy source was returned from this MetricsService. 215 // Designates which entropy source was returned from this MetricsService.
206 // This is used for testing to validate that we return the correct source 216 // This is used for testing to validate that we return the correct source
207 // depending on the state of the service. 217 // depending on the state of the service.
208 enum EntropySourceReturned { 218 enum EntropySourceReturned {
209 LAST_ENTROPY_NONE, 219 LAST_ENTROPY_NONE,
210 LAST_ENTROPY_LOW, 220 LAST_ENTROPY_LOW,
211 LAST_ENTROPY_HIGH, 221 LAST_ENTROPY_HIGH,
212 }; 222 };
213 223
224 struct ChildProcessStats;
225
214 // First part of the init task. Called on the FILE thread to load hardware 226 // First part of the init task. Called on the FILE thread to load hardware
215 // class information. 227 // class information.
216 static void InitTaskGetHardwareClass(base::WeakPtr<MetricsService> self, 228 static void InitTaskGetHardwareClass(base::WeakPtr<MetricsService> self,
217 base::MessageLoopProxy* target_loop); 229 base::MessageLoopProxy* target_loop);
218 230
219 // Callback from InitTaskGetHardwareClass() that continues the init task by 231 // Callback from InitTaskGetHardwareClass() that continues the init task by
220 // loading plugin information. 232 // loading plugin information.
221 void OnInitTaskGotHardwareClass(const std::string& hardware_class); 233 void OnInitTaskGotHardwareClass(const std::string& hardware_class);
222 234
223 // Callback from PluginService::GetPlugins() that continues the init task by 235 // Callback from PluginService::GetPlugins() that continues the init task by
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 void LogRendererCrash(content::RenderProcessHost* host, 367 void LogRendererCrash(content::RenderProcessHost* host,
356 base::TerminationStatus status, 368 base::TerminationStatus status,
357 int exit_code); 369 int exit_code);
358 370
359 // Records a renderer process hang. 371 // Records a renderer process hang.
360 void LogRendererHang(); 372 void LogRendererHang();
361 373
362 // Records that the browser was shut down cleanly. 374 // Records that the browser was shut down cleanly.
363 void LogCleanShutdown(); 375 void LogCleanShutdown();
364 376
365 // Records a child process related notification. These are recorded to an 377 // Returns reference to ChildProcessStats corresponding to |data|.
366 // in-object buffer because these notifications are sent on page load, and we 378 ChildProcessStats& GetChildProcessStats(
367 // don't want to slow that down. 379 const content::ChildProcessData& data);
368 void LogChildProcessChange(int type,
369 const content::NotificationSource& source,
370 const content::NotificationDetails& details);
371 380
372 // Logs the number of keywords. 381 // Logs the number of keywords.
373 void LogKeywordCount(size_t keyword_count); 382 void LogKeywordCount(size_t keyword_count);
374 383
375 // Saves plugin-related updates from the in-object buffer to Local State 384 // Saves plugin-related updates from the in-object buffer to Local State
376 // for retrieval next time we send a Profile log (generally next launch). 385 // for retrieval next time we send a Profile log (generally next launch).
377 void RecordPluginChanges(PrefService* pref); 386 void RecordPluginChanges(PrefService* pref);
378 387
379 // Records state that should be periodically saved, like uptime and 388 // Records state that should be periodically saved, like uptime and
380 // buffered plugin stability statistics. 389 // buffered plugin stability statistics.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 // A number that identifies the how many times the app has been launched. 467 // A number that identifies the how many times the app has been launched.
459 int session_id_; 468 int session_id_;
460 469
461 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to 470 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to
462 // Windows) to a unique integer that we will use to identify them. 471 // Windows) to a unique integer that we will use to identify them.
463 // |next_window_id_| is used to track which IDs we have used so far. 472 // |next_window_id_| is used to track which IDs we have used so far.
464 typedef std::map<uintptr_t, int> WindowMap; 473 typedef std::map<uintptr_t, int> WindowMap;
465 WindowMap window_map_; 474 WindowMap window_map_;
466 int next_window_id_; 475 int next_window_id_;
467 476
468 // Buffer of child process notifications for quick access. See 477 // Buffer of child process notifications for quick access.
469 // ChildProcessStats documentation above for more details.
470 struct ChildProcessStats;
471 std::map<string16, ChildProcessStats> child_process_stats_buffer_; 478 std::map<string16, ChildProcessStats> child_process_stats_buffer_;
472 479
473 // Weak pointers factory used to post task on different threads. All weak 480 // Weak pointers factory used to post task on different threads. All weak
474 // pointers managed by this factory have the same lifetime as MetricsService. 481 // pointers managed by this factory have the same lifetime as MetricsService.
475 base::WeakPtrFactory<MetricsService> self_ptr_factory_; 482 base::WeakPtrFactory<MetricsService> self_ptr_factory_;
476 483
477 // Weak pointers factory used for saving state. All weak pointers managed by 484 // Weak pointers factory used for saving state. All weak pointers managed by
478 // this factory are invalidated in ScheduleNextStateSave. 485 // this factory are invalidated in ScheduleNextStateSave.
479 base::WeakPtrFactory<MetricsService> state_saver_factory_; 486 base::WeakPtrFactory<MetricsService> state_saver_factory_;
480 487
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 friend class extensions::ExtensionDownloader; 526 friend class extensions::ExtensionDownloader;
520 friend class extensions::ManifestFetchData; 527 friend class extensions::ManifestFetchData;
521 528
522 // Returns true if prefs::kMetricsReportingEnabled is set. 529 // Returns true if prefs::kMetricsReportingEnabled is set.
523 static bool IsMetricsReportingEnabled(); 530 static bool IsMetricsReportingEnabled();
524 531
525 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); 532 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper);
526 }; 533 };
527 534
528 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ 535 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/android/crash_dump_manager.cc ('k') | chrome/browser/metrics/metrics_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698