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

Side by Side Diff: blimp/engine/app/blimp_metrics_service_client.cc

Issue 1885673003: Create and integrate a metrics service client into Blimp engine. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding //net to app_metrics. 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 "blimp/engine/app/blimp_metrics_service_client.h"
6
7 #include "base/bind.h"
8 #include "base/i18n/rtl.h"
9 #include "base/lazy_instance.h"
10 #include "base/memory/ptr_util.h"
11 #include "base/memory/ref_counted.h"
12 #include "components/metrics/call_stack_profile_metrics_provider.h"
13 #include "components/metrics/gpu/gpu_metrics_provider.h"
14 #include "components/metrics/metrics_service.h"
15 #include "components/metrics/metrics_service_client.h"
16 #include "components/metrics/metrics_state_manager.h"
17 #include "components/metrics/net/net_metrics_log_uploader.h"
18 #include "components/metrics/profiler/profiler_metrics_provider.h"
19 #include "components/metrics/ui/screen_info_metrics_provider.h"
20 #include "components/metrics/url_constants.h"
21 #include "components/prefs/pref_service.h"
22 #include "content/public/browser/browser_thread.h"
23 #include "net/url_request/url_request_context_getter.h"
24
25 namespace blimp {
26 namespace engine {
27
28 // BlimpMetricsServiceClient provides a singleton implementation of
29 // MetricsServiceClient tailored for the Blimp engine.
30 // Metrics are always turned on.
31 class BlimpMetricsServiceClient : public metrics::MetricsServiceClient {
32 public:
33 BlimpMetricsServiceClient();
34 ~BlimpMetricsServiceClient() override;
35
36 // The request_context_getter is a system request context that must remain
37 // valid for the client lifetime.
38 void Initialize(
39 std::unique_ptr<PrefService> pref_service,
40 scoped_refptr<net::URLRequestContextGetter> request_context_getter);
41 void Finalize();
42
43 // metrics::MetricsServiceClient implementation.
44 metrics::MetricsService* GetMetricsService() override;
45 void SetMetricsClientId(const std::string& client_id) override;
46 void OnRecordingDisabled() override;
47 bool IsOffTheRecordSessionActive() override;
48 int32_t GetProduct() override;
49 std::string GetApplicationLocale() override;
50 bool GetBrand(std::string* brand_code) override;
51 metrics::SystemProfileProto::Channel GetChannel() override;
52 std::string GetVersionString() override;
53 void OnLogUploadComplete() override;
54 void InitializeSystemProfileMetrics(
55 const base::Closure& done_callback) override;
56 void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
57 std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
58 const base::Callback<void(int)>& on_upload_complete) override;
59 base::TimeDelta GetStandardUploadInterval() override;
60 metrics::MetricsServiceClient::EnableMetricsDefault GetDefaultOptIn()
61 override;
62
63 private:
64 // Used by NetMetricsLogUploader to create log-upload requests.
65 scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
66 std::unique_ptr<metrics::MetricsStateManager> metrics_state_manager_;
67 std::unique_ptr<metrics::MetricsService> metrics_service_;
68
69 DISALLOW_COPY_AND_ASSIGN(BlimpMetricsServiceClient);
70 };
71
72 namespace {
73
74 // How often after initial logging metrics results should be uploaded to the
75 // metrics service.
76 const int kStandardUploadIntervalMinutes = 30;
77
78 base::LazyInstance<BlimpMetricsServiceClient>::Leaky g_lazy_instance_;
79
80 // Returns if the MetricsService should be recording metrics information for
81 // the client.
82 // This callback required by MetricsStateManager::Create.
Kevin M 2016/05/02 21:50:52 is required
Jess 2016/05/02 23:00:23 Done.
83 bool IsReportingEnabled() {
84 return true;
85 }
86
87 // Store/LoadClientInfo allows Windows Chrome to back up ClientInfo.
88 // Both are no-ops for Blimp.
89 // These callbacks are required by MetricsStateManager::Create.
90 void StoreClientInfo(const metrics::ClientInfo& client_info) {}
91
92 std::unique_ptr<metrics::ClientInfo> LoadClientInfo() {
93 return nullptr;
94 }
95
96 } // namespace
97
98 void BlimpMetricsServiceClient::Initialize(
99 std::unique_ptr<PrefService> pref_service,
100 scoped_refptr<net::URLRequestContextGetter> request_context_getter) {
101 request_context_getter_ = request_context_getter;
102
103 metrics_state_manager_ = metrics::MetricsStateManager::Create(
104 pref_service.get(), base::Bind(&IsReportingEnabled),
105 base::Bind(&StoreClientInfo), base::Bind(&LoadClientInfo));
106
107 metrics_service_.reset(new metrics::MetricsService(
108 metrics_state_manager_.get(), this, pref_service.get()));
109
110 metrics_service_->RegisterMetricsProvider(
111 base::WrapUnique<metrics::MetricsProvider>(
112 new metrics::NetworkMetricsProvider(
113 content::BrowserThread::GetBlockingPool())));
114
115 metrics_service_->RegisterMetricsProvider(
116 base::WrapUnique<metrics::MetricsProvider>(
117 new metrics::GPUMetricsProvider));
118
119 metrics_service_->RegisterMetricsProvider(
120 base::WrapUnique<metrics::MetricsProvider>(
121 new metrics::ScreenInfoMetricsProvider));
122
123 metrics_service_->RegisterMetricsProvider(
124 base::WrapUnique<metrics::MetricsProvider>(
125 new metrics::ProfilerMetricsProvider()));
126
127 metrics_service_->RegisterMetricsProvider(
128 base::WrapUnique<metrics::MetricsProvider>(
129 new metrics::CallStackProfileMetricsProvider));
130
131 metrics_service_->InitializeMetricsRecordingState();
132
133 if (IsReportingEnabled())
134 metrics_service_->Start();
135 }
136
137 void BlimpMetricsServiceClient::Finalize() {
138 metrics_service_->Stop();
139 }
140
141 metrics::MetricsService* BlimpMetricsServiceClient::GetMetricsService() {
142 return metrics_service_.get();
143 }
144
145 // In Chrome, UMA and Breakpad are enabled/disabled together by the same
146 // checkbox and they share the same client ID (a.k.a. GUID).
147 // This is not required by Blimp, so these are no-ops.
148 void BlimpMetricsServiceClient::SetMetricsClientId(
149 const std::string& client_id) {}
150
151 // Recording can not be disabled in Blimp, so this function is a no-op.
152 void BlimpMetricsServiceClient::OnRecordingDisabled() {}
153
154 bool BlimpMetricsServiceClient::IsOffTheRecordSessionActive() {
155 // Blimp does not have incognito mode.
156 return false;
157 }
158
159 int32_t BlimpMetricsServiceClient::GetProduct() {
160 // Indicates product family (e.g. Chrome v Android Webview), not reported
161 // platform (e.g. Chrome_Linux, Chrome_Mac).
162 return metrics::ChromeUserMetricsExtension::CHROME;
163 }
164
165 std::string BlimpMetricsServiceClient::GetApplicationLocale() {
166 return base::i18n::GetConfiguredLocale();
167 }
168
169 bool BlimpMetricsServiceClient::GetBrand(std::string* brand_code) {
170 // Blimp doesn't use brand codes.
171 return false;
172 }
173
174 metrics::SystemProfileProto::Channel BlimpMetricsServiceClient::GetChannel() {
175 // Blimp engine does not have channel info yet.
176 return metrics::SystemProfileProto::CHANNEL_UNKNOWN;
177 }
178
179 std::string BlimpMetricsServiceClient::GetVersionString() {
180 // TODO(jessicag): Add in a meaningful version string.
181 return std::string();
182 }
183
184 void BlimpMetricsServiceClient::OnLogUploadComplete() {}
185
186 void BlimpMetricsServiceClient::InitializeSystemProfileMetrics(
187 const base::Closure& done_callback) {
188 // Blimp requires no additional work to InitializeSystemProfileMetrics
189 // and should proceed to the next call in the chain.
190 done_callback.Run();
191 }
192
193 void BlimpMetricsServiceClient::CollectFinalMetricsForLog(
194 const base::Closure& done_callback) {
195 // Blimp requires no additional work to CollectFinalMetricsForLog
196 // and should proceed to the next call in the chain
197 done_callback.Run();
198 }
199
200 std::unique_ptr<metrics::MetricsLogUploader>
201 BlimpMetricsServiceClient::CreateUploader(
202 const base::Callback<void(int)>& on_upload_complete) {
203 return base::WrapUnique<metrics::MetricsLogUploader>(
204 new metrics::NetMetricsLogUploader(
205 request_context_getter_.get(), metrics::kDefaultMetricsServerUrl,
206 metrics::kDefaultMetricsMimeType, on_upload_complete));
207 }
208
209 base::TimeDelta BlimpMetricsServiceClient::GetStandardUploadInterval() {
210 return base::TimeDelta::FromMinutes(kStandardUploadIntervalMinutes);
211 }
212
213 metrics::MetricsServiceClient::EnableMetricsDefault
214 BlimpMetricsServiceClient::GetDefaultOptIn() {
215 return OPT_IN;
216 }
217
218 BlimpMetricsServiceClient::BlimpMetricsServiceClient() {}
219
220 BlimpMetricsServiceClient::~BlimpMetricsServiceClient() {}
221
222 BlimpMetricsServiceClient* GetBlimpMetricsServiceClientInstance() {
223 return g_lazy_instance_.Pointer();
224 }
225
226 void InitializeBlimpMetrics(
227 std::unique_ptr<PrefService> pref_service,
228 scoped_refptr<net::URLRequestContextGetter> request_context_getter) {
229 GetBlimpMetricsServiceClientInstance()->Initialize(std::move(pref_service),
230 request_context_getter);
231 }
232
233 void FinalizeBlimpMetrics() {
234 GetBlimpMetricsServiceClientInstance()->Finalize();
235 }
236
237 } // namespace engine
238 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698