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 14 matching lines...) Expand all Loading... |
25 #include "base/observer_list.h" | 25 #include "base/observer_list.h" |
26 #include "base/strings/string16.h" | 26 #include "base/strings/string16.h" |
27 #include "base/threading/thread_checker.h" | 27 #include "base/threading/thread_checker.h" |
28 #include "base/time/time.h" | 28 #include "base/time/time.h" |
29 #include "chrome/browser/metrics/metrics_log.h" | 29 #include "chrome/browser/metrics/metrics_log.h" |
30 #include "chrome/browser/metrics/tracking_synchronizer_observer.h" | 30 #include "chrome/browser/metrics/tracking_synchronizer_observer.h" |
31 #include "components/metrics/metrics_log_manager.h" | 31 #include "components/metrics/metrics_log_manager.h" |
32 #include "components/metrics/metrics_provider.h" | 32 #include "components/metrics/metrics_provider.h" |
33 #include "components/metrics/metrics_service_observer.h" | 33 #include "components/metrics/metrics_service_observer.h" |
34 #include "components/variations/active_field_trials.h" | 34 #include "components/variations/active_field_trials.h" |
35 #include "net/url_request/url_fetcher_delegate.h" | |
36 | 35 |
37 class GoogleUpdateMetricsProviderWin; | 36 class GoogleUpdateMetricsProviderWin; |
38 class MetricsReportingScheduler; | 37 class MetricsReportingScheduler; |
39 class PrefService; | 38 class PrefService; |
40 class PrefRegistrySimple; | 39 class PrefRegistrySimple; |
41 class PluginMetricsProvider; | 40 class PluginMetricsProvider; |
42 | 41 |
43 namespace base { | 42 namespace base { |
44 class DictionaryValue; | 43 class DictionaryValue; |
45 class HistogramSamples; | 44 class HistogramSamples; |
46 class MessageLoopProxy; | 45 class MessageLoopProxy; |
47 } | 46 } |
48 | 47 |
49 namespace variations { | 48 namespace variations { |
50 struct ActiveGroupId; | 49 struct ActiveGroupId; |
51 } | 50 } |
52 | 51 |
53 namespace content { | 52 namespace content { |
54 } | 53 } |
55 | 54 |
56 namespace metrics { | 55 namespace metrics { |
| 56 class MetricsLogUploader; |
57 class MetricsServiceClient; | 57 class MetricsServiceClient; |
58 class MetricsStateManager; | 58 class MetricsStateManager; |
59 } | 59 } |
60 | 60 |
61 namespace net { | 61 namespace net { |
62 class URLFetcher; | 62 class URLFetcher; |
63 } | 63 } |
64 | 64 |
65 namespace tracked_objects { | 65 namespace tracked_objects { |
66 struct ProcessDataSnapshot; | 66 struct ProcessDataSnapshot; |
(...skipping 14 matching lines...) Expand all Loading... |
81 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); | 81 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); |
82 | 82 |
83 // This constructor is private specifically so as to control which code is | 83 // This constructor is private specifically so as to control which code is |
84 // able to access it. New code that wishes to use it should be added as a | 84 // able to access it. New code that wishes to use it should be added as a |
85 // friend class. | 85 // friend class. |
86 SyntheticTrialGroup(uint32 trial, uint32 group); | 86 SyntheticTrialGroup(uint32 trial, uint32 group); |
87 }; | 87 }; |
88 | 88 |
89 class MetricsService | 89 class MetricsService |
90 : public base::HistogramFlattener, | 90 : public base::HistogramFlattener, |
91 public chrome_browser_metrics::TrackingSynchronizerObserver, | 91 public chrome_browser_metrics::TrackingSynchronizerObserver { |
92 public net::URLFetcherDelegate { | |
93 public: | 92 public: |
94 // The execution phase of the browser. | 93 // The execution phase of the browser. |
95 enum ExecutionPhase { | 94 enum ExecutionPhase { |
96 UNINITIALIZED_PHASE = 0, | 95 UNINITIALIZED_PHASE = 0, |
97 START_METRICS_RECORDING = 100, | 96 START_METRICS_RECORDING = 100, |
98 CREATE_PROFILE = 200, | 97 CREATE_PROFILE = 200, |
99 STARTUP_TIMEBOMB_ARM = 300, | 98 STARTUP_TIMEBOMB_ARM = 300, |
100 THREAD_WATCHER_START = 400, | 99 THREAD_WATCHER_START = 400, |
101 MAIN_MESSAGE_LOOP_RUN = 500, | 100 MAIN_MESSAGE_LOOP_RUN = 500, |
102 SHUTDOWN_TIMEBOMB_ARM = 600, | 101 SHUTDOWN_TIMEBOMB_ARM = 600, |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 // system profile from the previous session. | 349 // system profile from the previous session. |
351 void PrepareInitialStabilityLog(); | 350 void PrepareInitialStabilityLog(); |
352 | 351 |
353 // Prepares the initial metrics log, which includes startup histograms and | 352 // Prepares the initial metrics log, which includes startup histograms and |
354 // profiler data, as well as incremental stability-related metrics. | 353 // profiler data, as well as incremental stability-related metrics. |
355 void PrepareInitialMetricsLog(); | 354 void PrepareInitialMetricsLog(); |
356 | 355 |
357 // Uploads the currently staged log (which must be non-null). | 356 // Uploads the currently staged log (which must be non-null). |
358 void SendStagedLog(); | 357 void SendStagedLog(); |
359 | 358 |
360 // Prepared the staged log to be passed to the server. Upon return, | 359 // Called after transmission completes (either successfully or with failure). |
361 // current_fetch_ should be reset with its upload data set to a compressed | 360 void OnLogUploadComplete(int response_code); |
362 // copy of the staged log. | |
363 void PrepareFetchWithStagedLog(); | |
364 | |
365 // Implementation of net::URLFetcherDelegate. Called after transmission | |
366 // completes (either successfully or with failure). | |
367 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | |
368 | 361 |
369 // Reads, increments and then sets the specified integer preference. | 362 // Reads, increments and then sets the specified integer preference. |
370 void IncrementPrefValue(const char* path); | 363 void IncrementPrefValue(const char* path); |
371 | 364 |
372 // Reads, increments and then sets the specified long preference that is | 365 // Reads, increments and then sets the specified long preference that is |
373 // stored as a string. | 366 // stored as a string. |
374 void IncrementLongPrefsValue(const char* path); | 367 void IncrementLongPrefsValue(const char* path); |
375 | 368 |
376 // Records that the browser was shut down cleanly. | 369 // Records that the browser was shut down cleanly. |
377 void LogCleanShutdown(); | 370 void LogCleanShutdown(); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 | 443 |
451 #if defined(OS_WIN) | 444 #if defined(OS_WIN) |
452 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_; | 445 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_; |
453 #endif | 446 #endif |
454 | 447 |
455 // The initial metrics log, used to record startup metrics (histograms and | 448 // The initial metrics log, used to record startup metrics (histograms and |
456 // profiler data). Note that if a crash occurred in the previous session, an | 449 // profiler data). Note that if a crash occurred in the previous session, an |
457 // initial stability log may be sent before this. | 450 // initial stability log may be sent before this. |
458 scoped_ptr<MetricsLog> initial_metrics_log_; | 451 scoped_ptr<MetricsLog> initial_metrics_log_; |
459 | 452 |
460 // The outstanding transmission appears as a URL Fetch operation. | 453 // Instance of the helper class for uploading logs. |
461 scoped_ptr<net::URLFetcher> current_fetch_; | 454 scoped_ptr<metrics::MetricsLogUploader> log_uploader_; |
| 455 |
| 456 // Whether there is a current log upload in progress. |
| 457 bool log_upload_in_progress_; |
462 | 458 |
463 // Whether the MetricsService object has received any notifications since | 459 // Whether the MetricsService object has received any notifications since |
464 // the last time a transmission was sent. | 460 // the last time a transmission was sent. |
465 bool idle_since_last_transmission_; | 461 bool idle_since_last_transmission_; |
466 | 462 |
467 // A number that identifies the how many times the app has been launched. | 463 // A number that identifies the how many times the app has been launched. |
468 int session_id_; | 464 int session_id_; |
469 | 465 |
470 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to | 466 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to |
471 // Windows) to a unique integer that we will use to identify them. | 467 // Windows) to a unique integer that we will use to identify them. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); | 511 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); |
516 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsServiceObserver); | 512 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsServiceObserver); |
517 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, | 513 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, |
518 PermutedEntropyCacheClearedWhenLowEntropyReset); | 514 PermutedEntropyCacheClearedWhenLowEntropyReset); |
519 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); | 515 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); |
520 | 516 |
521 DISALLOW_COPY_AND_ASSIGN(MetricsService); | 517 DISALLOW_COPY_AND_ASSIGN(MetricsService); |
522 }; | 518 }; |
523 | 519 |
524 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 520 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
OLD | NEW |