| OLD | NEW |
| 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/pref_names.h" | 18 #include "chromecast/base/pref_names.h" |
| 19 #include "chromecast/base/version.h" | 19 #include "chromecast/base/version.h" |
| 20 #include "chromecast/browser/cast_browser_process.h" |
| 21 #include "chromecast/browser/cast_content_browser_client.h" |
| 20 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" | 22 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" |
| 21 #include "chromecast/browser/metrics/platform_metrics_providers.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" |
| 31 #include "components/metrics/url_constants.h" | 32 #include "components/metrics/url_constants.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 // Use "forced" client ID if available. |
| 129 if (!client_id.empty() && base::IsValidGUID(client_id)) { | 132 if (!force_client_id_.empty() && base::IsValidGUID(force_client_id_)) { |
| 130 client_info->client_id = client_id; | 133 client_info->client_id = force_client_id_; |
| 131 return client_info.Pass(); | 134 return client_info.Pass(); |
| 135 } |
| 136 |
| 137 if (force_client_id_.empty()) { |
| 138 LOG(WARNING) << "Empty client id from platform," |
| 139 << " assuming this is the first boot up of a new device."; |
| 132 } else { | 140 } else { |
| 133 if (client_id.empty()) { | 141 LOG(ERROR) << "Invalid client id from platform: " << force_client_id_ |
| 134 LOG(WARNING) << "Empty client id from platform," | 142 << " from platform."; |
| 135 << " assuming this is the first boot up of a new device."; | |
| 136 } else { | |
| 137 LOG(ERROR) << "Invalid client id " << client_id << " from platform."; | |
| 138 } | |
| 139 return scoped_ptr< ::metrics::ClientInfo>(); | |
| 140 } | 143 } |
| 144 return scoped_ptr< ::metrics::ClientInfo>(); |
| 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 } |
| 148 | 152 |
| 149 int32_t CastMetricsServiceClient::GetProduct() { | 153 int32_t CastMetricsServiceClient::GetProduct() { |
| 150 // Chromecast currently uses the same product identifier as Chrome. | 154 // Chromecast currently uses the same product identifier as Chrome. |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 |
| 276 void CastMetricsServiceClient::OnApplicationNotIdle() { | 281 void CastMetricsServiceClient::OnApplicationNotIdle() { |
| 277 metrics_service_->OnApplicationNotIdle(); | 282 metrics_service_->OnApplicationNotIdle(); |
| 278 } | 283 } |
| 279 | 284 |
| 285 void CastMetricsServiceClient::SetForceClientId( |
| 286 const std::string& client_id) { |
| 287 DCHECK(force_client_id_.empty()); |
| 288 DCHECK(!client_info_loaded_) |
| 289 << "Force client ID must be set before client info is loaded."; |
| 290 force_client_id_ = client_id; |
| 291 } |
| 292 |
| 280 void CastMetricsServiceClient::Initialize(CastService* cast_service) { | 293 void CastMetricsServiceClient::Initialize(CastService* cast_service) { |
| 281 DCHECK(cast_service); | 294 DCHECK(cast_service); |
| 282 DCHECK(!cast_service_); | 295 DCHECK(!cast_service_); |
| 283 cast_service_ = cast_service; | 296 cast_service_ = cast_service; |
| 284 | 297 |
| 285 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( | 298 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( |
| 286 pref_service_, | 299 pref_service_, |
| 287 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, | 300 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, |
| 288 base::Unretained(this)), | 301 base::Unretained(this)), |
| 289 base::Bind(&CastMetricsServiceClient::StoreClientInfo, | 302 base::Bind(&CastMetricsServiceClient::StoreClientInfo, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 312 metrics_service_->RegisterMetricsProvider( | 325 metrics_service_->RegisterMetricsProvider( |
| 313 scoped_ptr< ::metrics::MetricsProvider>( | 326 scoped_ptr< ::metrics::MetricsProvider>( |
| 314 new ::metrics::GPUMetricsProvider)); | 327 new ::metrics::GPUMetricsProvider)); |
| 315 } | 328 } |
| 316 metrics_service_->RegisterMetricsProvider( | 329 metrics_service_->RegisterMetricsProvider( |
| 317 scoped_ptr< ::metrics::MetricsProvider>( | 330 scoped_ptr< ::metrics::MetricsProvider>( |
| 318 new ::metrics::NetworkMetricsProvider(io_task_runner_))); | 331 new ::metrics::NetworkMetricsProvider(io_task_runner_))); |
| 319 metrics_service_->RegisterMetricsProvider( | 332 metrics_service_->RegisterMetricsProvider( |
| 320 scoped_ptr< ::metrics::MetricsProvider>( | 333 scoped_ptr< ::metrics::MetricsProvider>( |
| 321 new ::metrics::ProfilerMetricsProvider)); | 334 new ::metrics::ProfilerMetricsProvider)); |
| 322 RegisterPlatformMetricsProviders(metrics_service_.get(), cast_service_); | 335 shell::CastBrowserProcess::GetInstance()->browser_client()-> |
| 336 RegisterMetricsProviders(metrics_service_.get()); |
| 323 | 337 |
| 324 metrics_service_->InitializeMetricsRecordingState(); | 338 metrics_service_->InitializeMetricsRecordingState(); |
| 325 #if !defined(OS_ANDROID) | 339 #if !defined(OS_ANDROID) |
| 326 // Reset clean_shutdown bit after InitializeMetricsRecordingState(). | 340 // Reset clean_shutdown bit after InitializeMetricsRecordingState(). |
| 327 metrics_service_->LogNeedForCleanShutdown(); | 341 metrics_service_->LogNeedForCleanShutdown(); |
| 328 #endif // !defined(OS_ANDROID) | 342 #endif // !defined(OS_ANDROID) |
| 329 | 343 |
| 330 if (IsReportingEnabled()) | 344 if (IsReportingEnabled()) |
| 331 metrics_service_->Start(); | 345 metrics_service_->Start(); |
| 332 | 346 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 359 #endif // defined(OS_LINUX) | 373 #endif // defined(OS_LINUX) |
| 360 metrics_service_->Stop(); | 374 metrics_service_->Stop(); |
| 361 } | 375 } |
| 362 | 376 |
| 363 bool CastMetricsServiceClient::IsReportingEnabled() { | 377 bool CastMetricsServiceClient::IsReportingEnabled() { |
| 364 return pref_service_->GetBoolean(prefs::kOptInStats); | 378 return pref_service_->GetBoolean(prefs::kOptInStats); |
| 365 } | 379 } |
| 366 | 380 |
| 367 } // namespace metrics | 381 } // namespace metrics |
| 368 } // namespace chromecast | 382 } // namespace chromecast |
| OLD | NEW |