| Index: ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc
|
| diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc
|
| deleted file mode 100644
|
| index e0b8216fd5cd91974dcc9dbd6115ee55c84918dc..0000000000000000000000000000000000000000
|
| --- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc
|
| +++ /dev/null
|
| @@ -1,320 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h"
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include <utility>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/command_line.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/process/process_metrics.h"
|
| -#include "base/rand_util.h"
|
| -#include "base/strings/string16.h"
|
| -#include "base/threading/platform_thread.h"
|
| -#include "components/crash/core/common/crash_keys.h"
|
| -#include "components/metrics/call_stack_profile_metrics_provider.h"
|
| -#include "components/metrics/drive_metrics_provider.h"
|
| -#include "components/metrics/metrics_pref_names.h"
|
| -#include "components/metrics/metrics_reporting_default_state.h"
|
| -#include "components/metrics/metrics_service.h"
|
| -#include "components/metrics/net/cellular_logic_helper.h"
|
| -#include "components/metrics/net/net_metrics_log_uploader.h"
|
| -#include "components/metrics/net/network_metrics_provider.h"
|
| -#include "components/metrics/net/version_utils.h"
|
| -#include "components/metrics/profiler/profiler_metrics_provider.h"
|
| -#include "components/metrics/profiler/tracking_synchronizer.h"
|
| -#include "components/metrics/stability_metrics_helper.h"
|
| -#include "components/metrics/ui/screen_info_metrics_provider.h"
|
| -#include "components/metrics/url_constants.h"
|
| -#include "components/omnibox/browser/omnibox_metrics_provider.h"
|
| -#include "components/prefs/pref_registry_simple.h"
|
| -#include "components/prefs/pref_service.h"
|
| -#include "components/signin/core/browser/signin_status_metrics_provider.h"
|
| -#include "components/sync/device_info/device_count_metrics_provider.h"
|
| -#include "components/translate/core/browser/translate_ranker_metrics_provider.h"
|
| -#include "components/variations/variations_associated_data.h"
|
| -#include "components/version_info/version_info.h"
|
| -#include "ios/chrome/browser/application_context.h"
|
| -#include "ios/chrome/browser/chrome_paths.h"
|
| -#include "ios/chrome/browser/google/google_brand.h"
|
| -#include "ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h"
|
| -#include "ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h"
|
| -#include "ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.h"
|
| -#include "ios/chrome/browser/sync/ios_chrome_sync_client.h"
|
| -#include "ios/chrome/browser/tab_parenting_global_observer.h"
|
| -#include "ios/chrome/browser/ui/browser_otr_state.h"
|
| -#include "ios/chrome/common/channel_info.h"
|
| -#include "ios/web/public/web_thread.h"
|
| -
|
| -IOSChromeMetricsServiceClient::IOSChromeMetricsServiceClient(
|
| - metrics::MetricsStateManager* state_manager)
|
| - : metrics_state_manager_(state_manager),
|
| - stability_metrics_provider_(nullptr),
|
| - profiler_metrics_provider_(nullptr),
|
| - drive_metrics_provider_(nullptr),
|
| - start_time_(base::TimeTicks::Now()),
|
| - has_uploaded_profiler_data_(false),
|
| - weak_ptr_factory_(this) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - RegisterForNotifications();
|
| -}
|
| -
|
| -IOSChromeMetricsServiceClient::~IOSChromeMetricsServiceClient() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -}
|
| -
|
| -// static
|
| -std::unique_ptr<IOSChromeMetricsServiceClient>
|
| -IOSChromeMetricsServiceClient::Create(
|
| - metrics::MetricsStateManager* state_manager) {
|
| - // Perform two-phase initialization so that |client->metrics_service_| only
|
| - // receives pointers to fully constructed objects.
|
| - std::unique_ptr<IOSChromeMetricsServiceClient> client(
|
| - new IOSChromeMetricsServiceClient(state_manager));
|
| - client->Initialize();
|
| -
|
| - return client;
|
| -}
|
| -
|
| -// static
|
| -void IOSChromeMetricsServiceClient::RegisterPrefs(
|
| - PrefRegistrySimple* registry) {
|
| - metrics::MetricsService::RegisterPrefs(registry);
|
| - metrics::StabilityMetricsHelper::RegisterPrefs(registry);
|
| - metrics::RegisterMetricsReportingStatePrefs(registry);
|
| -}
|
| -
|
| -metrics::MetricsService* IOSChromeMetricsServiceClient::GetMetricsService() {
|
| - return metrics_service_.get();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::SetMetricsClientId(
|
| - const std::string& client_id) {
|
| - crash_keys::SetMetricsClientIdFromGUID(client_id);
|
| -}
|
| -
|
| -int32_t IOSChromeMetricsServiceClient::GetProduct() {
|
| - return metrics::ChromeUserMetricsExtension::CHROME;
|
| -}
|
| -
|
| -std::string IOSChromeMetricsServiceClient::GetApplicationLocale() {
|
| - return GetApplicationContext()->GetApplicationLocale();
|
| -}
|
| -
|
| -bool IOSChromeMetricsServiceClient::GetBrand(std::string* brand_code) {
|
| - return ios::google_brand::GetBrand(brand_code);
|
| -}
|
| -
|
| -metrics::SystemProfileProto::Channel
|
| -IOSChromeMetricsServiceClient::GetChannel() {
|
| - return metrics::AsProtobufChannel(::GetChannel());
|
| -}
|
| -
|
| -std::string IOSChromeMetricsServiceClient::GetVersionString() {
|
| - return metrics::GetVersionString();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::OnLogUploadComplete() {}
|
| -
|
| -void IOSChromeMetricsServiceClient::InitializeSystemProfileMetrics(
|
| - const base::Closure& done_callback) {
|
| - finished_init_task_callback_ = done_callback;
|
| - drive_metrics_provider_->GetDriveMetrics(
|
| - base::Bind(&IOSChromeMetricsServiceClient::OnInitTaskGotDriveMetrics,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::CollectFinalMetricsForLog(
|
| - const base::Closure& done_callback) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - collect_final_metrics_done_callback_ = done_callback;
|
| -
|
| - if (ShouldIncludeProfilerDataInLog()) {
|
| - // Fetch profiler data. This will call into
|
| - // |FinishedReceivingProfilerData()| when the task completes.
|
| - metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously(
|
| - weak_ptr_factory_.GetWeakPtr());
|
| - } else {
|
| - CollectFinalHistograms();
|
| - }
|
| -}
|
| -
|
| -std::unique_ptr<metrics::MetricsLogUploader>
|
| -IOSChromeMetricsServiceClient::CreateUploader(
|
| - const base::Callback<void(int)>& on_upload_complete) {
|
| - return std::unique_ptr<metrics::MetricsLogUploader>(
|
| - new metrics::NetMetricsLogUploader(
|
| - GetApplicationContext()->GetSystemURLRequestContext(),
|
| - metrics::kDefaultMetricsServerUrl, metrics::kDefaultMetricsMimeType,
|
| - on_upload_complete));
|
| -}
|
| -
|
| -base::TimeDelta IOSChromeMetricsServiceClient::GetStandardUploadInterval() {
|
| - return metrics::GetUploadInterval();
|
| -}
|
| -
|
| -base::string16 IOSChromeMetricsServiceClient::GetRegistryBackupKey() {
|
| - return base::string16();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::OnRendererProcessCrash() {
|
| - stability_metrics_provider_->LogRendererCrash();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::WebStateDidStartLoading(
|
| - web::WebState* web_state) {
|
| - metrics_service_->OnApplicationNotIdle();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::WebStateDidStopLoading(
|
| - web::WebState* web_state) {
|
| - metrics_service_->OnApplicationNotIdle();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::Initialize() {
|
| - metrics_service_.reset(new metrics::MetricsService(
|
| - metrics_state_manager_, this, GetApplicationContext()->GetLocalState()));
|
| -
|
| - // Register metrics providers.
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - new metrics::NetworkMetricsProvider(
|
| - web::WebThread::GetBlockingPool())));
|
| -
|
| - // Currently, we configure OmniboxMetricsProvider to not log events to UMA
|
| - // if there is a single incognito session visible. In the future, it may
|
| - // be worth revisiting this to still log events from non-incognito sessions.
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider(
|
| - base::Bind(&::IsOffTheRecordSessionActive))));
|
| -
|
| - stability_metrics_provider_ = new IOSChromeStabilityMetricsProvider(
|
| - GetApplicationContext()->GetLocalState());
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(stability_metrics_provider_));
|
| -
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - new metrics::ScreenInfoMetricsProvider));
|
| -
|
| - drive_metrics_provider_ = new metrics::DriveMetricsProvider(
|
| - web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE),
|
| - ios::FILE_LOCAL_STATE);
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_));
|
| -
|
| - profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider(
|
| - base::Bind(&metrics::IsCellularLogicEnabled));
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_));
|
| -
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - new metrics::CallStackProfileMetricsProvider));
|
| -
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - SigninStatusMetricsProvider::CreateInstance(base::WrapUnique(
|
| - new IOSChromeSigninStatusMetricsProviderDelegate))));
|
| -
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - new MobileSessionShutdownMetricsProvider(metrics_service_.get())));
|
| -
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - new syncer::DeviceCountMetricsProvider(
|
| - base::Bind(&IOSChromeSyncClient::GetDeviceInfoTrackers))));
|
| -
|
| - metrics_service_->RegisterMetricsProvider(
|
| - std::unique_ptr<metrics::MetricsProvider>(
|
| - new translate::TranslateRankerMetricsProvider()));
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::OnInitTaskGotDriveMetrics() {
|
| - finished_init_task_callback_.Run();
|
| -}
|
| -
|
| -bool IOSChromeMetricsServiceClient::ShouldIncludeProfilerDataInLog() {
|
| - // Upload profiler data at most once per session.
|
| - if (has_uploaded_profiler_data_)
|
| - return false;
|
| -
|
| - // For each log, flip a fair coin. Thus, profiler data is sent with the first
|
| - // log with probability 50%, with the second log with probability 25%, and so
|
| - // on. As a result, uploaded data is biased toward earlier logs.
|
| - // TODO(isherman): Explore other possible algorithms, and choose one that
|
| - // might be more appropriate. For example, it might be reasonable to include
|
| - // profiler data with some fixed probability, so that a given client might
|
| - // upload profiler data more than once; but on average, clients won't upload
|
| - // too much data.
|
| - if (base::RandDouble() < 0.5)
|
| - return false;
|
| -
|
| - has_uploaded_profiler_data_ = true;
|
| - return true;
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::ReceivedProfilerData(
|
| - const metrics::ProfilerDataAttributes& attributes,
|
| - const tracked_objects::ProcessDataPhaseSnapshot& process_data_phase,
|
| - const metrics::ProfilerEvents& past_events) {
|
| - profiler_metrics_provider_->RecordProfilerData(
|
| - process_data_phase, attributes.process_id, attributes.process_type,
|
| - attributes.profiling_phase, attributes.phase_start - start_time_,
|
| - attributes.phase_finish - start_time_, past_events);
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::FinishedReceivingProfilerData() {
|
| - CollectFinalHistograms();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::CollectFinalHistograms() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - // TODO(ios): Try to extract the flow below into a utility function that is
|
| - // shared between the iOS port's usage and
|
| - // ChromeMetricsServiceClient::CollectFinalHistograms()'s usage of
|
| - // MetricsMemoryDetails.
|
| - std::unique_ptr<base::ProcessMetrics> process_metrics(
|
| - base::ProcessMetrics::CreateProcessMetrics(
|
| - base::GetCurrentProcessHandle()));
|
| - UMA_HISTOGRAM_MEMORY_KB("Memory.Browser",
|
| - process_metrics->GetWorkingSetSize() / 1024);
|
| - collect_final_metrics_done_callback_.Run();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::RegisterForNotifications() {
|
| - tab_parented_subscription_ =
|
| - TabParentingGlobalObserver::GetInstance()->RegisterCallback(
|
| - base::Bind(&IOSChromeMetricsServiceClient::OnTabParented,
|
| - base::Unretained(this)));
|
| - omnibox_url_opened_subscription_ =
|
| - OmniboxEventGlobalTracker::GetInstance()->RegisterCallback(
|
| - base::Bind(&IOSChromeMetricsServiceClient::OnURLOpenedFromOmnibox,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::OnTabParented(web::WebState* web_state) {
|
| - metrics_service_->OnApplicationNotIdle();
|
| -}
|
| -
|
| -void IOSChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) {
|
| - metrics_service_->OnApplicationNotIdle();
|
| -}
|
| -
|
| -metrics::EnableMetricsDefault
|
| -IOSChromeMetricsServiceClient::GetMetricsReportingDefaultState() {
|
| - return metrics::GetMetricsReportingDefaultState(
|
| - GetApplicationContext()->GetLocalState());
|
| -}
|
|
|