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
StoreClientInfo(const::metrics::ClientInfo & client_info)26 void StoreClientInfo(const ::metrics::ClientInfo& client_info) {
27 }
28
LoadClientInfo()29 scoped_ptr<::metrics::ClientInfo> LoadClientInfo() {
30 return scoped_ptr<::metrics::ClientInfo>();
31 }
32
33 } // namespace
34
35 // static
Create(base::TaskRunner * io_task_runner,PrefService * pref_service,net::URLRequestContextGetter * request_context)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
SetMetricsClientId(const std::string & client_id)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
IsOffTheRecordSessionActive()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
GetApplicationLocale()57 std::string CastMetricsServiceClient::GetApplicationLocale() {
58 return base::i18n::GetConfiguredLocale();
59 }
60
GetBrand(std::string * brand_code)61 bool CastMetricsServiceClient::GetBrand(std::string* brand_code) {
62 return false;
63 }
64
GetChannel()65 ::metrics::SystemProfileProto::Channel CastMetricsServiceClient::GetChannel() {
66 return GetPlatformReleaseChannel();
67 }
68
GetVersionString()69 std::string CastMetricsServiceClient::GetVersionString() {
70 return GetPlatformVersionString();
71 }
72
OnLogUploadComplete()73 void CastMetricsServiceClient::OnLogUploadComplete() {
74 PlatformOnLogUploadComplete();
75 }
76
StartGatheringMetrics(const base::Closure & done_callback)77 void CastMetricsServiceClient::StartGatheringMetrics(
78 const base::Closure& done_callback) {
79 done_callback.Run();
80 }
81
CollectFinalMetrics(const base::Closure & done_callback)82 void CastMetricsServiceClient::CollectFinalMetrics(
83 const base::Closure& done_callback) {
84 done_callback.Run();
85 }
86
87 scoped_ptr< ::metrics::MetricsLogUploader>
CreateUploader(const std::string & server_url,const std::string & mime_type,const base::Callback<void (int)> & on_upload_complete)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
EnableMetricsService(bool enabled)107 void CastMetricsServiceClient::EnableMetricsService(bool enabled) {
108 if (enabled) {
109 metrics_service_->Start();
110 } else {
111 metrics_service_->Stop();
112 }
113 }
114
CastMetricsServiceClient(base::TaskRunner * io_task_runner,PrefService * pref_service,net::URLRequestContextGetter * request_context)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
~CastMetricsServiceClient()156 CastMetricsServiceClient::~CastMetricsServiceClient() {
157 }
158
IsReportingEnabled()159 bool CastMetricsServiceClient::IsReportingEnabled() {
160 return PlatformIsReportingEnabled();
161 }
162
163 } // namespace metrics
164 } // namespace chromecast
165