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

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

Issue 293393010: Move initial metrics gathering tasks out of MetricsService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 6 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
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/files/file_path.h"
17 #include "base/gtest_prod_util.h" 16 #include "base/gtest_prod_util.h"
18 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
19 #include "base/memory/scoped_vector.h" 18 #include "base/memory/scoped_vector.h"
20 #include "base/memory/weak_ptr.h" 19 #include "base/memory/weak_ptr.h"
21 #include "base/metrics/field_trial.h" 20 #include "base/metrics/field_trial.h"
22 #include "base/metrics/histogram_flattener.h" 21 #include "base/metrics/histogram_flattener.h"
23 #include "base/metrics/histogram_snapshot_manager.h" 22 #include "base/metrics/histogram_snapshot_manager.h"
24 #include "base/metrics/user_metrics.h" 23 #include "base/metrics/user_metrics.h"
25 #include "base/observer_list.h" 24 #include "base/observer_list.h"
26 #include "base/strings/string16.h" 25 #include "base/strings/string16.h"
27 #include "base/threading/thread_checker.h" 26 #include "base/threading/thread_checker.h"
28 #include "base/time/time.h" 27 #include "base/time/time.h"
29 #include "chrome/browser/metrics/tracking_synchronizer_observer.h"
30 #include "components/metrics/metrics_log.h" 28 #include "components/metrics/metrics_log.h"
31 #include "components/metrics/metrics_log_manager.h" 29 #include "components/metrics/metrics_log_manager.h"
32 #include "components/metrics/metrics_provider.h" 30 #include "components/metrics/metrics_provider.h"
33 #include "components/metrics/metrics_service_observer.h" 31 #include "components/metrics/metrics_service_observer.h"
34 #include "components/variations/active_field_trials.h" 32 #include "components/variations/active_field_trials.h"
35 33
36 class GoogleUpdateMetricsProviderWin;
37 class MetricsReportingScheduler; 34 class MetricsReportingScheduler;
38 class PrefService; 35 class PrefService;
39 class PrefRegistrySimple; 36 class PrefRegistrySimple;
40 class PluginMetricsProvider;
41 class ProfilerMetricsProvider;
42 37
43 namespace base { 38 namespace base {
44 class DictionaryValue; 39 class DictionaryValue;
45 class HistogramSamples; 40 class HistogramSamples;
46 class MessageLoopProxy; 41 class MessageLoopProxy;
47 class PrefService; 42 class PrefService;
48 } 43 }
49 44
50 namespace variations { 45 namespace variations {
51 struct ActiveGroupId; 46 struct ActiveGroupId;
(...skipping 29 matching lines...) Expand all
81 private: 76 private:
82 friend class MetricsService; 77 friend class MetricsService;
83 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); 78 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial);
84 79
85 // This constructor is private specifically so as to control which code is 80 // This constructor is private specifically so as to control which code is
86 // able to access it. New code that wishes to use it should be added as a 81 // able to access it. New code that wishes to use it should be added as a
87 // friend class. 82 // friend class.
88 SyntheticTrialGroup(uint32 trial, uint32 group); 83 SyntheticTrialGroup(uint32 trial, uint32 group);
89 }; 84 };
90 85
91 class MetricsService 86 class MetricsService : public base::HistogramFlattener {
92 : public base::HistogramFlattener,
93 public chrome_browser_metrics::TrackingSynchronizerObserver {
94 public: 87 public:
95 // The execution phase of the browser. 88 // The execution phase of the browser.
96 enum ExecutionPhase { 89 enum ExecutionPhase {
97 UNINITIALIZED_PHASE = 0, 90 UNINITIALIZED_PHASE = 0,
98 START_METRICS_RECORDING = 100, 91 START_METRICS_RECORDING = 100,
99 CREATE_PROFILE = 200, 92 CREATE_PROFILE = 200,
100 STARTUP_TIMEBOMB_ARM = 300, 93 STARTUP_TIMEBOMB_ARM = 300,
101 THREAD_WATCHER_START = 400, 94 THREAD_WATCHER_START = 400,
102 MAIN_MESSAGE_LOOP_RUN = 500, 95 MAIN_MESSAGE_LOOP_RUN = 500,
103 SHUTDOWN_TIMEBOMB_ARM = 600, 96 SHUTDOWN_TIMEBOMB_ARM = 600,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // This count is eventually send via UMA logs. 193 // This count is eventually send via UMA logs.
201 void RecordBreakpadRegistration(bool success); 194 void RecordBreakpadRegistration(bool success);
202 195
203 // Saves in the preferences if the browser is running under a debugger. 196 // Saves in the preferences if the browser is running under a debugger.
204 // This count is eventually send via UMA logs. 197 // This count is eventually send via UMA logs.
205 void RecordBreakpadHasDebugger(bool has_debugger); 198 void RecordBreakpadHasDebugger(bool has_debugger);
206 199
207 bool recording_active() const; 200 bool recording_active() const;
208 bool reporting_active() const; 201 bool reporting_active() const;
209 202
210 // TODO(blundell): Move this to ChromeMetricsServiceClient.
211 void LogPluginLoadingError(const base::FilePath& plugin_path);
212
213 // Redundant test to ensure that we are notified of a clean exit. 203 // Redundant test to ensure that we are notified of a clean exit.
214 // This value should be true when process has completed shutdown. 204 // This value should be true when process has completed shutdown.
215 static bool UmaMetricsProperlyShutdown(); 205 static bool UmaMetricsProperlyShutdown();
216 206
217 // Registers a field trial name and group to be used to annotate a UMA report 207 // Registers a field trial name and group to be used to annotate a UMA report
218 // with a particular Chrome configuration state. A UMA report will be 208 // with a particular Chrome configuration state. A UMA report will be
219 // annotated with this trial group if and only if all events in the report 209 // annotated with this trial group if and only if all events in the report
220 // were created after the trial is registered. Only one group name may be 210 // were created after the trial is registered. Only one group name may be
221 // registered at a time for a given trial_name. Only the last group name that 211 // registered at a time for a given trial_name. Only the last group name that
222 // is registered for a given trial name will be recorded. The values passed 212 // is registered for a given trial name will be recorded. The values passed
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 enum ShutdownCleanliness { 245 enum ShutdownCleanliness {
256 CLEANLY_SHUTDOWN = 0xdeadbeef, 246 CLEANLY_SHUTDOWN = 0xdeadbeef,
257 NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN 247 NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN
258 }; 248 };
259 249
260 typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups; 250 typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups;
261 251
262 // Calls into the client to start metrics gathering. 252 // Calls into the client to start metrics gathering.
263 void StartGatheringMetrics(); 253 void StartGatheringMetrics();
264 254
265 // Callback that continues the init task by loading plugin information. 255 // Callback that moves the state to INIT_TASK_DONE. When this is called, the
266 void OnInitTaskGotHardwareClass(); 256 // state should be INIT_TASK_SCHEDULED.
267 257 void FinishedGatheringInitialMetrics();
268 // Called after the Plugin init task has been completed that continues the
269 // init task by launching a task to gather Google Update statistics.
270 void OnInitTaskGotPluginInfo();
271
272 // Called after GoogleUpdate init task has been completed that continues the
273 // init task by loading profiler data.
274 void OnInitTaskGotGoogleUpdateData();
275 258
276 void OnUserAction(const std::string& action); 259 void OnUserAction(const std::string& action);
277 260
278 // TrackingSynchronizerObserver:
279 virtual void ReceivedProfilerData(
280 const tracked_objects::ProcessDataSnapshot& process_data,
281 int process_type) OVERRIDE;
282 // Callback that moves the state to INIT_TASK_DONE.
283 virtual void FinishedReceivingProfilerData() OVERRIDE;
284
285 // Get the amount of uptime since this process started and since the last 261 // Get the amount of uptime since this process started and since the last
286 // call to this function. Also updates the cumulative uptime metric (stored 262 // call to this function. Also updates the cumulative uptime metric (stored
287 // as a pref) for uninstall. Uptimes are measured using TimeTicks, which 263 // as a pref) for uninstall. Uptimes are measured using TimeTicks, which
288 // guarantees that it is monotonic and does not jump if the user changes 264 // guarantees that it is monotonic and does not jump if the user changes
289 // his/her clock. The TimeTicks implementation also makes the clock not 265 // his/her clock. The TimeTicks implementation also makes the clock not
290 // count time the computer is suspended. 266 // count time the computer is suspended.
291 void GetUptimes(PrefService* pref, 267 void GetUptimes(PrefService* pref,
292 base::TimeDelta* incremental_uptime, 268 base::TimeDelta* incremental_uptime,
293 base::TimeDelta* uptime); 269 base::TimeDelta* uptime);
294 270
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 // be cut, and logs are neither persisted nor uploaded. 404 // be cut, and logs are neither persisted nor uploaded.
429 bool test_mode_active_; 405 bool test_mode_active_;
430 406
431 // The progression of states made by the browser are recorded in the following 407 // The progression of states made by the browser are recorded in the following
432 // state. 408 // state.
433 State state_; 409 State state_;
434 410
435 // Whether the initial stability log has been recorded during startup. 411 // Whether the initial stability log has been recorded during startup.
436 bool has_initial_stability_log_; 412 bool has_initial_stability_log_;
437 413
438 ProfilerMetricsProvider* profiler_metrics_provider_;
439
440 #if defined(ENABLE_PLUGINS)
441 PluginMetricsProvider* plugin_metrics_provider_;
442 #endif
443
444 #if defined(OS_WIN)
445 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_;
446 #endif
447
448 // The initial metrics log, used to record startup metrics (histograms and 414 // The initial metrics log, used to record startup metrics (histograms and
449 // profiler data). Note that if a crash occurred in the previous session, an 415 // profiler data). Note that if a crash occurred in the previous session, an
450 // initial stability log may be sent before this. 416 // initial stability log may be sent before this.
451 scoped_ptr<MetricsLog> initial_metrics_log_; 417 scoped_ptr<MetricsLog> initial_metrics_log_;
452 418
453 // Instance of the helper class for uploading logs. 419 // Instance of the helper class for uploading logs.
454 scoped_ptr<metrics::MetricsLogUploader> log_uploader_; 420 scoped_ptr<metrics::MetricsLogUploader> log_uploader_;
455 421
456 // Whether there is a current log upload in progress. 422 // Whether there is a current log upload in progress.
457 bool log_upload_in_progress_; 423 bool log_upload_in_progress_;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); 466 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess);
501 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsServiceObserver); 467 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsServiceObserver);
502 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, 468 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest,
503 PermutedEntropyCacheClearedWhenLowEntropyReset); 469 PermutedEntropyCacheClearedWhenLowEntropyReset);
504 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); 470 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial);
505 471
506 DISALLOW_COPY_AND_ASSIGN(MetricsService); 472 DISALLOW_COPY_AND_ASSIGN(MetricsService);
507 }; 473 };
508 474
509 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ 475 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/metrics/chrome_metrics_service_client.cc ('k') | chrome/browser/metrics/metrics_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698