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

Side by Side Diff: chrome/browser/metrics/chrome_metrics_service_client.cc

Issue 2567263003: Basic UkmService implementation (Closed)
Patch Set: Rebase Created 3 years, 11 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 2014 The Chromium Authors. All rights reserved. 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 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 #include "chrome/browser/metrics/chrome_metrics_service_client.h" 5 #include "chrome/browser/metrics/chrome_metrics_service_client.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <set>
9 #include <utility> 10 #include <utility>
10 #include <vector> 11 #include <vector>
11 12
12 #include "base/bind.h" 13 #include "base/bind.h"
13 #include "base/callback.h" 14 #include "base/callback.h"
14 #include "base/command_line.h" 15 #include "base/command_line.h"
15 #include "base/files/file_path.h" 16 #include "base/files/file_path.h"
16 #include "base/files/file_util.h" 17 #include "base/files/file_util.h"
17 #include "base/lazy_instance.h" 18 #include "base/lazy_instance.h"
18 #include "base/logging.h" 19 #include "base/logging.h"
19 #include "base/memory/ptr_util.h" 20 #include "base/memory/ptr_util.h"
20 #include "base/metrics/histogram_macros.h" 21 #include "base/metrics/histogram_macros.h"
21 #include "base/metrics/persistent_histogram_allocator.h" 22 #include "base/metrics/persistent_histogram_allocator.h"
22 #include "base/path_service.h" 23 #include "base/path_service.h"
23 #include "base/rand_util.h" 24 #include "base/rand_util.h"
24 #include "base/strings/string16.h" 25 #include "base/strings/string16.h"
25 #include "base/threading/platform_thread.h" 26 #include "base/threading/platform_thread.h"
26 #include "base/threading/thread_task_runner_handle.h" 27 #include "base/threading/thread_task_runner_handle.h"
27 #include "build/build_config.h" 28 #include "build/build_config.h"
28 #include "chrome/browser/browser_process.h" 29 #include "chrome/browser/browser_process.h"
29 #include "chrome/browser/chrome_notification_types.h" 30 #include "chrome/browser/chrome_notification_types.h"
30 #include "chrome/browser/google/google_brand.h" 31 #include "chrome/browser/google/google_brand.h"
32 #include "chrome/browser/history/history_service_factory.h"
31 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" 33 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
32 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" 34 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h"
33 #include "chrome/browser/metrics/https_engagement_metrics_provider.h" 35 #include "chrome/browser/metrics/https_engagement_metrics_provider.h"
34 #include "chrome/browser/metrics/metrics_reporting_state.h" 36 #include "chrome/browser/metrics/metrics_reporting_state.h"
35 #include "chrome/browser/metrics/network_quality_estimator_provider_impl.h" 37 #include "chrome/browser/metrics/network_quality_estimator_provider_impl.h"
36 #include "chrome/browser/metrics/sampling_metrics_provider.h" 38 #include "chrome/browser/metrics/sampling_metrics_provider.h"
37 #include "chrome/browser/metrics/subprocess_metrics_provider.h" 39 #include "chrome/browser/metrics/subprocess_metrics_provider.h"
40 #include "chrome/browser/profiles/profile_manager.h"
38 #include "chrome/browser/safe_browsing/certificate_reporting_metrics_provider.h" 41 #include "chrome/browser/safe_browsing/certificate_reporting_metrics_provider.h"
39 #include "chrome/browser/sync/chrome_sync_client.h" 42 #include "chrome/browser/sync/chrome_sync_client.h"
40 #include "chrome/browser/ui/browser_otr_state.h" 43 #include "chrome/browser/ui/browser_otr_state.h"
41 #include "chrome/common/channel_info.h" 44 #include "chrome/common/channel_info.h"
42 #include "chrome/common/chrome_paths.h" 45 #include "chrome/common/chrome_paths.h"
43 #include "chrome/common/chrome_paths_internal.h" 46 #include "chrome/common/chrome_paths_internal.h"
44 #include "chrome/common/chrome_switches.h" 47 #include "chrome/common/chrome_switches.h"
45 #include "chrome/common/crash_keys.h" 48 #include "chrome/common/crash_keys.h"
46 #include "chrome/common/features.h" 49 #include "chrome/common/features.h"
47 #include "chrome/common/pref_names.h" 50 #include "chrome/common/pref_names.h"
48 #include "chrome/installer/util/util_constants.h" 51 #include "chrome/installer/util/util_constants.h"
49 #include "components/browser_watcher/stability_debugging.h" 52 #include "components/browser_watcher/stability_debugging.h"
53 #include "components/history/core/browser/history_service.h"
50 #include "components/metrics/call_stack_profile_metrics_provider.h" 54 #include "components/metrics/call_stack_profile_metrics_provider.h"
51 #include "components/metrics/drive_metrics_provider.h" 55 #include "components/metrics/drive_metrics_provider.h"
52 #include "components/metrics/file_metrics_provider.h" 56 #include "components/metrics/file_metrics_provider.h"
53 #include "components/metrics/gpu/gpu_metrics_provider.h" 57 #include "components/metrics/gpu/gpu_metrics_provider.h"
54 #include "components/metrics/metrics_pref_names.h" 58 #include "components/metrics/metrics_pref_names.h"
55 #include "components/metrics/metrics_reporting_default_state.h" 59 #include "components/metrics/metrics_reporting_default_state.h"
56 #include "components/metrics/metrics_service.h" 60 #include "components/metrics/metrics_service.h"
57 #include "components/metrics/metrics_service_client.h" 61 #include "components/metrics/metrics_service_client.h"
58 #include "components/metrics/metrics_state_manager.h" 62 #include "components/metrics/metrics_state_manager.h"
59 #include "components/metrics/net/cellular_logic_helper.h" 63 #include "components/metrics/net/cellular_logic_helper.h"
60 #include "components/metrics/net/net_metrics_log_uploader.h" 64 #include "components/metrics/net/net_metrics_log_uploader.h"
61 #include "components/metrics/net/network_metrics_provider.h" 65 #include "components/metrics/net/network_metrics_provider.h"
62 #include "components/metrics/net/version_utils.h" 66 #include "components/metrics/net/version_utils.h"
63 #include "components/metrics/profiler/profiler_metrics_provider.h" 67 #include "components/metrics/profiler/profiler_metrics_provider.h"
64 #include "components/metrics/profiler/tracking_synchronizer.h" 68 #include "components/metrics/profiler/tracking_synchronizer.h"
65 #include "components/metrics/stability_metrics_helper.h" 69 #include "components/metrics/stability_metrics_helper.h"
66 #include "components/metrics/ui/screen_info_metrics_provider.h" 70 #include "components/metrics/ui/screen_info_metrics_provider.h"
67 #include "components/metrics/url_constants.h" 71 #include "components/metrics/url_constants.h"
68 #include "components/omnibox/browser/omnibox_metrics_provider.h" 72 #include "components/omnibox/browser/omnibox_metrics_provider.h"
69 #include "components/prefs/pref_registry_simple.h" 73 #include "components/prefs/pref_registry_simple.h"
70 #include "components/prefs/pref_service.h" 74 #include "components/prefs/pref_service.h"
71 #include "components/sync/device_info/device_count_metrics_provider.h" 75 #include "components/sync/device_info/device_count_metrics_provider.h"
72 #include "components/translate/core/browser/translate_ranker_metrics_provider.h" 76 #include "components/translate/core/browser/translate_ranker_metrics_provider.h"
77 #include "components/ukm/ukm_service.h"
73 #include "components/version_info/version_info.h" 78 #include "components/version_info/version_info.h"
74 #include "content/public/browser/browser_thread.h" 79 #include "content/public/browser/browser_thread.h"
75 #include "content/public/browser/histogram_fetcher.h" 80 #include "content/public/browser/histogram_fetcher.h"
76 #include "content/public/browser/notification_service.h" 81 #include "content/public/browser/notification_service.h"
77 #include "extensions/features/features.h" 82 #include "extensions/features/features.h"
78 #include "ppapi/features/features.h" 83 #include "ppapi/features/features.h"
79 #include "printing/features/features.h" 84 #include "printing/features/features.h"
80 85
81 #if defined(OS_ANDROID) 86 #if defined(OS_ANDROID)
82 #include "chrome/browser/metrics/android_metrics_provider.h" 87 #include "chrome/browser/metrics/android_metrics_provider.h"
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 std::unique_ptr<ChromeMetricsServiceClient> client( 316 std::unique_ptr<ChromeMetricsServiceClient> client(
312 new ChromeMetricsServiceClient(state_manager)); 317 new ChromeMetricsServiceClient(state_manager));
313 client->Initialize(); 318 client->Initialize();
314 319
315 return client; 320 return client;
316 } 321 }
317 322
318 // static 323 // static
319 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { 324 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) {
320 metrics::MetricsService::RegisterPrefs(registry); 325 metrics::MetricsService::RegisterPrefs(registry);
326 ukm::UkmService::RegisterPrefs(registry);
321 metrics::StabilityMetricsHelper::RegisterPrefs(registry); 327 metrics::StabilityMetricsHelper::RegisterPrefs(registry);
322 328
323 RegisterFileMetricsPreferences(registry); 329 RegisterFileMetricsPreferences(registry);
324 330
325 metrics::RegisterMetricsReportingStatePrefs(registry); 331 metrics::RegisterMetricsReportingStatePrefs(registry);
326 332
327 #if defined(OS_ANDROID) 333 #if defined(OS_ANDROID)
328 AndroidMetricsProvider::RegisterPrefs(registry); 334 AndroidMetricsProvider::RegisterPrefs(registry);
329 #endif // defined(OS_ANDROID) 335 #endif // defined(OS_ANDROID)
330 336
331 #if BUILDFLAG(ENABLE_PLUGINS) 337 #if BUILDFLAG(ENABLE_PLUGINS)
332 PluginMetricsProvider::RegisterPrefs(registry); 338 PluginMetricsProvider::RegisterPrefs(registry);
333 #endif // BUILDFLAG(ENABLE_PLUGINS) 339 #endif // BUILDFLAG(ENABLE_PLUGINS)
334 } 340 }
335 341
336 metrics::MetricsService* ChromeMetricsServiceClient::GetMetricsService() { 342 metrics::MetricsService* ChromeMetricsServiceClient::GetMetricsService() {
337 return metrics_service_.get(); 343 return metrics_service_.get();
338 } 344 }
339 345
346 ukm::UkmService* ChromeMetricsServiceClient::GetUkmService() {
347 return ukm_service_.get();
348 }
349
340 void ChromeMetricsServiceClient::SetMetricsClientId( 350 void ChromeMetricsServiceClient::SetMetricsClientId(
341 const std::string& client_id) { 351 const std::string& client_id) {
342 crash_keys::SetMetricsClientIdFromGUID(client_id); 352 crash_keys::SetMetricsClientIdFromGUID(client_id);
343 } 353 }
344 354
345 int32_t ChromeMetricsServiceClient::GetProduct() { 355 int32_t ChromeMetricsServiceClient::GetProduct() {
346 return metrics::ChromeUserMetricsExtension::CHROME; 356 return metrics::ChromeUserMetricsExtension::CHROME;
347 } 357 }
348 358
349 std::string ChromeMetricsServiceClient::GetApplicationLocale() { 359 std::string ChromeMetricsServiceClient::GetApplicationLocale() {
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 // Clear deprecated metrics preference for Android. 556 // Clear deprecated metrics preference for Android.
547 // TODO(gayane): Cleanup this code after M60 when the pref would be cleared 557 // TODO(gayane): Cleanup this code after M60 when the pref would be cleared
548 // from clients. 558 // from clients.
549 #if defined(OS_ANDROID) 559 #if defined(OS_ANDROID)
550 local_state->ClearPref(prefs::kCrashReportingEnabled); 560 local_state->ClearPref(prefs::kCrashReportingEnabled);
551 #endif 561 #endif
552 562
553 metrics_service_.reset( 563 metrics_service_.reset(
554 new metrics::MetricsService(metrics_state_manager_, this, local_state)); 564 new metrics::MetricsService(metrics_state_manager_, this, local_state));
555 565
566 if (base::FeatureList::IsEnabled(ukm::kUkmFeature))
567 ukm_service_.reset(new ukm::UkmService(local_state, this));
568
556 // Gets access to persistent metrics shared by sub-processes. 569 // Gets access to persistent metrics shared by sub-processes.
557 metrics_service_->RegisterMetricsProvider( 570 metrics_service_->RegisterMetricsProvider(
558 std::unique_ptr<metrics::MetricsProvider>( 571 std::unique_ptr<metrics::MetricsProvider>(
559 new SubprocessMetricsProvider())); 572 new SubprocessMetricsProvider()));
560 573
561 // Register metrics providers. 574 // Register metrics providers.
562 #if BUILDFLAG(ENABLE_EXTENSIONS) 575 #if BUILDFLAG(ENABLE_EXTENSIONS)
563 metrics_service_->RegisterMetricsProvider( 576 metrics_service_->RegisterMetricsProvider(
564 std::unique_ptr<metrics::MetricsProvider>( 577 std::unique_ptr<metrics::MetricsProvider>(
565 new ExtensionsMetricsProvider(metrics_state_manager_))); 578 new ExtensionsMetricsProvider(metrics_state_manager_)));
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 content::NotificationService::AllSources()); 870 content::NotificationService::AllSources());
858 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 871 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
859 content::NotificationService::AllSources()); 872 content::NotificationService::AllSources());
860 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, 873 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG,
861 content::NotificationService::AllSources()); 874 content::NotificationService::AllSources());
862 875
863 omnibox_url_opened_subscription_ = 876 omnibox_url_opened_subscription_ =
864 OmniboxEventGlobalTracker::GetInstance()->RegisterCallback( 877 OmniboxEventGlobalTracker::GetInstance()->RegisterCallback(
865 base::Bind(&ChromeMetricsServiceClient::OnURLOpenedFromOmnibox, 878 base::Bind(&ChromeMetricsServiceClient::OnURLOpenedFromOmnibox,
866 base::Unretained(this))); 879 base::Unretained(this)));
880
881 // Observe history deletions for all profiles.
882 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED,
883 content::NotificationService::AllBrowserContextsAndSources());
884 for (Profile* profile :
885 g_browser_process->profile_manager()->GetLoadedProfiles()) {
886 RegisterForHistoryDeletions(profile);
887 }
888 }
889
890 void ChromeMetricsServiceClient::RegisterForHistoryDeletions(Profile* profile) {
891 history::HistoryService* history_service =
892 HistoryServiceFactory::GetForProfile(profile,
893 ServiceAccessType::IMPLICIT_ACCESS);
894 ObserveServiceForDeletions(history_service);
867 } 895 }
868 896
869 void ChromeMetricsServiceClient::Observe( 897 void ChromeMetricsServiceClient::Observe(
870 int type, 898 int type,
871 const content::NotificationSource& source, 899 const content::NotificationSource& source,
872 const content::NotificationDetails& details) { 900 const content::NotificationDetails& details) {
873 DCHECK(thread_checker_.CalledOnValidThread()); 901 DCHECK(thread_checker_.CalledOnValidThread());
874 902
875 switch (type) { 903 switch (type) {
876 case chrome::NOTIFICATION_BROWSER_OPENED: 904 case chrome::NOTIFICATION_BROWSER_OPENED:
877 case chrome::NOTIFICATION_BROWSER_CLOSED: 905 case chrome::NOTIFICATION_BROWSER_CLOSED:
878 case chrome::NOTIFICATION_TAB_PARENTED: 906 case chrome::NOTIFICATION_TAB_PARENTED:
879 case chrome::NOTIFICATION_TAB_CLOSING: 907 case chrome::NOTIFICATION_TAB_CLOSING:
880 case content::NOTIFICATION_LOAD_STOP: 908 case content::NOTIFICATION_LOAD_STOP:
881 case content::NOTIFICATION_LOAD_START: 909 case content::NOTIFICATION_LOAD_START:
882 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: 910 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED:
883 case content::NOTIFICATION_RENDER_WIDGET_HOST_HANG: 911 case content::NOTIFICATION_RENDER_WIDGET_HOST_HANG:
884 metrics_service_->OnApplicationNotIdle(); 912 metrics_service_->OnApplicationNotIdle();
885 break; 913 break;
886 914
915 case chrome::NOTIFICATION_PROFILE_ADDED:
916 RegisterForHistoryDeletions(content::Source<Profile>(source).ptr());
917 break;
918
887 default: 919 default:
888 NOTREACHED(); 920 NOTREACHED();
889 } 921 }
890 } 922 }
891 923
892 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { 924 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) {
893 metrics_service_->OnApplicationNotIdle(); 925 metrics_service_->OnApplicationNotIdle();
894 } 926 }
895 927
896 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { 928 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() {
897 return metrics::IsCellularLogicEnabled(); 929 return metrics::IsCellularLogicEnabled();
898 } 930 }
931
932 void ChromeMetricsServiceClient::OnHistoryDeleted() {
933 if (ukm_service_)
934 ukm_service_->Purge();
935 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698