OLD | NEW |
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 13 matching lines...) Expand all Loading... |
24 | 24 |
25 namespace { | 25 namespace { |
26 | 26 |
27 void StoreNoClientInfoBackup(const ClientInfo& /* client_info */) { | 27 void StoreNoClientInfoBackup(const ClientInfo& /* client_info */) { |
28 } | 28 } |
29 | 29 |
30 scoped_ptr<ClientInfo> ReturnNoBackup() { | 30 scoped_ptr<ClientInfo> ReturnNoBackup() { |
31 return scoped_ptr<ClientInfo>(); | 31 return scoped_ptr<ClientInfo>(); |
32 } | 32 } |
33 | 33 |
34 class TestMetricsProvider : public metrics::MetricsProvider { | 34 class TestMetricsProvider : public MetricsProvider { |
35 public: | 35 public: |
36 explicit TestMetricsProvider(bool has_stability_metrics) : | 36 explicit TestMetricsProvider(bool has_stability_metrics) : |
37 has_stability_metrics_(has_stability_metrics), | 37 has_stability_metrics_(has_stability_metrics), |
38 provide_stability_metrics_called_(false) { | 38 provide_stability_metrics_called_(false) { |
39 } | 39 } |
40 | 40 |
41 bool HasStabilityMetrics() override { return has_stability_metrics_; } | 41 bool HasStabilityMetrics() override { return has_stability_metrics_; } |
42 void ProvideStabilityMetrics( | 42 void ProvideStabilityMetrics( |
43 SystemProfileProto* system_profile_proto) override { | 43 SystemProfileProto* system_profile_proto) override { |
44 provide_stability_metrics_called_ = true; | 44 provide_stability_metrics_called_ = true; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 | 157 |
158 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { | 158 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { |
159 EnableMetricsReporting(); | 159 EnableMetricsReporting(); |
160 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, true); | 160 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, true); |
161 | 161 |
162 TestMetricsServiceClient client; | 162 TestMetricsServiceClient client; |
163 TestMetricsService service( | 163 TestMetricsService service( |
164 GetMetricsStateManager(), &client, GetLocalState()); | 164 GetMetricsStateManager(), &client, GetLocalState()); |
165 | 165 |
166 TestMetricsProvider* test_provider = new TestMetricsProvider(false); | 166 TestMetricsProvider* test_provider = new TestMetricsProvider(false); |
167 service.RegisterMetricsProvider( | 167 service.RegisterMetricsProvider(scoped_ptr<MetricsProvider>(test_provider)); |
168 scoped_ptr<metrics::MetricsProvider>(test_provider)); | |
169 | 168 |
170 service.InitializeMetricsRecordingState(); | 169 service.InitializeMetricsRecordingState(); |
171 // No initial stability log should be generated. | 170 // No initial stability log should be generated. |
172 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); | 171 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); |
173 EXPECT_FALSE(service.log_manager()->has_staged_log()); | 172 EXPECT_FALSE(service.log_manager()->has_staged_log()); |
174 | 173 |
175 // The test provider should not have been called upon to provide stability | 174 // The test provider should not have been called upon to provide stability |
176 // metrics. | 175 // metrics. |
177 EXPECT_FALSE(test_provider->provide_stability_metrics_called()); | 176 EXPECT_FALSE(test_provider->provide_stability_metrics_called()); |
178 } | 177 } |
179 | 178 |
180 TEST_F(MetricsServiceTest, InitialStabilityLogAtProviderRequest) { | 179 TEST_F(MetricsServiceTest, InitialStabilityLogAtProviderRequest) { |
181 EnableMetricsReporting(); | 180 EnableMetricsReporting(); |
182 | 181 |
183 // Save an existing system profile to prefs, to correspond to what would be | 182 // Save an existing system profile to prefs, to correspond to what would be |
184 // saved from a previous session. | 183 // saved from a previous session. |
185 TestMetricsServiceClient client; | 184 TestMetricsServiceClient client; |
186 TestMetricsLog log("client", 1, &client, GetLocalState()); | 185 TestMetricsLog log("client", 1, &client, GetLocalState()); |
187 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), | 186 log.RecordEnvironment(std::vector<MetricsProvider*>(), |
188 std::vector<variations::ActiveGroupId>(), | 187 std::vector<variations::ActiveGroupId>(), |
189 0); | 188 0); |
190 | 189 |
191 // Record stability build time and version from previous session, so that | 190 // Record stability build time and version from previous session, so that |
192 // stability metrics (including exited cleanly flag) won't be cleared. | 191 // stability metrics (including exited cleanly flag) won't be cleared. |
193 GetLocalState()->SetInt64(prefs::kStabilityStatsBuildTime, | 192 GetLocalState()->SetInt64(prefs::kStabilityStatsBuildTime, |
194 MetricsLog::GetBuildTime()); | 193 MetricsLog::GetBuildTime()); |
195 GetLocalState()->SetString(prefs::kStabilityStatsVersion, | 194 GetLocalState()->SetString(prefs::kStabilityStatsVersion, |
196 client.GetVersionString()); | 195 client.GetVersionString()); |
197 | 196 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 // The initial stability log should be generated and persisted in unsent logs. | 270 // The initial stability log should be generated and persisted in unsent logs. |
272 MetricsLogManager* log_manager = service.log_manager(); | 271 MetricsLogManager* log_manager = service.log_manager(); |
273 EXPECT_TRUE(log_manager->has_unsent_logs()); | 272 EXPECT_TRUE(log_manager->has_unsent_logs()); |
274 EXPECT_FALSE(log_manager->has_staged_log()); | 273 EXPECT_FALSE(log_manager->has_staged_log()); |
275 | 274 |
276 // Stage the log and retrieve it. | 275 // Stage the log and retrieve it. |
277 log_manager->StageNextLogForUpload(); | 276 log_manager->StageNextLogForUpload(); |
278 EXPECT_TRUE(log_manager->has_staged_log()); | 277 EXPECT_TRUE(log_manager->has_staged_log()); |
279 | 278 |
280 std::string uncompressed_log; | 279 std::string uncompressed_log; |
281 EXPECT_TRUE(metrics::GzipUncompress(log_manager->staged_log(), | 280 EXPECT_TRUE(GzipUncompress(log_manager->staged_log(), &uncompressed_log)); |
282 &uncompressed_log)); | |
283 | 281 |
284 metrics::ChromeUserMetricsExtension uma_log; | 282 ChromeUserMetricsExtension uma_log; |
285 EXPECT_TRUE(uma_log.ParseFromString(uncompressed_log)); | 283 EXPECT_TRUE(uma_log.ParseFromString(uncompressed_log)); |
286 | 284 |
287 EXPECT_TRUE(uma_log.has_client_id()); | 285 EXPECT_TRUE(uma_log.has_client_id()); |
288 EXPECT_TRUE(uma_log.has_session_id()); | 286 EXPECT_TRUE(uma_log.has_session_id()); |
289 EXPECT_TRUE(uma_log.has_system_profile()); | 287 EXPECT_TRUE(uma_log.has_system_profile()); |
290 EXPECT_EQ(0, uma_log.user_action_event_size()); | 288 EXPECT_EQ(0, uma_log.user_action_event_size()); |
291 EXPECT_EQ(0, uma_log.omnibox_event_size()); | 289 EXPECT_EQ(0, uma_log.omnibox_event_size()); |
292 EXPECT_EQ(0, uma_log.histogram_event_size()); | 290 EXPECT_EQ(0, uma_log.histogram_event_size()); |
293 EXPECT_EQ(0, uma_log.profiler_event_size()); | 291 EXPECT_EQ(0, uma_log.profiler_event_size()); |
294 EXPECT_EQ(0, uma_log.perf_data_size()); | 292 EXPECT_EQ(0, uma_log.perf_data_size()); |
295 | 293 |
296 EXPECT_EQ(1, uma_log.system_profile().stability().crash_count()); | 294 EXPECT_EQ(1, uma_log.system_profile().stability().crash_count()); |
297 } | 295 } |
298 | 296 |
299 TEST_F(MetricsServiceTest, RegisterSyntheticTrial) { | 297 TEST_F(MetricsServiceTest, RegisterSyntheticTrial) { |
300 metrics::TestMetricsServiceClient client; | 298 TestMetricsServiceClient client; |
301 MetricsService service(GetMetricsStateManager(), &client, GetLocalState()); | 299 MetricsService service(GetMetricsStateManager(), &client, GetLocalState()); |
302 | 300 |
303 // Add two synthetic trials and confirm that they show up in the list. | 301 // Add two synthetic trials and confirm that they show up in the list. |
304 SyntheticTrialGroup trial1(metrics::HashName("TestTrial1"), | 302 SyntheticTrialGroup trial1(HashName("TestTrial1"), HashName("Group1")); |
305 metrics::HashName("Group1")); | |
306 service.RegisterSyntheticFieldTrial(trial1); | 303 service.RegisterSyntheticFieldTrial(trial1); |
307 | 304 |
308 SyntheticTrialGroup trial2(metrics::HashName("TestTrial2"), | 305 SyntheticTrialGroup trial2(HashName("TestTrial2"), HashName("Group2")); |
309 metrics::HashName("Group2")); | |
310 service.RegisterSyntheticFieldTrial(trial2); | 306 service.RegisterSyntheticFieldTrial(trial2); |
311 // Ensure that time has advanced by at least a tick before proceeding. | 307 // Ensure that time has advanced by at least a tick before proceeding. |
312 WaitUntilTimeChanges(base::TimeTicks::Now()); | 308 WaitUntilTimeChanges(base::TimeTicks::Now()); |
313 | 309 |
314 service.log_manager_.BeginLoggingWithLog(scoped_ptr<MetricsLog>( | 310 service.log_manager_.BeginLoggingWithLog(scoped_ptr<MetricsLog>( |
315 new MetricsLog("clientID", | 311 new MetricsLog("clientID", |
316 1, | 312 1, |
317 MetricsLog::INITIAL_STABILITY_LOG, | 313 MetricsLog::INITIAL_STABILITY_LOG, |
318 &client, | 314 &client, |
319 GetLocalState()))); | 315 GetLocalState()))); |
320 // Save the time when the log was started (it's okay for this to be greater | 316 // Save the time when the log was started (it's okay for this to be greater |
321 // than the time recorded by the above call since it's used to ensure the | 317 // than the time recorded by the above call since it's used to ensure the |
322 // value changes). | 318 // value changes). |
323 const base::TimeTicks begin_log_time = base::TimeTicks::Now(); | 319 const base::TimeTicks begin_log_time = base::TimeTicks::Now(); |
324 | 320 |
325 std::vector<variations::ActiveGroupId> synthetic_trials; | 321 std::vector<variations::ActiveGroupId> synthetic_trials; |
326 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); | 322 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); |
327 EXPECT_EQ(2U, synthetic_trials.size()); | 323 EXPECT_EQ(2U, synthetic_trials.size()); |
328 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial1", "Group1")); | 324 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial1", "Group1")); |
329 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); | 325 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); |
330 | 326 |
331 // Ensure that time has advanced by at least a tick before proceeding. | 327 // Ensure that time has advanced by at least a tick before proceeding. |
332 WaitUntilTimeChanges(begin_log_time); | 328 WaitUntilTimeChanges(begin_log_time); |
333 | 329 |
334 // Change the group for the first trial after the log started. | 330 // Change the group for the first trial after the log started. |
335 SyntheticTrialGroup trial3(metrics::HashName("TestTrial1"), | 331 SyntheticTrialGroup trial3(HashName("TestTrial1"), HashName("Group2")); |
336 metrics::HashName("Group2")); | |
337 service.RegisterSyntheticFieldTrial(trial3); | 332 service.RegisterSyntheticFieldTrial(trial3); |
338 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); | 333 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); |
339 EXPECT_EQ(1U, synthetic_trials.size()); | 334 EXPECT_EQ(1U, synthetic_trials.size()); |
340 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); | 335 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); |
341 | 336 |
342 // Add a new trial after the log started and confirm that it doesn't show up. | 337 // Add a new trial after the log started and confirm that it doesn't show up. |
343 SyntheticTrialGroup trial4(metrics::HashName("TestTrial3"), | 338 SyntheticTrialGroup trial4(HashName("TestTrial3"), HashName("Group3")); |
344 metrics::HashName("Group3")); | |
345 service.RegisterSyntheticFieldTrial(trial4); | 339 service.RegisterSyntheticFieldTrial(trial4); |
346 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); | 340 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); |
347 EXPECT_EQ(1U, synthetic_trials.size()); | 341 EXPECT_EQ(1U, synthetic_trials.size()); |
348 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); | 342 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); |
349 | 343 |
350 // Ensure that time has advanced by at least a tick before proceeding. | 344 // Ensure that time has advanced by at least a tick before proceeding. |
351 WaitUntilTimeChanges(base::TimeTicks::Now()); | 345 WaitUntilTimeChanges(base::TimeTicks::Now()); |
352 | 346 |
353 // Start a new log and ensure all three trials appear in it. | 347 // Start a new log and ensure all three trials appear in it. |
354 service.log_manager_.FinishCurrentLog(); | 348 service.log_manager_.FinishCurrentLog(); |
355 service.log_manager_.BeginLoggingWithLog( | 349 service.log_manager_.BeginLoggingWithLog( |
356 scoped_ptr<MetricsLog>(new MetricsLog( | 350 scoped_ptr<MetricsLog>(new MetricsLog( |
357 "clientID", 1, MetricsLog::ONGOING_LOG, &client, GetLocalState()))); | 351 "clientID", 1, MetricsLog::ONGOING_LOG, &client, GetLocalState()))); |
358 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); | 352 service.GetCurrentSyntheticFieldTrials(&synthetic_trials); |
359 EXPECT_EQ(3U, synthetic_trials.size()); | 353 EXPECT_EQ(3U, synthetic_trials.size()); |
360 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial1", "Group2")); | 354 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial1", "Group2")); |
361 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); | 355 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2")); |
362 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial3", "Group3")); | 356 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial3", "Group3")); |
363 service.log_manager_.FinishCurrentLog(); | 357 service.log_manager_.FinishCurrentLog(); |
364 } | 358 } |
365 | 359 |
366 } // namespace metrics | 360 } // namespace metrics |
OLD | NEW |