OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/metrics/metrics_service.h" | 5 #include "chrome/browser/metrics/metrics_service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/threading/platform_thread.h" | 10 #include "base/threading/platform_thread.h" |
11 #include "chrome/browser/metrics/metrics_state_manager.h" | 11 #include "chrome/browser/metrics/metrics_state_manager.h" |
12 #include "chrome/common/chrome_switches.h" | 12 #include "chrome/common/chrome_switches.h" |
13 #include "chrome/common/pref_names.h" | 13 #include "chrome/common/pref_names.h" |
14 #include "chrome/test/base/scoped_testing_local_state.h" | 14 #include "chrome/test/base/scoped_testing_local_state.h" |
15 #include "chrome/test/base/testing_browser_process.h" | 15 #include "chrome/test/base/testing_browser_process.h" |
16 #include "components/metrics/metrics_service_observer.h" | 16 #include "components/metrics/metrics_service_observer.h" |
| 17 #include "components/metrics/test_metrics_service_client.h" |
17 #include "components/variations/metrics_util.h" | 18 #include "components/variations/metrics_util.h" |
18 #include "content/public/common/process_type.h" | 19 #include "content/public/common/process_type.h" |
19 #include "content/public/common/webplugininfo.h" | 20 #include "content/public/common/webplugininfo.h" |
20 #include "content/public/test/test_browser_thread_bundle.h" | 21 #include "content/public/test/test_browser_thread_bundle.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
22 #include "ui/gfx/size.h" | 23 #include "ui/gfx/size.h" |
23 | 24 |
24 #if defined(OS_CHROMEOS) | 25 #if defined(OS_CHROMEOS) |
25 #include "chrome/browser/metrics/metrics_log_chromeos.h" | 26 #include "chrome/browser/metrics/metrics_log_chromeos.h" |
26 #endif // OS_CHROMEOS | 27 #endif // OS_CHROMEOS |
27 | 28 |
28 namespace { | 29 namespace { |
29 | 30 |
30 using metrics::MetricsLogManager; | 31 using metrics::MetricsLogManager; |
31 | 32 |
32 class TestMetricsService : public MetricsService { | 33 class TestMetricsService : public MetricsService { |
33 public: | 34 public: |
34 explicit TestMetricsService(metrics::MetricsStateManager* state_manager) | 35 TestMetricsService(metrics::MetricsStateManager* state_manager, |
35 : MetricsService(state_manager) { | 36 metrics::MetricsServiceClient* client) |
| 37 : MetricsService(state_manager, client) { |
36 } | 38 } |
37 virtual ~TestMetricsService() {} | 39 virtual ~TestMetricsService() {} |
38 | 40 |
39 MetricsLogManager* log_manager() { | 41 MetricsLogManager* log_manager() { |
40 return &log_manager_; | 42 return &log_manager_; |
41 } | 43 } |
42 | 44 |
43 private: | 45 private: |
44 DISALLOW_COPY_AND_ASSIGN(TestMetricsService); | 46 DISALLOW_COPY_AND_ASSIGN(TestMetricsService); |
45 }; | 47 }; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 EXPECT_TRUE( | 172 EXPECT_TRUE( |
171 MetricsService::IsPluginProcess(content::PROCESS_TYPE_PPAPI_PLUGIN)); | 173 MetricsService::IsPluginProcess(content::PROCESS_TYPE_PPAPI_PLUGIN)); |
172 EXPECT_FALSE( | 174 EXPECT_FALSE( |
173 MetricsService::IsPluginProcess(content::PROCESS_TYPE_GPU)); | 175 MetricsService::IsPluginProcess(content::PROCESS_TYPE_GPU)); |
174 } | 176 } |
175 | 177 |
176 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { | 178 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { |
177 EnableMetricsReporting(); | 179 EnableMetricsReporting(); |
178 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, true); | 180 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, true); |
179 | 181 |
180 TestMetricsService service(GetMetricsStateManager()); | 182 metrics::TestMetricsServiceClient client; |
| 183 TestMetricsService service(GetMetricsStateManager(), &client); |
181 service.InitializeMetricsRecordingState(); | 184 service.InitializeMetricsRecordingState(); |
182 // No initial stability log should be generated. | 185 // No initial stability log should be generated. |
183 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); | 186 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); |
184 EXPECT_FALSE(service.log_manager()->has_staged_log()); | 187 EXPECT_FALSE(service.log_manager()->has_staged_log()); |
185 } | 188 } |
186 | 189 |
187 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) { | 190 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) { |
188 EnableMetricsReporting(); | 191 EnableMetricsReporting(); |
189 GetLocalState()->ClearPref(prefs::kStabilityExitedCleanly); | 192 GetLocalState()->ClearPref(prefs::kStabilityExitedCleanly); |
190 | 193 |
191 // Set up prefs to simulate restarting after a crash. | 194 // Set up prefs to simulate restarting after a crash. |
192 | 195 |
193 // Save an existing system profile to prefs, to correspond to what would be | 196 // Save an existing system profile to prefs, to correspond to what would be |
194 // saved from a previous session. | 197 // saved from a previous session. |
195 TestMetricsLog log("client", 1); | 198 TestMetricsLog log("client", 1); |
196 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), | 199 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), |
197 std::vector<content::WebPluginInfo>(), | 200 std::vector<content::WebPluginInfo>(), |
198 GoogleUpdateMetrics(), | 201 GoogleUpdateMetrics(), |
199 std::vector<variations::ActiveGroupId>()); | 202 std::vector<variations::ActiveGroupId>()); |
200 | 203 |
201 // Record stability build time and version from previous session, so that | 204 // Record stability build time and version from previous session, so that |
202 // stability metrics (including exited cleanly flag) won't be cleared. | 205 // stability metrics (including exited cleanly flag) won't be cleared. |
203 GetLocalState()->SetInt64(prefs::kStabilityStatsBuildTime, | 206 GetLocalState()->SetInt64(prefs::kStabilityStatsBuildTime, |
204 MetricsLog::GetBuildTime()); | 207 MetricsLog::GetBuildTime()); |
205 GetLocalState()->SetString(prefs::kStabilityStatsVersion, | 208 GetLocalState()->SetString(prefs::kStabilityStatsVersion, |
206 MetricsLog::GetVersionString()); | 209 MetricsLog::GetVersionString()); |
207 | 210 |
208 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, false); | 211 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, false); |
209 | 212 |
210 TestMetricsService service(GetMetricsStateManager()); | 213 metrics::TestMetricsServiceClient client; |
| 214 TestMetricsService service(GetMetricsStateManager(), &client); |
211 service.InitializeMetricsRecordingState(); | 215 service.InitializeMetricsRecordingState(); |
212 | 216 |
213 // The initial stability log should be generated and persisted in unsent logs. | 217 // The initial stability log should be generated and persisted in unsent logs. |
214 MetricsLogManager* log_manager = service.log_manager(); | 218 MetricsLogManager* log_manager = service.log_manager(); |
215 EXPECT_TRUE(log_manager->has_unsent_logs()); | 219 EXPECT_TRUE(log_manager->has_unsent_logs()); |
216 EXPECT_FALSE(log_manager->has_staged_log()); | 220 EXPECT_FALSE(log_manager->has_staged_log()); |
217 | 221 |
218 // Stage the log and retrieve it. | 222 // Stage the log and retrieve it. |
219 log_manager->StageNextLogForUpload(); | 223 log_manager->StageNextLogForUpload(); |
220 EXPECT_TRUE(log_manager->has_staged_log()); | 224 EXPECT_TRUE(log_manager->has_staged_log()); |
221 | 225 |
222 metrics::ChromeUserMetricsExtension uma_log; | 226 metrics::ChromeUserMetricsExtension uma_log; |
223 EXPECT_TRUE(uma_log.ParseFromString(log_manager->staged_log())); | 227 EXPECT_TRUE(uma_log.ParseFromString(log_manager->staged_log())); |
224 | 228 |
225 EXPECT_TRUE(uma_log.has_client_id()); | 229 EXPECT_TRUE(uma_log.has_client_id()); |
226 EXPECT_TRUE(uma_log.has_session_id()); | 230 EXPECT_TRUE(uma_log.has_session_id()); |
227 EXPECT_TRUE(uma_log.has_system_profile()); | 231 EXPECT_TRUE(uma_log.has_system_profile()); |
228 EXPECT_EQ(0, uma_log.user_action_event_size()); | 232 EXPECT_EQ(0, uma_log.user_action_event_size()); |
229 EXPECT_EQ(0, uma_log.omnibox_event_size()); | 233 EXPECT_EQ(0, uma_log.omnibox_event_size()); |
230 EXPECT_EQ(0, uma_log.histogram_event_size()); | 234 EXPECT_EQ(0, uma_log.histogram_event_size()); |
231 EXPECT_EQ(0, uma_log.profiler_event_size()); | 235 EXPECT_EQ(0, uma_log.profiler_event_size()); |
232 EXPECT_EQ(0, uma_log.perf_data_size()); | 236 EXPECT_EQ(0, uma_log.perf_data_size()); |
233 | 237 |
234 EXPECT_EQ(1, uma_log.system_profile().stability().crash_count()); | 238 EXPECT_EQ(1, uma_log.system_profile().stability().crash_count()); |
235 } | 239 } |
236 | 240 |
237 TEST_F(MetricsServiceTest, RegisterSyntheticTrial) { | 241 TEST_F(MetricsServiceTest, RegisterSyntheticTrial) { |
238 MetricsService service(GetMetricsStateManager()); | 242 metrics::TestMetricsServiceClient client; |
| 243 MetricsService service(GetMetricsStateManager(), &client); |
239 | 244 |
240 // Add two synthetic trials and confirm that they show up in the list. | 245 // Add two synthetic trials and confirm that they show up in the list. |
241 SyntheticTrialGroup trial1(metrics::HashName("TestTrial1"), | 246 SyntheticTrialGroup trial1(metrics::HashName("TestTrial1"), |
242 metrics::HashName("Group1")); | 247 metrics::HashName("Group1")); |
243 service.RegisterSyntheticFieldTrial(trial1); | 248 service.RegisterSyntheticFieldTrial(trial1); |
244 | 249 |
245 SyntheticTrialGroup trial2(metrics::HashName("TestTrial2"), | 250 SyntheticTrialGroup trial2(metrics::HashName("TestTrial2"), |
246 metrics::HashName("Group2")); | 251 metrics::HashName("Group2")); |
247 service.RegisterSyntheticFieldTrial(trial2); | 252 service.RegisterSyntheticFieldTrial(trial2); |
248 // Ensure that time has advanced by at least a tick before proceeding. | 253 // Ensure that time has advanced by at least a tick before proceeding. |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 GetLocalState()->ClearPref(crash_pref); | 331 GetLocalState()->ClearPref(crash_pref); |
327 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled()); | 332 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled()); |
328 #endif // !defined(OS_CHROMEOS) | 333 #endif // !defined(OS_CHROMEOS) |
329 #else // defined(GOOGLE_CHROME_BUILD) | 334 #else // defined(GOOGLE_CHROME_BUILD) |
330 // Chromium branded browsers never have crash reporting enabled. | 335 // Chromium branded browsers never have crash reporting enabled. |
331 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled()); | 336 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled()); |
332 #endif // defined(GOOGLE_CHROME_BUILD) | 337 #endif // defined(GOOGLE_CHROME_BUILD) |
333 } | 338 } |
334 | 339 |
335 TEST_F(MetricsServiceTest, MetricsServiceObserver) { | 340 TEST_F(MetricsServiceTest, MetricsServiceObserver) { |
336 MetricsService service(GetMetricsStateManager()); | 341 metrics::TestMetricsServiceClient client; |
| 342 MetricsService service(GetMetricsStateManager(), &client); |
337 TestMetricsServiceObserver observer1; | 343 TestMetricsServiceObserver observer1; |
338 TestMetricsServiceObserver observer2; | 344 TestMetricsServiceObserver observer2; |
339 | 345 |
340 service.AddObserver(&observer1); | 346 service.AddObserver(&observer1); |
341 EXPECT_EQ(0, observer1.observed()); | 347 EXPECT_EQ(0, observer1.observed()); |
342 EXPECT_EQ(0, observer2.observed()); | 348 EXPECT_EQ(0, observer2.observed()); |
343 | 349 |
344 service.OpenNewLog(); | 350 service.OpenNewLog(); |
345 EXPECT_EQ(1, observer1.observed()); | 351 EXPECT_EQ(1, observer1.observed()); |
346 EXPECT_EQ(0, observer2.observed()); | 352 EXPECT_EQ(0, observer2.observed()); |
347 service.log_manager_.FinishCurrentLog(); | 353 service.log_manager_.FinishCurrentLog(); |
348 | 354 |
349 service.AddObserver(&observer2); | 355 service.AddObserver(&observer2); |
350 | 356 |
351 service.OpenNewLog(); | 357 service.OpenNewLog(); |
352 EXPECT_EQ(2, observer1.observed()); | 358 EXPECT_EQ(2, observer1.observed()); |
353 EXPECT_EQ(1, observer2.observed()); | 359 EXPECT_EQ(1, observer2.observed()); |
354 service.log_manager_.FinishCurrentLog(); | 360 service.log_manager_.FinishCurrentLog(); |
355 | 361 |
356 service.RemoveObserver(&observer1); | 362 service.RemoveObserver(&observer1); |
357 | 363 |
358 service.OpenNewLog(); | 364 service.OpenNewLog(); |
359 EXPECT_EQ(2, observer1.observed()); | 365 EXPECT_EQ(2, observer1.observed()); |
360 EXPECT_EQ(2, observer2.observed()); | 366 EXPECT_EQ(2, observer2.observed()); |
361 service.log_manager_.FinishCurrentLog(); | 367 service.log_manager_.FinishCurrentLog(); |
362 | 368 |
363 service.RemoveObserver(&observer2); | 369 service.RemoveObserver(&observer2); |
364 } | 370 } |
OLD | NEW |