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 21 namespace chromecast { 22 namespace metrics { 23 24 namespace { 25 26 void StoreClientInfo(const ::metrics::ClientInfo& client_info) { 27 } 28 29 scoped_ptr<::metrics::ClientInfo> LoadClientInfo() { 30 return scoped_ptr<::metrics::ClientInfo>(); 31 } 32 33 } // namespace 34 35 // static 36 CastMetricsServiceClient* 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 45 void CastMetricsServiceClient::SetMetricsClientId( 46 const std::string& client_id) { 47 LOG(INFO) << "Metrics client ID set: " << client_id; 48 PlatformSetClientID(client_id); 49 } 50 51 bool 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 57 std::string CastMetricsServiceClient::GetApplicationLocale() { 58 return base::i18n::GetConfiguredLocale(); 59 } 60 61 bool CastMetricsServiceClient::GetBrand(std::string* brand_code) { 62 return false; 63 } 64 65 ::metrics::SystemProfileProto::Channel CastMetricsServiceClient::GetChannel() { 66 return GetPlatformReleaseChannel(); 67 } 68 69 std::string CastMetricsServiceClient::GetVersionString() { 70 return GetPlatformVersionString(); 71 } 72 73 void CastMetricsServiceClient::OnLogUploadComplete() { 74 PlatformOnLogUploadComplete(); 75 } 76 77 void CastMetricsServiceClient::StartGatheringMetrics( 78 const base::Closure& done_callback) { 79 done_callback.Run(); 80 } 81 82 void CastMetricsServiceClient::CollectFinalMetrics( 83 const base::Closure& done_callback) { 84 done_callback.Run(); 85 } 86 87 scoped_ptr< ::metrics::MetricsLogUploader> 88 CastMetricsServiceClient::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 107 void CastMetricsServiceClient::EnableMetricsService(bool enabled) { 108 if (enabled) { 109 metrics_service_->Start(); 110 } else { 111 metrics_service_->Stop(); 112 } 113 } 114 115 CastMetricsServiceClient::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 156 CastMetricsServiceClient::~CastMetricsServiceClient() { 157 } 158 159 bool CastMetricsServiceClient::IsReportingEnabled() { 160 return PlatformIsReportingEnabled(); 161 } 162 163 } // namespace metrics 164 } // namespace chromecast 165