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

Side by Side Diff: chromecast/browser/metrics/cast_metrics_service_client.cc

Issue 1298473004: [Chromecast] Moves persistent UMA client ID handling to common code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: moves android dep to correct target Created 5 years, 4 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 "chromecast/browser/metrics/cast_metrics_service_client.h" 5 #include "chromecast/browser/metrics/cast_metrics_service_client.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/guid.h" 8 #include "base/guid.h"
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/prefs/pref_registry_simple.h" 11 #include "base/prefs/pref_registry_simple.h"
12 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "base/thread_task_runner_handle.h" 14 #include "base/thread_task_runner_handle.h"
15 #include "chromecast/base/cast_sys_info_util.h" 15 #include "chromecast/base/cast_sys_info_util.h"
16 #include "chromecast/base/chromecast_switches.h" 16 #include "chromecast/base/chromecast_switches.h"
17 #include "chromecast/base/path_utils.h" 17 #include "chromecast/base/path_utils.h"
18 #include "chromecast/base/version.h" 18 #include "chromecast/base/version.h"
19 #include "chromecast/browser/cast_browser_process.h"
20 #include "chromecast/browser/cast_content_browser_client.h"
19 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" 21 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h"
20 #include "chromecast/browser/metrics/platform_metrics_providers.h"
21 #include "chromecast/common/pref_names.h" 22 #include "chromecast/common/pref_names.h"
22 #include "chromecast/public/cast_sys_info.h" 23 #include "chromecast/public/cast_sys_info.h"
23 #include "components/metrics/client_info.h" 24 #include "components/metrics/client_info.h"
24 #include "components/metrics/gpu/gpu_metrics_provider.h" 25 #include "components/metrics/gpu/gpu_metrics_provider.h"
25 #include "components/metrics/metrics_provider.h" 26 #include "components/metrics/metrics_provider.h"
26 #include "components/metrics/metrics_service.h" 27 #include "components/metrics/metrics_service.h"
27 #include "components/metrics/metrics_state_manager.h" 28 #include "components/metrics/metrics_state_manager.h"
28 #include "components/metrics/net/net_metrics_log_uploader.h" 29 #include "components/metrics/net/net_metrics_log_uploader.h"
29 #include "components/metrics/net/network_metrics_provider.h" 30 #include "components/metrics/net/network_metrics_provider.h"
30 #include "components/metrics/profiler/profiler_metrics_provider.h" 31 #include "components/metrics/profiler/profiler_metrics_provider.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 88 }
88 89
89 void CastMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { 90 void CastMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) {
90 registry->RegisterStringPref(kMetricsOldClientID, std::string()); 91 registry->RegisterStringPref(kMetricsOldClientID, std::string());
91 } 92 }
92 93
93 void CastMetricsServiceClient::SetMetricsClientId( 94 void CastMetricsServiceClient::SetMetricsClientId(
94 const std::string& client_id) { 95 const std::string& client_id) {
95 client_id_ = client_id; 96 client_id_ = client_id;
96 LOG(INFO) << "Metrics client ID set: " << client_id; 97 LOG(INFO) << "Metrics client ID set: " << client_id;
97 PlatformSetClientID(cast_service_, client_id); 98 shell::CastBrowserProcess::GetInstance()->browser_client()->
99 SetMetricsClientId(client_id);
98 } 100 }
99 101
100 void CastMetricsServiceClient::OnRecordingDisabled() { 102 void CastMetricsServiceClient::OnRecordingDisabled() {
101 } 103 }
102 104
103 void CastMetricsServiceClient::StoreClientInfo( 105 void CastMetricsServiceClient::StoreClientInfo(
104 const ::metrics::ClientInfo& client_info) { 106 const ::metrics::ClientInfo& client_info) {
105 const std::string& client_id = client_info.client_id; 107 const std::string& client_id = client_info.client_id;
106 DCHECK(client_id.empty() || base::IsValidGUID(client_id)); 108 DCHECK(client_id.empty() || base::IsValidGUID(client_id));
107 // backup client_id or reset to empty. 109 // backup client_id or reset to empty.
108 SetMetricsClientId(client_id); 110 SetMetricsClientId(client_id);
109 } 111 }
110 112
111 scoped_ptr< ::metrics::ClientInfo> CastMetricsServiceClient::LoadClientInfo() { 113 scoped_ptr< ::metrics::ClientInfo> CastMetricsServiceClient::LoadClientInfo() {
112 scoped_ptr< ::metrics::ClientInfo> client_info(new ::metrics::ClientInfo); 114 scoped_ptr< ::metrics::ClientInfo> client_info(new ::metrics::ClientInfo);
115 client_info_loaded_ = true;
113 116
114 // kMetricsIsNewClientID would be missing if either the device was just 117 // kMetricsIsNewClientID would be missing if either the device was just
115 // FDR'ed, or it is on pre-v1.2 build. 118 // FDR'ed, or it is on pre-v1.2 build.
116 if (!pref_service_->GetBoolean(prefs::kMetricsIsNewClientID)) { 119 if (!pref_service_->GetBoolean(prefs::kMetricsIsNewClientID)) {
117 // If the old client id exists, the device must be on pre-v1.2 build, 120 // If the old client id exists, the device must be on pre-v1.2 build,
118 // instead of just being FDR'ed. 121 // instead of just being FDR'ed.
119 if (!pref_service_->GetString(kMetricsOldClientID).empty()) { 122 if (!pref_service_->GetString(kMetricsOldClientID).empty()) {
120 // Force old client id to be regenerated. See b/9487011. 123 // Force old client id to be regenerated. See b/9487011.
121 client_info->client_id = base::GenerateGUID(); 124 client_info->client_id = base::GenerateGUID();
122 pref_service_->SetBoolean(prefs::kMetricsIsNewClientID, true); 125 pref_service_->SetBoolean(prefs::kMetricsIsNewClientID, true);
123 return client_info.Pass(); 126 return client_info.Pass();
124 } 127 }
125 // else the device was just FDR'ed, pass through. 128 // else the device was just FDR'ed, pass through.
126 } 129 }
127 130
128 const std::string client_id(GetPlatformClientID(cast_service_)); 131 if (!persisted_client_id_.empty() &&
129 if (!client_id.empty() && base::IsValidGUID(client_id)) { 132 base::IsValidGUID(persisted_client_id_)) {
130 client_info->client_id = client_id; 133 client_info->client_id = persisted_client_id_;
131 return client_info.Pass(); 134 return client_info.Pass();
132 } else { 135 } else {
byungchul 2015/08/19 21:11:20 no else after return.
gunsch 2015/08/19 21:23:12 Done.
133 if (client_id.empty()) { 136 if (persisted_client_id_.empty()) {
134 LOG(WARNING) << "Empty client id from platform," 137 LOG(WARNING) << "Empty client id from platform,"
135 << " assuming this is the first boot up of a new device."; 138 << " assuming this is the first boot up of a new device.";
136 } else { 139 } else {
137 LOG(ERROR) << "Invalid client id " << client_id << " from platform."; 140 LOG(ERROR) << "Invalid client id from platform: " << persisted_client_id_
141 << " from platform.";
138 } 142 }
139 return scoped_ptr< ::metrics::ClientInfo>(); 143 return scoped_ptr< ::metrics::ClientInfo>();
140 } 144 }
141 } 145 }
142 146
143 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() { 147 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() {
144 // Chromecast behaves as "off the record" w/r/t recording browsing state, 148 // Chromecast behaves as "off the record" w/r/t recording browsing state,
145 // but this value is about not disabling metrics because of it. 149 // but this value is about not disabling metrics because of it.
146 return false; 150 return false;
147 } 151 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 255 }
252 } 256 }
253 257
254 CastMetricsServiceClient::CastMetricsServiceClient( 258 CastMetricsServiceClient::CastMetricsServiceClient(
255 base::TaskRunner* io_task_runner, 259 base::TaskRunner* io_task_runner,
256 PrefService* pref_service, 260 PrefService* pref_service,
257 net::URLRequestContextGetter* request_context) 261 net::URLRequestContextGetter* request_context)
258 : io_task_runner_(io_task_runner), 262 : io_task_runner_(io_task_runner),
259 pref_service_(pref_service), 263 pref_service_(pref_service),
260 cast_service_(nullptr), 264 cast_service_(nullptr),
265 client_info_loaded_(false),
261 #if defined(OS_LINUX) 266 #if defined(OS_LINUX)
262 external_metrics_(nullptr), 267 external_metrics_(nullptr),
263 platform_metrics_(nullptr), 268 platform_metrics_(nullptr),
264 #endif // defined(OS_LINUX) 269 #endif // defined(OS_LINUX)
265 task_runner_(base::ThreadTaskRunnerHandle::Get()), 270 task_runner_(base::ThreadTaskRunnerHandle::Get()),
266 request_context_(request_context) { 271 request_context_(request_context) {
267 } 272 }
268 273
269 CastMetricsServiceClient::~CastMetricsServiceClient() { 274 CastMetricsServiceClient::~CastMetricsServiceClient() {
270 #if defined(OS_LINUX) 275 #if defined(OS_LINUX)
271 DCHECK(!external_metrics_); 276 DCHECK(!external_metrics_);
272 DCHECK(!platform_metrics_); 277 DCHECK(!platform_metrics_);
273 #endif // defined(OS_LINUX) 278 #endif // defined(OS_LINUX)
274 } 279 }
275 280
281 void CastMetricsServiceClient::SetPersistedClientId(
282 const std::string& client_id) {
283 DCHECK(!client_info_loaded_)
284 << "Persisted client ID must be set before client info is loaded.";
285 persisted_client_id_ = client_id;
286 }
287
276 void CastMetricsServiceClient::Initialize(CastService* cast_service) { 288 void CastMetricsServiceClient::Initialize(CastService* cast_service) {
277 DCHECK(cast_service); 289 DCHECK(cast_service);
278 DCHECK(!cast_service_); 290 DCHECK(!cast_service_);
279 cast_service_ = cast_service; 291 cast_service_ = cast_service;
280 292
281 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( 293 metrics_state_manager_ = ::metrics::MetricsStateManager::Create(
282 pref_service_, 294 pref_service_,
283 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, 295 base::Bind(&CastMetricsServiceClient::IsReportingEnabled,
284 base::Unretained(this)), 296 base::Unretained(this)),
285 base::Bind(&CastMetricsServiceClient::StoreClientInfo, 297 base::Bind(&CastMetricsServiceClient::StoreClientInfo,
(...skipping 22 matching lines...) Expand all
308 metrics_service_->RegisterMetricsProvider( 320 metrics_service_->RegisterMetricsProvider(
309 scoped_ptr< ::metrics::MetricsProvider>( 321 scoped_ptr< ::metrics::MetricsProvider>(
310 new ::metrics::GPUMetricsProvider)); 322 new ::metrics::GPUMetricsProvider));
311 } 323 }
312 metrics_service_->RegisterMetricsProvider( 324 metrics_service_->RegisterMetricsProvider(
313 scoped_ptr< ::metrics::MetricsProvider>( 325 scoped_ptr< ::metrics::MetricsProvider>(
314 new ::metrics::NetworkMetricsProvider(io_task_runner_))); 326 new ::metrics::NetworkMetricsProvider(io_task_runner_)));
315 metrics_service_->RegisterMetricsProvider( 327 metrics_service_->RegisterMetricsProvider(
316 scoped_ptr< ::metrics::MetricsProvider>( 328 scoped_ptr< ::metrics::MetricsProvider>(
317 new ::metrics::ProfilerMetricsProvider)); 329 new ::metrics::ProfilerMetricsProvider));
318 RegisterPlatformMetricsProviders(metrics_service_.get(), cast_service_); 330 shell::CastBrowserProcess::GetInstance()->browser_client()->
331 RegisterMetricsProviders(metrics_service_.get());
319 332
320 metrics_service_->InitializeMetricsRecordingState(); 333 metrics_service_->InitializeMetricsRecordingState();
321 #if !defined(OS_ANDROID) 334 #if !defined(OS_ANDROID)
322 // Reset clean_shutdown bit after InitializeMetricsRecordingState(). 335 // Reset clean_shutdown bit after InitializeMetricsRecordingState().
323 metrics_service_->LogNeedForCleanShutdown(); 336 metrics_service_->LogNeedForCleanShutdown();
324 #endif // !defined(OS_ANDROID) 337 #endif // !defined(OS_ANDROID)
325 338
326 if (IsReportingEnabled()) 339 if (IsReportingEnabled())
327 metrics_service_->Start(); 340 metrics_service_->Start();
328 341
(...skipping 26 matching lines...) Expand all
355 #endif // defined(OS_LINUX) 368 #endif // defined(OS_LINUX)
356 metrics_service_->Stop(); 369 metrics_service_->Stop();
357 } 370 }
358 371
359 bool CastMetricsServiceClient::IsReportingEnabled() { 372 bool CastMetricsServiceClient::IsReportingEnabled() {
360 return pref_service_->GetBoolean(prefs::kOptInStats); 373 return pref_service_->GetBoolean(prefs::kOptInStats);
361 } 374 }
362 375
363 } // namespace metrics 376 } // namespace metrics
364 } // namespace chromecast 377 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698