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 3// found in the LICENSE file. 4 5#include "chromecast/metrics/cast_metrics_service_client.h" 6 7#include "base/command_line.h" 8#include "base/i18n/rtl.h" 9#include "chromecast/common/chromecast_config.h" 10#include "chromecast/common/chromecast_switches.h" 11#include "chromecast/metrics/platform_metrics_providers.h" 12#include "components/metrics/client_info.h" 13#include "components/metrics/gpu/gpu_metrics_provider.h" 14#include "components/metrics/metrics_provider.h" 15#include "components/metrics/metrics_service.h" 16#include "components/metrics/metrics_state_manager.h" 17#include "components/metrics/net/net_metrics_log_uploader.h" 18#include "components/metrics/net/network_metrics_provider.h" 19#include "components/metrics/profiler/profiler_metrics_provider.h" 20 21namespace chromecast { 22namespace metrics { 23 24namespace { 25 26void StoreClientInfo(const ::metrics::ClientInfo& client_info) { 27} 28 29scoped_ptr<::metrics::ClientInfo> LoadClientInfo() { 30 return scoped_ptr<::metrics::ClientInfo>(); 31} 32 33} // namespace 34 35// static 36CastMetricsServiceClient* CastMetricsServiceClient::Create( 37 base::TaskRunner* io_task_runner, 38 PrefService* pref_service, 39 net::URLRequestContextGetter* request_context) { 40 return new CastMetricsServiceClient(io_task_runner, 41 pref_service, 42 request_context); 43} 44 45void CastMetricsServiceClient::SetMetricsClientId( 46 const std::string& client_id) { 47 LOG(INFO) << "Metrics client ID set: " << client_id; 48 PlatformSetClientID(client_id); 49} 50 51bool CastMetricsServiceClient::IsOffTheRecordSessionActive() { 52 // Chromecast behaves as "off the record" w/r/t recording browsing state, 53 // but this value is about not disabling metrics because of it. 54 return false; 55} 56 57std::string CastMetricsServiceClient::GetApplicationLocale() { 58 return base::i18n::GetConfiguredLocale(); 59} 60 61bool CastMetricsServiceClient::GetBrand(std::string* brand_code) { 62 return false; 63} 64 65::metrics::SystemProfileProto::Channel CastMetricsServiceClient::GetChannel() { 66 return GetPlatformReleaseChannel(); 67} 68 69std::string CastMetricsServiceClient::GetVersionString() { 70 return GetPlatformVersionString(); 71} 72 73void CastMetricsServiceClient::OnLogUploadComplete() { 74 PlatformOnLogUploadComplete(); 75} 76 77void CastMetricsServiceClient::StartGatheringMetrics( 78 const base::Closure& done_callback) { 79 done_callback.Run(); 80} 81 82void CastMetricsServiceClient::CollectFinalMetrics( 83 const base::Closure& done_callback) { 84 done_callback.Run(); 85} 86 87scoped_ptr< ::metrics::MetricsLogUploader> 88CastMetricsServiceClient::CreateUploader( 89 const std::string& server_url, 90 const std::string& mime_type, 91 const base::Callback<void(int)>& on_upload_complete) { 92 std::string uma_server_url(server_url); 93 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 94 if (command_line->HasSwitch(switches::kOverrideMetricsUploadUrl)) { 95 uma_server_url.assign( 96 command_line->GetSwitchValueASCII(switches::kOverrideMetricsUploadUrl)); 97 } 98 DCHECK(!uma_server_url.empty()); 99 return scoped_ptr< ::metrics::MetricsLogUploader>( 100 new ::metrics::NetMetricsLogUploader( 101 request_context_, 102 uma_server_url, 103 mime_type, 104 on_upload_complete)); 105} 106 107void CastMetricsServiceClient::EnableMetricsService(bool enabled) { 108 if (enabled) { 109 metrics_service_->Start(); 110 } else { 111 metrics_service_->Stop(); 112 } 113} 114 115CastMetricsServiceClient::CastMetricsServiceClient( 116 base::TaskRunner* io_task_runner, 117 PrefService* pref_service, 118 net::URLRequestContextGetter* request_context) 119 : metrics_state_manager_(::metrics::MetricsStateManager::Create( 120 pref_service, 121 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, 122 base::Unretained(this)), 123 base::Bind(&StoreClientInfo), 124 base::Bind(&LoadClientInfo))), 125 metrics_service_(new ::metrics::MetricsService( 126 metrics_state_manager_.get(), 127 this, 128 pref_service)), 129 request_context_(request_context) { 130 // Always create a client id as it may also be used by crash reporting, 131 // (indirectly) included in feedback, and can be queried during setup. 132 // For UMA and crash reporting, associated opt-in settings will control 133 // sending reports as directed by the user. 134 // For Setup (which also communicates the user's opt-in preferences), 135 // report the client-id and expect that setup will handle the current opt-in 136 // value. 137 metrics_state_manager_->ForceClientIdCreation(); 138 139 metrics_service_->RegisterMetricsProvider( 140 scoped_ptr< ::metrics::MetricsProvider>( 141 new ::metrics::GPUMetricsProvider)); 142 metrics_service_->RegisterMetricsProvider( 143 scoped_ptr< ::metrics::MetricsProvider>( 144 new NetworkMetricsProvider(io_task_runner))); 145 metrics_service_->RegisterMetricsProvider( 146 scoped_ptr< ::metrics::MetricsProvider>( 147 new ::metrics::ProfilerMetricsProvider)); 148 RegisterPlatformMetricsProviders(metrics_service_.get()); 149 150 metrics_service_->InitializeMetricsRecordingState(); 151 152 if (IsReportingEnabled()) 153 metrics_service_->Start(); 154} 155 156CastMetricsServiceClient::~CastMetricsServiceClient() { 157} 158 159bool CastMetricsServiceClient::IsReportingEnabled() { 160 return PlatformIsReportingEnabled(); 161} 162 163} // namespace metrics 164} // namespace chromecast 165