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 14 matching lines...) Expand all Loading... | |
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 TestMetricsProvider(bool has_stability_metrics) : | |
Alexei Svitkine (slow)
2014/09/09 17:24:43
Nit: explicit
Sigurður Ásgeirsson
2014/09/09 19:27:00
Done.
| |
38 has_stability_metrics_(has_stability_metrics), | |
39 provide_stability_metrics_called_(false) { | |
40 } | |
41 | |
42 bool HasStabilityMetrics() OVERRIDE { return has_stability_metrics_; } | |
Alexei Svitkine (slow)
2014/09/09 17:24:43
nit: virtual, same below
Sigurður Ásgeirsson
2014/09/09 19:27:00
Done.
| |
43 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 public: | |
Alexei Svitkine (slow)
2014/09/09 17:24:43
private:
Sigurður Ásgeirsson
2014/09/09 19:27:00
Done.
| |
53 bool has_stability_metrics_; | |
54 bool provide_stability_metrics_called_; | |
55 }; | |
Alexei Svitkine (slow)
2014/09/09 17:24:43
Add DISALLOW_COPY_AND_ASSIGN().
Sigurður Ásgeirsson
2014/09/09 19:27:00
Done.
| |
56 | |
35 class TestMetricsService : public MetricsService { | 57 class TestMetricsService : public MetricsService { |
36 public: | 58 public: |
37 TestMetricsService(metrics::MetricsStateManager* state_manager, | 59 TestMetricsService(metrics::MetricsStateManager* state_manager, |
38 metrics::MetricsServiceClient* client, | 60 metrics::MetricsServiceClient* client, |
39 PrefService* local_state) | 61 PrefService* local_state) |
40 : MetricsService(state_manager, client, local_state) {} | 62 : MetricsService(state_manager, client, local_state) {} |
41 virtual ~TestMetricsService() {} | 63 virtual ~TestMetricsService() {} |
42 | 64 |
43 using MetricsService::log_manager; | 65 using MetricsService::log_manager; |
44 | 66 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
148 | 170 |
149 } // namespace | 171 } // namespace |
150 | 172 |
151 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { | 173 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) { |
152 EnableMetricsReporting(); | 174 EnableMetricsReporting(); |
153 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true); | 175 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true); |
154 | 176 |
155 metrics::TestMetricsServiceClient client; | 177 metrics::TestMetricsServiceClient client; |
156 TestMetricsService service( | 178 TestMetricsService service( |
157 GetMetricsStateManager(), &client, GetLocalState()); | 179 GetMetricsStateManager(), &client, GetLocalState()); |
180 | |
181 TestMetricsProvider* test_provider = new TestMetricsProvider(false); | |
182 service.RegisterMetricsProvider( | |
183 scoped_ptr<metrics::MetricsProvider>(test_provider)); | |
184 | |
158 service.InitializeMetricsRecordingState(); | 185 service.InitializeMetricsRecordingState(); |
159 // No initial stability log should be generated. | 186 // No initial stability log should be generated. |
160 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); | 187 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); |
161 EXPECT_FALSE(service.log_manager()->has_staged_log()); | 188 EXPECT_FALSE(service.log_manager()->has_staged_log()); |
189 | |
190 // The test provider should not have been called upon to provide stability | |
191 // metrics. | |
192 EXPECT_FALSE(test_provider->provide_stability_metrics_called()); | |
193 } | |
194 | |
195 TEST_F(MetricsServiceTest, InitialStabilityLogAtProviderRequest) { | |
196 EnableMetricsReporting(); | |
197 | |
198 // Save an existing system profile to prefs, to correspond to what would be | |
199 // saved from a previous session. | |
200 metrics::TestMetricsServiceClient client; | |
201 TestMetricsLog log("client", 1, &client, GetLocalState()); | |
202 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), | |
203 std::vector<variations::ActiveGroupId>(), | |
204 0); | |
205 | |
206 // Record stability build time and version from previous session, so that | |
207 // stability metrics (including exited cleanly flag) won't be cleared. | |
208 GetLocalState()->SetInt64(metrics::prefs::kStabilityStatsBuildTime, | |
209 MetricsLog::GetBuildTime()); | |
Alexei Svitkine (slow)
2014/09/09 17:24:43
Nit: Align. Same below.
Sigurður Ásgeirsson
2014/09/09 19:27:00
Done.
| |
210 GetLocalState()->SetString(metrics::prefs::kStabilityStatsVersion, | |
211 client.GetVersionString()); | |
212 | |
213 // Set the clean exit flag, as that will otherwise cause a stabilty | |
214 // log to be produced, irrespective provider requests. | |
215 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true); | |
216 | |
217 TestMetricsService service( | |
218 GetMetricsStateManager(), &client, GetLocalState()); | |
219 // Add a metrics provider that requests a stability log. | |
220 TestMetricsProvider* test_provider = new TestMetricsProvider(true); | |
221 service.RegisterMetricsProvider( | |
222 scoped_ptr<metrics::MetricsProvider>(test_provider)); | |
223 | |
224 service.InitializeMetricsRecordingState(); | |
225 | |
226 // The initial stability log should be generated and persisted in unsent logs. | |
227 MetricsLogManager* log_manager = service.log_manager(); | |
228 EXPECT_TRUE(log_manager->has_unsent_logs()); | |
229 EXPECT_FALSE(log_manager->has_staged_log()); | |
230 | |
231 // The test provider should have been called upon to provide stabilit | |
232 // metrics. | |
233 EXPECT_TRUE(test_provider->provide_stability_metrics_called()); | |
234 | |
235 // Stage the log and retrieve it. | |
236 log_manager->StageNextLogForUpload(); | |
237 EXPECT_TRUE(log_manager->has_staged_log()); | |
238 | |
239 std::string uncompressed_log; | |
240 EXPECT_TRUE(metrics::GzipUncompress(log_manager->staged_log(), | |
241 &uncompressed_log)); | |
242 | |
243 metrics::ChromeUserMetricsExtension uma_log; | |
244 EXPECT_TRUE(uma_log.ParseFromString(uncompressed_log)); | |
245 | |
246 EXPECT_TRUE(uma_log.has_client_id()); | |
247 EXPECT_TRUE(uma_log.has_session_id()); | |
248 EXPECT_TRUE(uma_log.has_system_profile()); | |
249 EXPECT_EQ(0, uma_log.user_action_event_size()); | |
250 EXPECT_EQ(0, uma_log.omnibox_event_size()); | |
251 EXPECT_EQ(0, uma_log.histogram_event_size()); | |
252 EXPECT_EQ(0, uma_log.profiler_event_size()); | |
253 EXPECT_EQ(0, uma_log.perf_data_size()); | |
254 | |
255 // As there wasn't an unclean shutdown, this log has zero crash count. | |
256 EXPECT_EQ(0, uma_log.system_profile().stability().crash_count()); | |
162 } | 257 } |
163 | 258 |
164 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) { | 259 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) { |
165 EnableMetricsReporting(); | 260 EnableMetricsReporting(); |
166 GetLocalState()->ClearPref(metrics::prefs::kStabilityExitedCleanly); | 261 GetLocalState()->ClearPref(metrics::prefs::kStabilityExitedCleanly); |
167 | 262 |
168 // Set up prefs to simulate restarting after a crash. | 263 // Set up prefs to simulate restarting after a crash. |
169 | 264 |
170 // Save an existing system profile to prefs, to correspond to what would be | 265 // Save an existing system profile to prefs, to correspond to what would be |
171 // saved from a previous session. | 266 // saved from a previous session. |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
307 | 402 |
308 service.RemoveObserver(&observer1); | 403 service.RemoveObserver(&observer1); |
309 | 404 |
310 service.OpenNewLog(); | 405 service.OpenNewLog(); |
311 EXPECT_EQ(2, observer1.observed()); | 406 EXPECT_EQ(2, observer1.observed()); |
312 EXPECT_EQ(2, observer2.observed()); | 407 EXPECT_EQ(2, observer2.observed()); |
313 service.log_manager_.FinishCurrentLog(); | 408 service.log_manager_.FinishCurrentLog(); |
314 | 409 |
315 service.RemoveObserver(&observer2); | 410 service.RemoveObserver(&observer2); |
316 } | 411 } |
OLD | NEW |