Home | History | Annotate | Download | only in metrics
      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