Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3930)

Unified Diff: blimp/engine/app/blimp_metrics_service_client.cc

Issue 1945393002: Create and integrate a metrics service client into Blimp engine. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Follow up on comments. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: blimp/engine/app/blimp_metrics_service_client.cc
diff --git a/blimp/engine/app/blimp_metrics_service_client.cc b/blimp/engine/app/blimp_metrics_service_client.cc
new file mode 100644
index 0000000000000000000000000000000000000000..20db13dee244073695d7bdd7c555ffa2578a627e
--- /dev/null
+++ b/blimp/engine/app/blimp_metrics_service_client.cc
@@ -0,0 +1,167 @@
+// Copyright 2016 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 "blimp/engine/app/blimp_metrics_service_client.h"
+
+#include "base/bind.h"
+#include "base/i18n/rtl.h"
+#include "base/lazy_instance.h"
+#include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "components/metrics/call_stack_profile_metrics_provider.h"
+#include "components/metrics/gpu/gpu_metrics_provider.h"
+#include "components/metrics/metrics_service.h"
+#include "components/metrics/metrics_service_client.h"
+#include "components/metrics/metrics_state_manager.h"
+#include "components/metrics/net/net_metrics_log_uploader.h"
+#include "components/metrics/profiler/profiler_metrics_provider.h"
+#include "components/metrics/ui/screen_info_metrics_provider.h"
+#include "components/metrics/url_constants.h"
+#include "components/prefs/pref_service.h"
+#include "components/version_info/version_info.h"
+#include "content/public/browser/browser_thread.h"
+#include "net/url_request/url_request_context_getter.h"
+
+namespace blimp {
+namespace engine {
+namespace {
+
+// How often after initial logging metrics results should be uploaded to the
+// metrics service.
+const int kStandardUploadIntervalMinutes = 30;
+
+// Returns if the MetricsService should be recording metrics information for
+// the client. Always true.
+// This callback is required by MetricsStateManager::Create.
+bool IsReportingEnabled() {
+ return true;
+}
+
+// Store/LoadClientInfo allows Windows Chrome to back up ClientInfo.
+// Both are no-ops for Blimp.
+// These callbacks are required by MetricsStateManager::Create.
+void StoreClientInfo(const metrics::ClientInfo& client_info) {}
+
+std::unique_ptr<metrics::ClientInfo> LoadClientInfo() {
+ return nullptr;
+}
+
+} // namespace
+
+BlimpMetricsServiceClient::BlimpMetricsServiceClient(
+ PrefService* pref_service,
+ scoped_refptr<net::URLRequestContextGetter> request_context_getter) {
+ request_context_getter_ = request_context_getter;
+
+ metrics_state_manager_ = metrics::MetricsStateManager::Create(
+ pref_service, base::Bind(&IsReportingEnabled),
+ base::Bind(&StoreClientInfo), base::Bind(&LoadClientInfo));
+
+ // Metrics state manager created while other class instances exist.
+ // Sign of multiple initializations.
+ DCHECK(metrics_state_manager_);
+
+ metrics_service_.reset(new metrics::MetricsService(
+ metrics_state_manager_.get(), this, pref_service));
+ metrics_service_->RegisterMetricsProvider(
+ base::WrapUnique<metrics::MetricsProvider>(
+ new metrics::NetworkMetricsProvider(
+ content::BrowserThread::GetBlockingPool())));
+ metrics_service_->RegisterMetricsProvider(
+ base::WrapUnique<metrics::MetricsProvider>(
+ new metrics::GPUMetricsProvider));
+ metrics_service_->RegisterMetricsProvider(
+ base::WrapUnique<metrics::MetricsProvider>(
+ new metrics::ScreenInfoMetricsProvider));
+ metrics_service_->RegisterMetricsProvider(
+ base::WrapUnique<metrics::MetricsProvider>(
+ new metrics::ProfilerMetricsProvider()));
+ metrics_service_->RegisterMetricsProvider(
+ base::WrapUnique<metrics::MetricsProvider>(
+ new metrics::CallStackProfileMetricsProvider));
+ metrics_service_->InitializeMetricsRecordingState();
+ if (IsReportingEnabled())
+ metrics_service_->Start();
+}
+
+BlimpMetricsServiceClient::~BlimpMetricsServiceClient() {}
+
+metrics::MetricsService* BlimpMetricsServiceClient::GetMetricsService() {
+ return metrics_service_.get();
+}
+
+// In Chrome, UMA and Breakpad are enabled/disabled together by the same
+// checkbox and they share the same client ID (a.k.a. GUID).
+// This is not required by Blimp, so these are no-ops.
+void BlimpMetricsServiceClient::SetMetricsClientId(
+ const std::string& client_id) {}
+
+// Recording can not be disabled in Blimp, so this function is a no-op.
+void BlimpMetricsServiceClient::OnRecordingDisabled() {}
+
+bool BlimpMetricsServiceClient::IsOffTheRecordSessionActive() {
+ // Blimp does not have incognito mode.
+ return false;
+}
+
+int32_t BlimpMetricsServiceClient::GetProduct() {
+ // Indicates product family (e.g. Chrome v Android Webview), not reported
+ // platform (e.g. Chrome_Linux, Chrome_Mac).
+ return metrics::ChromeUserMetricsExtension::CHROME;
+}
+
+std::string BlimpMetricsServiceClient::GetApplicationLocale() {
+ return base::i18n::GetConfiguredLocale();
+}
+
+bool BlimpMetricsServiceClient::GetBrand(std::string* brand_code) {
+ // Blimp doesn't use brand codes.
+ return false;
+}
+
+metrics::SystemProfileProto::Channel BlimpMetricsServiceClient::GetChannel() {
+ // Blimp engine does not have channel info yet.
+ return metrics::SystemProfileProto::CHANNEL_UNKNOWN;
+}
+
+std::string BlimpMetricsServiceClient::GetVersionString() {
+ return version_info::GetVersionNumber();
+}
+
+void BlimpMetricsServiceClient::OnLogUploadComplete() {}
+
+void BlimpMetricsServiceClient::InitializeSystemProfileMetrics(
+ const base::Closure& done_callback) {
+ // Blimp requires no additional work to InitializeSystemProfileMetrics
+ // and should proceed to the next call in the chain.
+ done_callback.Run();
+}
+
+void BlimpMetricsServiceClient::CollectFinalMetricsForLog(
+ const base::Closure& done_callback) {
+ // Blimp requires no additional work to CollectFinalMetricsForLog
+ // and should proceed to the next call in the chain
+ done_callback.Run();
+}
+
+std::unique_ptr<metrics::MetricsLogUploader>
+BlimpMetricsServiceClient::CreateUploader(
+ const base::Callback<void(int)>& on_upload_complete) {
+ return base::WrapUnique<metrics::MetricsLogUploader>(
+ new metrics::NetMetricsLogUploader(
+ request_context_getter_.get(), metrics::kDefaultMetricsServerUrl,
+ metrics::kDefaultMetricsMimeType, on_upload_complete));
+}
+
+base::TimeDelta BlimpMetricsServiceClient::GetStandardUploadInterval() {
+ return base::TimeDelta::FromMinutes(kStandardUploadIntervalMinutes);
+}
+
+metrics::MetricsServiceClient::EnableMetricsDefault
+BlimpMetricsServiceClient::GetDefaultOptIn() {
+ return OPT_IN;
+}
+
+} // namespace engine
+} // namespace blimp
« no previous file with comments | « blimp/engine/app/blimp_metrics_service_client.h ('k') | blimp/engine/app/blimp_metrics_service_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698