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

Side by Side Diff: ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm

Issue 2567263003: Basic UkmService implementation (Closed)
Patch Set: Check OFFICIAL_BUILD 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h" 5 #include "ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/files/file_path.h" 15 #include "base/files/file_path.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
18 #include "base/metrics/histogram.h" 18 #include "base/metrics/histogram.h"
19 #include "base/process/process_metrics.h" 19 #include "base/process/process_metrics.h"
20 #include "base/rand_util.h" 20 #include "base/rand_util.h"
21 #include "base/strings/string16.h" 21 #include "base/strings/string16.h"
22 #include "base/threading/platform_thread.h" 22 #include "base/threading/platform_thread.h"
23 #include "components/crash/core/common/crash_keys.h" 23 #include "components/crash/core/common/crash_keys.h"
24 #include "components/history/core/browser/history_service.h"
25 #include "components/keyed_service/core/service_access_type.h"
24 #include "components/metrics/call_stack_profile_metrics_provider.h" 26 #include "components/metrics/call_stack_profile_metrics_provider.h"
25 #include "components/metrics/drive_metrics_provider.h" 27 #include "components/metrics/drive_metrics_provider.h"
26 #include "components/metrics/metrics_pref_names.h" 28 #include "components/metrics/metrics_pref_names.h"
27 #include "components/metrics/metrics_reporting_default_state.h" 29 #include "components/metrics/metrics_reporting_default_state.h"
28 #include "components/metrics/metrics_service.h" 30 #include "components/metrics/metrics_service.h"
29 #include "components/metrics/net/cellular_logic_helper.h" 31 #include "components/metrics/net/cellular_logic_helper.h"
30 #include "components/metrics/net/net_metrics_log_uploader.h" 32 #include "components/metrics/net/net_metrics_log_uploader.h"
31 #include "components/metrics/net/network_metrics_provider.h" 33 #include "components/metrics/net/network_metrics_provider.h"
32 #include "components/metrics/net/version_utils.h" 34 #include "components/metrics/net/version_utils.h"
33 #include "components/metrics/profiler/profiler_metrics_provider.h" 35 #include "components/metrics/profiler/profiler_metrics_provider.h"
34 #include "components/metrics/profiler/tracking_synchronizer.h" 36 #include "components/metrics/profiler/tracking_synchronizer.h"
35 #include "components/metrics/stability_metrics_helper.h" 37 #include "components/metrics/stability_metrics_helper.h"
36 #include "components/metrics/ui/screen_info_metrics_provider.h" 38 #include "components/metrics/ui/screen_info_metrics_provider.h"
37 #include "components/metrics/url_constants.h" 39 #include "components/metrics/url_constants.h"
38 #include "components/omnibox/browser/omnibox_metrics_provider.h" 40 #include "components/omnibox/browser/omnibox_metrics_provider.h"
39 #include "components/prefs/pref_registry_simple.h" 41 #include "components/prefs/pref_registry_simple.h"
40 #include "components/prefs/pref_service.h" 42 #include "components/prefs/pref_service.h"
41 #include "components/signin/core/browser/signin_status_metrics_provider.h" 43 #include "components/signin/core/browser/signin_status_metrics_provider.h"
42 #include "components/sync/device_info/device_count_metrics_provider.h" 44 #include "components/sync/device_info/device_count_metrics_provider.h"
43 #include "components/translate/core/browser/translate_ranker_metrics_provider.h" 45 #include "components/translate/core/browser/translate_ranker_metrics_provider.h"
46 #include "components/ukm/ukm_service.h"
44 #include "components/variations/variations_associated_data.h" 47 #include "components/variations/variations_associated_data.h"
45 #include "components/version_info/version_info.h" 48 #include "components/version_info/version_info.h"
46 #include "ios/chrome/browser/application_context.h" 49 #include "ios/chrome/browser/application_context.h"
50 #include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
47 #include "ios/chrome/browser/chrome_paths.h" 51 #include "ios/chrome/browser/chrome_paths.h"
48 #include "ios/chrome/browser/google/google_brand.h" 52 #include "ios/chrome/browser/google/google_brand.h"
53 #include "ios/chrome/browser/history/history_service_factory.h"
49 #include "ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h" 54 #include "ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h"
50 #include "ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h" 55 #include "ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h"
51 #include "ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_de legate.h" 56 #include "ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_de legate.h"
52 #include "ios/chrome/browser/sync/ios_chrome_sync_client.h" 57 #include "ios/chrome/browser/sync/ios_chrome_sync_client.h"
53 #include "ios/chrome/browser/tab_parenting_global_observer.h" 58 #include "ios/chrome/browser/tab_parenting_global_observer.h"
54 #include "ios/chrome/browser/tabs/tab_model_list.h" 59 #include "ios/chrome/browser/tabs/tab_model_list.h"
55 #include "ios/chrome/common/channel_info.h" 60 #include "ios/chrome/common/channel_info.h"
56 #include "ios/web/public/web_thread.h" 61 #include "ios/web/public/web_thread.h"
57 62
58 IOSChromeMetricsServiceClient::IOSChromeMetricsServiceClient( 63 IOSChromeMetricsServiceClient::IOSChromeMetricsServiceClient(
(...skipping 25 matching lines...) Expand all
84 89
85 return client; 90 return client;
86 } 91 }
87 92
88 // static 93 // static
89 void IOSChromeMetricsServiceClient::RegisterPrefs( 94 void IOSChromeMetricsServiceClient::RegisterPrefs(
90 PrefRegistrySimple* registry) { 95 PrefRegistrySimple* registry) {
91 metrics::MetricsService::RegisterPrefs(registry); 96 metrics::MetricsService::RegisterPrefs(registry);
92 metrics::StabilityMetricsHelper::RegisterPrefs(registry); 97 metrics::StabilityMetricsHelper::RegisterPrefs(registry);
93 metrics::RegisterMetricsReportingStatePrefs(registry); 98 metrics::RegisterMetricsReportingStatePrefs(registry);
99 ukm::UkmService::RegisterPrefs(registry);
94 } 100 }
95 101
96 metrics::MetricsService* IOSChromeMetricsServiceClient::GetMetricsService() { 102 metrics::MetricsService* IOSChromeMetricsServiceClient::GetMetricsService() {
97 return metrics_service_.get(); 103 return metrics_service_.get();
98 } 104 }
99 105
106 ukm::UkmService* IOSChromeMetricsServiceClient::GetUkmService() {
107 return ukm_service_.get();
108 }
109
100 void IOSChromeMetricsServiceClient::SetMetricsClientId( 110 void IOSChromeMetricsServiceClient::SetMetricsClientId(
101 const std::string& client_id) { 111 const std::string& client_id) {
102 crash_keys::SetMetricsClientIdFromGUID(client_id); 112 crash_keys::SetMetricsClientIdFromGUID(client_id);
103 } 113 }
104 114
105 int32_t IOSChromeMetricsServiceClient::GetProduct() { 115 int32_t IOSChromeMetricsServiceClient::GetProduct() {
106 return metrics::ChromeUserMetricsExtension::CHROME; 116 return metrics::ChromeUserMetricsExtension::CHROME;
107 } 117 }
108 118
109 std::string IOSChromeMetricsServiceClient::GetApplicationLocale() { 119 std::string IOSChromeMetricsServiceClient::GetApplicationLocale() {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 web::WebState* web_state) { 183 web::WebState* web_state) {
174 metrics_service_->OnApplicationNotIdle(); 184 metrics_service_->OnApplicationNotIdle();
175 } 185 }
176 186
177 void IOSChromeMetricsServiceClient::WebStateDidStopLoading( 187 void IOSChromeMetricsServiceClient::WebStateDidStopLoading(
178 web::WebState* web_state) { 188 web::WebState* web_state) {
179 metrics_service_->OnApplicationNotIdle(); 189 metrics_service_->OnApplicationNotIdle();
180 } 190 }
181 191
182 void IOSChromeMetricsServiceClient::Initialize() { 192 void IOSChromeMetricsServiceClient::Initialize() {
193 PrefService* local_state = GetApplicationContext()->GetLocalState();
183 metrics_service_ = base::MakeUnique<metrics::MetricsService>( 194 metrics_service_ = base::MakeUnique<metrics::MetricsService>(
184 metrics_state_manager_, this, GetApplicationContext()->GetLocalState()); 195 metrics_state_manager_, this, local_state);
196
197 if (base::FeatureList::IsEnabled(ukm::kUkmFeature))
198 ukm_service_.reset(new ukm::UkmService(local_state, this));
sdefresne 2017/01/23 09:53:04 Please use base::MakeUnique here: if (base::Fea
Steven Holte 2017/01/23 20:37:29 Done.
185 199
186 // Register metrics providers. 200 // Register metrics providers.
187 metrics_service_->RegisterMetricsProvider( 201 metrics_service_->RegisterMetricsProvider(
188 base::MakeUnique<metrics::NetworkMetricsProvider>( 202 base::MakeUnique<metrics::NetworkMetricsProvider>(
189 web::WebThread::GetBlockingPool())); 203 web::WebThread::GetBlockingPool()));
190 204
191 // Currently, we configure OmniboxMetricsProvider to not log events to UMA 205 // Currently, we configure OmniboxMetricsProvider to not log events to UMA
192 // if there is a single incognito session visible. In the future, it may 206 // if there is a single incognito session visible. In the future, it may
193 // be worth revisiting this to still log events from non-incognito sessions. 207 // be worth revisiting this to still log events from non-incognito sessions.
194 metrics_service_->RegisterMetricsProvider( 208 metrics_service_->RegisterMetricsProvider(
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 314
301 void IOSChromeMetricsServiceClient::RegisterForNotifications() { 315 void IOSChromeMetricsServiceClient::RegisterForNotifications() {
302 tab_parented_subscription_ = 316 tab_parented_subscription_ =
303 TabParentingGlobalObserver::GetInstance()->RegisterCallback( 317 TabParentingGlobalObserver::GetInstance()->RegisterCallback(
304 base::Bind(&IOSChromeMetricsServiceClient::OnTabParented, 318 base::Bind(&IOSChromeMetricsServiceClient::OnTabParented,
305 base::Unretained(this))); 319 base::Unretained(this)));
306 omnibox_url_opened_subscription_ = 320 omnibox_url_opened_subscription_ =
307 OmniboxEventGlobalTracker::GetInstance()->RegisterCallback( 321 OmniboxEventGlobalTracker::GetInstance()->RegisterCallback(
308 base::Bind(&IOSChromeMetricsServiceClient::OnURLOpenedFromOmnibox, 322 base::Bind(&IOSChromeMetricsServiceClient::OnURLOpenedFromOmnibox,
309 base::Unretained(this))); 323 base::Unretained(this)));
324
325 std::vector<ios::ChromeBrowserState*> loaded_browser_states =
326 GetApplicationContext()
327 ->GetChromeBrowserStateManager()
328 ->GetLoadedBrowserStates();
329 for (ios::ChromeBrowserState* browser_state : loaded_browser_states) {
330 RegisterForHistoryDeletions(browser_state);
331 }
332 }
333
334 void IOSChromeMetricsServiceClient::RegisterForHistoryDeletions(
335 ios::ChromeBrowserState* browser_state) {
336 history::HistoryService* history_service =
337 ios::HistoryServiceFactory::GetForBrowserState(
338 browser_state, ServiceAccessType::IMPLICIT_ACCESS);
339 ObserveServiceForDeletions(history_service);
310 } 340 }
311 341
312 void IOSChromeMetricsServiceClient::OnTabParented(web::WebState* web_state) { 342 void IOSChromeMetricsServiceClient::OnTabParented(web::WebState* web_state) {
313 metrics_service_->OnApplicationNotIdle(); 343 metrics_service_->OnApplicationNotIdle();
314 } 344 }
315 345
316 void IOSChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { 346 void IOSChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) {
317 metrics_service_->OnApplicationNotIdle(); 347 metrics_service_->OnApplicationNotIdle();
318 } 348 }
319 349
320 metrics::EnableMetricsDefault 350 metrics::EnableMetricsDefault
321 IOSChromeMetricsServiceClient::GetMetricsReportingDefaultState() { 351 IOSChromeMetricsServiceClient::GetMetricsReportingDefaultState() {
322 return metrics::GetMetricsReportingDefaultState( 352 return metrics::GetMetricsReportingDefaultState(
323 GetApplicationContext()->GetLocalState()); 353 GetApplicationContext()->GetLocalState());
324 } 354 }
355
356 void IOSChromeMetricsServiceClient::OnHistoryDeleted() {
357 if (ukm_service_)
358 ukm_service_->Purge();
359 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698