• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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