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

Side by Side Diff: components/metrics/metrics_service_unittest.cc

Issue 558653002: Allow MetricsProviders to request an initial stability log. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Address Alexei's comments, round deux. Created 6 years, 3 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
« no previous file with comments | « components/metrics/metrics_service.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/metrics/metrics_service.h" 5 #include "components/metrics/metrics_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 14 matching lines...) Expand all
25 25
26 using metrics::MetricsLogManager; 26 using metrics::MetricsLogManager;
27 27
28 void StoreNoClientInfoBackup(const metrics::ClientInfo& /* client_info */) { 28 void StoreNoClientInfoBackup(const metrics::ClientInfo& /* client_info */) {
29 } 29 }
30 30
31 scoped_ptr<metrics::ClientInfo> ReturnNoBackup() { 31 scoped_ptr<metrics::ClientInfo> ReturnNoBackup() {
32 return scoped_ptr<metrics::ClientInfo>(); 32 return scoped_ptr<metrics::ClientInfo>();
33 } 33 }
34 34
35 class TestMetricsProvider : public metrics::MetricsProvider {
36 public:
37 explicit TestMetricsProvider(bool has_stability_metrics) :
38 has_stability_metrics_(has_stability_metrics),
39 provide_stability_metrics_called_(false) {
40 }
41
42 virtual bool HasStabilityMetrics() OVERRIDE { return has_stability_metrics_; }
43 virtual void ProvideStabilityMetrics(
44 metrics::SystemProfileProto* system_profile_proto) OVERRIDE {
45 provide_stability_metrics_called_ = true;
46 }
47
48 bool provide_stability_metrics_called() const {
49 return provide_stability_metrics_called_;
50 }
51
52 private:
53 bool has_stability_metrics_;
54 bool provide_stability_metrics_called_;
55
56 DISALLOW_COPY_AND_ASSIGN(TestMetricsProvider);
57 };
58
35 class TestMetricsService : public MetricsService { 59 class TestMetricsService : public MetricsService {
36 public: 60 public:
37 TestMetricsService(metrics::MetricsStateManager* state_manager, 61 TestMetricsService(metrics::MetricsStateManager* state_manager,
38 metrics::MetricsServiceClient* client, 62 metrics::MetricsServiceClient* client,
39 PrefService* local_state) 63 PrefService* local_state)
40 : MetricsService(state_manager, client, local_state) {} 64 : MetricsService(state_manager, client, local_state) {}
41 virtual ~TestMetricsService() {} 65 virtual ~TestMetricsService() {}
42 66
43 using MetricsService::log_manager; 67 using MetricsService::log_manager;
44 68
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 172
149 } // namespace 173 } // namespace
150 174
151 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { 175 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) {
152 EnableMetricsReporting(); 176 EnableMetricsReporting();
153 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true); 177 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true);
154 178
155 metrics::TestMetricsServiceClient client; 179 metrics::TestMetricsServiceClient client;
156 TestMetricsService service( 180 TestMetricsService service(
157 GetMetricsStateManager(), &client, GetLocalState()); 181 GetMetricsStateManager(), &client, GetLocalState());
182
183 TestMetricsProvider* test_provider = new TestMetricsProvider(false);
184 service.RegisterMetricsProvider(
185 scoped_ptr<metrics::MetricsProvider>(test_provider));
186
158 service.InitializeMetricsRecordingState(); 187 service.InitializeMetricsRecordingState();
159 // No initial stability log should be generated. 188 // No initial stability log should be generated.
160 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); 189 EXPECT_FALSE(service.log_manager()->has_unsent_logs());
161 EXPECT_FALSE(service.log_manager()->has_staged_log()); 190 EXPECT_FALSE(service.log_manager()->has_staged_log());
191
192 // The test provider should not have been called upon to provide stability
193 // metrics.
194 EXPECT_FALSE(test_provider->provide_stability_metrics_called());
195 }
196
197 TEST_F(MetricsServiceTest, InitialStabilityLogAtProviderRequest) {
198 EnableMetricsReporting();
199
200 // Save an existing system profile to prefs, to correspond to what would be
201 // saved from a previous session.
202 metrics::TestMetricsServiceClient client;
203 TestMetricsLog log("client", 1, &client, GetLocalState());
204 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(),
205 std::vector<variations::ActiveGroupId>(),
206 0);
207
208 // Record stability build time and version from previous session, so that
209 // stability metrics (including exited cleanly flag) won't be cleared.
210 GetLocalState()->SetInt64(metrics::prefs::kStabilityStatsBuildTime,
211 MetricsLog::GetBuildTime());
212 GetLocalState()->SetString(metrics::prefs::kStabilityStatsVersion,
213 client.GetVersionString());
214
215 // Set the clean exit flag, as that will otherwise cause a stabilty
216 // log to be produced, irrespective provider requests.
217 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true);
218
219 TestMetricsService service(
220 GetMetricsStateManager(), &client, GetLocalState());
221 // Add a metrics provider that requests a stability log.
222 TestMetricsProvider* test_provider = new TestMetricsProvider(true);
223 service.RegisterMetricsProvider(
224 scoped_ptr<metrics::MetricsProvider>(test_provider));
225
226 service.InitializeMetricsRecordingState();
227
228 // The initial stability log should be generated and persisted in unsent logs.
229 MetricsLogManager* log_manager = service.log_manager();
230 EXPECT_TRUE(log_manager->has_unsent_logs());
231 EXPECT_FALSE(log_manager->has_staged_log());
232
233 // The test provider should have been called upon to provide stabilit
Alexei Svitkine (slow) 2014/09/09 19:28:26 Nit: stability
Sigurður Ásgeirsson 2014/09/09 21:13:14 Done.
234 // metrics.
235 EXPECT_TRUE(test_provider->provide_stability_metrics_called());
236
237 // Stage the log and retrieve it.
238 log_manager->StageNextLogForUpload();
239 EXPECT_TRUE(log_manager->has_staged_log());
240
241 std::string uncompressed_log;
242 EXPECT_TRUE(metrics::GzipUncompress(log_manager->staged_log(),
243 &uncompressed_log));
244
245 metrics::ChromeUserMetricsExtension uma_log;
246 EXPECT_TRUE(uma_log.ParseFromString(uncompressed_log));
247
248 EXPECT_TRUE(uma_log.has_client_id());
249 EXPECT_TRUE(uma_log.has_session_id());
250 EXPECT_TRUE(uma_log.has_system_profile());
251 EXPECT_EQ(0, uma_log.user_action_event_size());
252 EXPECT_EQ(0, uma_log.omnibox_event_size());
253 EXPECT_EQ(0, uma_log.histogram_event_size());
254 EXPECT_EQ(0, uma_log.profiler_event_size());
255 EXPECT_EQ(0, uma_log.perf_data_size());
256
257 // As there wasn't an unclean shutdown, this log has zero crash count.
258 EXPECT_EQ(0, uma_log.system_profile().stability().crash_count());
162 } 259 }
163 260
164 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) { 261 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) {
165 EnableMetricsReporting(); 262 EnableMetricsReporting();
166 GetLocalState()->ClearPref(metrics::prefs::kStabilityExitedCleanly); 263 GetLocalState()->ClearPref(metrics::prefs::kStabilityExitedCleanly);
167 264
168 // Set up prefs to simulate restarting after a crash. 265 // Set up prefs to simulate restarting after a crash.
169 266
170 // Save an existing system profile to prefs, to correspond to what would be 267 // Save an existing system profile to prefs, to correspond to what would be
171 // saved from a previous session. 268 // saved from a previous session.
172 metrics::TestMetricsServiceClient client; 269 metrics::TestMetricsServiceClient client;
173 TestMetricsLog log("client", 1, &client, GetLocalState()); 270 TestMetricsLog log("client", 1, &client, GetLocalState());
174 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), 271 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(),
175 std::vector<variations::ActiveGroupId>(), 272 std::vector<variations::ActiveGroupId>(),
176 0); 273 0);
177 274
178 // Record stability build time and version from previous session, so that 275 // Record stability build time and version from previous session, so that
179 // stability metrics (including exited cleanly flag) won't be cleared. 276 // stability metrics (including exited cleanly flag) won't be cleared.
180 GetLocalState()->SetInt64(metrics::prefs::kStabilityStatsBuildTime, 277 GetLocalState()->SetInt64(metrics::prefs::kStabilityStatsBuildTime,
181 MetricsLog::GetBuildTime()); 278 MetricsLog::GetBuildTime());
182 GetLocalState()->SetString(metrics::prefs::kStabilityStatsVersion, 279 GetLocalState()->SetString(metrics::prefs::kStabilityStatsVersion,
183 client.GetVersionString()); 280 client.GetVersionString());
184 281
185 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, false); 282 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, false);
186 283
187 TestMetricsService service( 284 TestMetricsService service(
188 GetMetricsStateManager(), &client, GetLocalState()); 285 GetMetricsStateManager(), &client, GetLocalState());
189 service.InitializeMetricsRecordingState(); 286 service.InitializeMetricsRecordingState();
190 287
191 // The initial stability log should be generated and persisted in unsent logs. 288 // The initial stability log should be generated and persisted in unsent logs.
192 MetricsLogManager* log_manager = service.log_manager(); 289 MetricsLogManager* log_manager = service.log_manager();
193 EXPECT_TRUE(log_manager->has_unsent_logs()); 290 EXPECT_TRUE(log_manager->has_unsent_logs());
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 404
308 service.RemoveObserver(&observer1); 405 service.RemoveObserver(&observer1);
309 406
310 service.OpenNewLog(); 407 service.OpenNewLog();
311 EXPECT_EQ(2, observer1.observed()); 408 EXPECT_EQ(2, observer1.observed());
312 EXPECT_EQ(2, observer2.observed()); 409 EXPECT_EQ(2, observer2.observed());
313 service.log_manager_.FinishCurrentLog(); 410 service.log_manager_.FinishCurrentLog();
314 411
315 service.RemoveObserver(&observer2); 412 service.RemoveObserver(&observer2);
316 } 413 }
OLDNEW
« no previous file with comments | « components/metrics/metrics_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698