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 <algorithm> | 5 #include <algorithm> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "base/scoped_temp_dir.h" | 12 #include "base/scoped_temp_dir.h" |
13 #include "base/time.h" | 13 #include "base/time.h" |
14 #include "chrome/browser/performance_monitor/database.h" | 14 #include "chrome/browser/performance_monitor/database.h" |
| 15 #include "chrome/browser/performance_monitor/key_builder.h" |
15 #include "chrome/browser/performance_monitor/metric.h" | 16 #include "chrome/browser/performance_monitor/metric.h" |
16 #include "chrome/browser/performance_monitor/performance_monitor_util.h" | 17 #include "chrome/browser/performance_monitor/performance_monitor_util.h" |
17 #include "chrome/common/extensions/extension.h" | 18 #include "chrome/common/extensions/extension.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 21 #include "third_party/leveldatabase/src/include/leveldb/iterator.h" |
19 | 22 |
20 using extensions::Extension; | 23 using extensions::Extension; |
21 | 24 |
22 namespace performance_monitor { | 25 namespace performance_monitor { |
23 | 26 |
| 27 // A class which is friended by Database, in order to hold the private methods |
| 28 // and avoid friending all the different test classes. |
| 29 class DatabaseTestHelper { |
| 30 public: |
| 31 explicit DatabaseTestHelper(Database* database) : database_(database) { }; |
| 32 ~DatabaseTestHelper() { }; |
| 33 |
| 34 bool Close() { return database_->Close(); } |
| 35 |
| 36 // Override the check for a metric's validity and insert it in the database. |
| 37 // Note: This does not do extraneous updates, like updating the recent_db or |
| 38 // the max_value_map. |
| 39 bool AddInvalidMetric(std::string activity, Metric metric) { |
| 40 std::string metric_key = |
| 41 database_->key_builder_->CreateMetricKey(database_->clock_->GetTime(), |
| 42 metric.type, |
| 43 activity); |
| 44 leveldb::Status status = |
| 45 database_->metric_db_->Put(database_->write_options_, |
| 46 metric_key, |
| 47 metric.ValueAsString()); |
| 48 return status.ok(); |
| 49 } |
| 50 |
| 51 // Writes an invalid event to the database; since events are stored as JSON |
| 52 // strings, this is equivalent to writing a garbage string. |
| 53 bool AddInvalidEvent(base::Time time, EventType type) { |
| 54 std::string key = database_->key_builder_->CreateEventKey(time, type); |
| 55 leveldb::Status status = |
| 56 database_->event_db_->Put(database_->write_options_, key, "fake_event"); |
| 57 return status.ok(); |
| 58 } |
| 59 |
| 60 size_t GetNumberOfMetricEntries() { |
| 61 return GetNumberOfEntries(database_->metric_db_.get()); |
| 62 } |
| 63 size_t GetNumberOfEventEntries() { |
| 64 return GetNumberOfEntries(database_->event_db_.get()); |
| 65 } |
| 66 |
| 67 private: |
| 68 // Returns the number of entries in a given database. |
| 69 size_t GetNumberOfEntries(leveldb::DB* level_db) { |
| 70 size_t number_of_entries = 0; |
| 71 scoped_ptr<leveldb::Iterator> iter( |
| 72 level_db->NewIterator(database_->read_options_)); |
| 73 for (iter->SeekToFirst(); iter->Valid(); iter->Next()) |
| 74 ++number_of_entries; |
| 75 return number_of_entries; |
| 76 } |
| 77 |
| 78 Database* database_; |
| 79 }; |
| 80 |
24 // A clock that increments every access. Great for testing. | 81 // A clock that increments every access. Great for testing. |
25 class TestingClock : public Database::Clock { | 82 class TestingClock : public Database::Clock { |
26 public: | 83 public: |
27 TestingClock() | 84 TestingClock() |
28 : counter_(0) { | 85 : counter_(0) { |
29 } | 86 } |
30 explicit TestingClock(const TestingClock& other) | 87 explicit TestingClock(const TestingClock& other) |
31 : counter_(other.counter_) { | 88 : counter_(other.counter_) { |
32 } | 89 } |
33 virtual ~TestingClock() {} | 90 virtual ~TestingClock() {} |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 db_->set_clock(scoped_ptr<Database::Clock>(clock_)); | 157 db_->set_clock(scoped_ptr<Database::Clock>(clock_)); |
101 activity_ = std::string("A"); | 158 activity_ = std::string("A"); |
102 } | 159 } |
103 | 160 |
104 void SetUp() { | 161 void SetUp() { |
105 ASSERT_TRUE(db_.get()); | 162 ASSERT_TRUE(db_.get()); |
106 PopulateDB(); | 163 PopulateDB(); |
107 } | 164 } |
108 | 165 |
109 void PopulateDB() { | 166 void PopulateDB() { |
110 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, | 167 db_->AddMetric(kProcessChromeAggregate, |
111 std::string("50.5")); | 168 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 50.5)); |
112 db_->AddMetric(activity_, METRIC_CPU_USAGE, std::string("13.1")); | 169 db_->AddMetric(activity_, |
113 | 170 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 13.1)); |
114 db_->AddMetric(kProcessChromeAggregate, METRIC_PRIVATE_MEMORY_USAGE, | 171 db_->AddMetric(kProcessChromeAggregate, |
115 std::string("1000000")); | 172 Metric(METRIC_PRIVATE_MEMORY_USAGE, |
116 db_->AddMetric(activity_, METRIC_PRIVATE_MEMORY_USAGE, | 173 clock_->GetTime(), |
117 std::string("3000000")); | 174 1000000.0)); |
| 175 db_->AddMetric(activity_, |
| 176 Metric(METRIC_PRIVATE_MEMORY_USAGE, |
| 177 clock_->GetTime(), |
| 178 3000000.0)); |
118 } | 179 } |
119 | 180 |
120 scoped_ptr<Database> db_; | 181 scoped_ptr<Database> db_; |
121 Database::Clock* clock_; | 182 Database::Clock* clock_; |
122 ScopedTempDir temp_dir_; | 183 ScopedTempDir temp_dir_; |
123 std::string activity_; | 184 std::string activity_; |
124 }; | 185 }; |
125 | 186 |
126 ////// PerformanceMonitorDatabaseSetupTests //////////////////////////////////// | 187 ////// PerformanceMonitorDatabaseSetupTests //////////////////////////////////// |
127 TEST(PerformanceMonitorDatabaseSetupTest, OpenClose) { | 188 TEST(PerformanceMonitorDatabaseSetupTest, OpenClose) { |
128 ScopedTempDir temp_dir; | 189 ScopedTempDir temp_dir; |
129 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 190 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
130 scoped_ptr<Database> db = Database::Create(temp_dir.path()); | 191 scoped_ptr<Database> db = Database::Create(temp_dir.path()); |
131 ASSERT_TRUE(db.get()); | 192 ASSERT_TRUE(db.get()); |
132 ASSERT_TRUE(db->Close()); | 193 DatabaseTestHelper helper(db.get()); |
| 194 ASSERT_TRUE(helper.Close()); |
133 } | 195 } |
134 | 196 |
135 TEST(PerformanceMonitorDatabaseSetupTest, ActiveInterval) { | 197 TEST(PerformanceMonitorDatabaseSetupTest, ActiveInterval) { |
136 ScopedTempDir temp_dir; | 198 ScopedTempDir temp_dir; |
137 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 199 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
138 | 200 |
139 TestingClock* clock_1 = new TestingClock(); | 201 TestingClock* clock_1 = new TestingClock(); |
140 base::Time start_time = clock_1->GetTime(); | 202 base::Time start_time = clock_1->GetTime(); |
141 | 203 |
142 scoped_ptr<Database> db_1 = Database::Create(temp_dir.path()); | 204 scoped_ptr<Database> db_1 = Database::Create(temp_dir.path()); |
143 db_1->set_clock(scoped_ptr<Database::Clock>(clock_1)); | 205 db_1->set_clock(scoped_ptr<Database::Clock>(clock_1)); |
| 206 DatabaseTestHelper helper1(db_1.get()); |
144 db_1->AddStateValue("test", "test"); | 207 db_1->AddStateValue("test", "test"); |
145 ASSERT_TRUE(db_1.get()); | 208 ASSERT_TRUE(db_1.get()); |
146 ASSERT_TRUE(db_1->Close()); | 209 ASSERT_TRUE(helper1.Close()); |
147 | 210 |
148 TestingClock* clock_2 = new TestingClock(*clock_1); | 211 TestingClock* clock_2 = new TestingClock(*clock_1); |
149 base::Time mid_time = clock_2->GetTime(); | 212 base::Time mid_time = clock_2->GetTime(); |
150 scoped_ptr<Database> db_2 = Database::Create(temp_dir.path()); | 213 scoped_ptr<Database> db_2 = Database::Create(temp_dir.path()); |
151 db_2->set_clock(scoped_ptr<Database::Clock>(clock_2)); | 214 db_2->set_clock(scoped_ptr<Database::Clock>(clock_2)); |
| 215 DatabaseTestHelper helper2(db_2.get()); |
152 db_2->AddStateValue("test", "test"); | 216 db_2->AddStateValue("test", "test"); |
153 ASSERT_TRUE(db_2.get()); | 217 ASSERT_TRUE(db_2.get()); |
154 ASSERT_TRUE(db_2->Close()); | 218 ASSERT_TRUE(helper2.Close()); |
155 | 219 |
156 TestingClock* clock_3 = new TestingClock(*clock_2); | 220 TestingClock* clock_3 = new TestingClock(*clock_2); |
157 base::Time end_time = clock_3->GetTime(); | 221 base::Time end_time = clock_3->GetTime(); |
158 scoped_ptr<Database> db_3 = Database::Create(temp_dir.path()); | 222 scoped_ptr<Database> db_3 = Database::Create(temp_dir.path()); |
159 db_3->set_clock(scoped_ptr<Database::Clock>(clock_3)); | 223 db_3->set_clock(scoped_ptr<Database::Clock>(clock_3)); |
160 db_3->AddStateValue("test", "test"); | 224 db_3->AddStateValue("test", "test"); |
161 ASSERT_TRUE(db_3.get()); | 225 ASSERT_TRUE(db_3.get()); |
162 | 226 |
163 std::vector<TimeRange> active_interval = db_3->GetActiveIntervals(start_time, | 227 std::vector<TimeRange> active_interval = db_3->GetActiveIntervals(start_time, |
164 end_time); | 228 end_time); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 } | 282 } |
219 | 283 |
220 TEST_F(PerformanceMonitorDatabaseMetricTest, GetMaxMetric) { | 284 TEST_F(PerformanceMonitorDatabaseMetricTest, GetMaxMetric) { |
221 Metric stat; | 285 Metric stat; |
222 EXPECT_EQ(0.0, db_->GetMaxStatsForActivityAndMetric(activity_, | 286 EXPECT_EQ(0.0, db_->GetMaxStatsForActivityAndMetric(activity_, |
223 METRIC_PAGE_LOAD_TIME)); | 287 METRIC_PAGE_LOAD_TIME)); |
224 | 288 |
225 EXPECT_EQ(1000000, | 289 EXPECT_EQ(1000000, |
226 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); | 290 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); |
227 | 291 |
228 db_->AddMetric(kProcessChromeAggregate, METRIC_PRIVATE_MEMORY_USAGE, | 292 db_->AddMetric(kProcessChromeAggregate, |
229 std::string("99")); | 293 Metric(METRIC_PRIVATE_MEMORY_USAGE, clock_->GetTime(), 99.0)); |
230 EXPECT_EQ(1000000, | 294 EXPECT_EQ(1000000, |
231 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); | 295 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); |
232 | 296 |
233 db_->AddMetric(kProcessChromeAggregate, METRIC_PRIVATE_MEMORY_USAGE, | 297 db_->AddMetric(kProcessChromeAggregate, |
234 std::string("6000000")); | 298 Metric(METRIC_PRIVATE_MEMORY_USAGE, |
| 299 clock_->GetTime(), |
| 300 6000000.0)); |
235 EXPECT_EQ(6000000, | 301 EXPECT_EQ(6000000, |
236 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); | 302 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); |
237 } | 303 } |
238 | 304 |
239 TEST_F(PerformanceMonitorDatabaseEventTest, GetAllEventTypes) { | 305 TEST_F(PerformanceMonitorDatabaseEventTest, GetAllEventTypes) { |
240 Database::EventTypeSet types = db_->GetEventTypes(); | 306 Database::EventTypeSet types = db_->GetEventTypes(); |
241 ASSERT_EQ(2u, types.size()); | 307 ASSERT_EQ(2u, types.size()); |
242 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_INSTALL)); | 308 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_INSTALL)); |
243 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_UNINSTALL)); | 309 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_UNINSTALL)); |
244 } | 310 } |
245 | 311 |
246 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventInTimeRange) { | 312 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventInTimeRange) { |
247 base::Time start_time = clock_->GetTime(); | 313 base::Time start_time = clock_->GetTime(); |
248 scoped_ptr<Event> crash_event = util::CreateRendererFreezeEvent( | 314 scoped_ptr<Event> crash_event = util::CreateRendererFreezeEvent( |
249 clock_->GetTime(), "chrome://freeze"); | 315 clock_->GetTime(), "chrome://freeze"); |
250 db_->AddEvent(*crash_event.get()); | 316 db_->AddEvent(*crash_event.get()); |
251 Database::EventVector events = db_->GetEvents(start_time, clock_->GetTime()); | 317 Database::EventVector events = db_->GetEvents(start_time, clock_->GetTime()); |
252 ASSERT_EQ(1u, events.size()); | 318 ASSERT_EQ(1u, events.size()); |
253 EXPECT_TRUE(events[0]->data()->Equals(crash_event->data())); | 319 EXPECT_TRUE(events[0]->data()->Equals(crash_event->data())); |
254 } | 320 } |
255 | 321 |
256 TEST_F(PerformanceMonitorDatabaseEventTest, GetInstallEvents) { | 322 TEST_F(PerformanceMonitorDatabaseEventTest, GetInstallEvents) { |
257 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_INSTALL); | 323 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_INSTALL); |
258 ASSERT_EQ(2u, events.size()); | 324 ASSERT_EQ(2u, events.size()); |
259 EXPECT_TRUE(events[0]->data()->Equals(install_event_1_->data())); | 325 EXPECT_TRUE(events[0]->data()->Equals(install_event_1_->data())); |
260 EXPECT_TRUE(events[1]->data()->Equals(install_event_2_->data())); | 326 EXPECT_TRUE(events[1]->data()->Equals(install_event_2_->data())); |
261 } | 327 } |
262 | 328 |
| 329 TEST_F(PerformanceMonitorDatabaseEventTest, InvalidEvents) { |
| 330 DatabaseTestHelper helper(db_.get()); |
| 331 |
| 332 // Insert an invalid event into the database; verify it is inserted. |
| 333 size_t original_number_of_entries = helper.GetNumberOfEventEntries(); |
| 334 ASSERT_TRUE(helper.AddInvalidEvent( |
| 335 clock_->GetTime(), EVENT_EXTENSION_INSTALL)); |
| 336 ASSERT_EQ(original_number_of_entries + 1u, helper.GetNumberOfEventEntries()); |
| 337 |
| 338 // Should not retrieve the invalid event. |
| 339 Database::EventVector events = db_->GetEvents(); |
| 340 ASSERT_EQ(original_number_of_entries, events.size()); |
| 341 |
| 342 // Invalid event should have been deleted. |
| 343 ASSERT_EQ(original_number_of_entries, helper.GetNumberOfEventEntries()); |
| 344 } |
| 345 |
263 TEST_F(PerformanceMonitorDatabaseEventTest, GetUnusedEventType) { | 346 TEST_F(PerformanceMonitorDatabaseEventTest, GetUnusedEventType) { |
264 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_DISABLE); | 347 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_DISABLE); |
265 ASSERT_TRUE(events.empty()); | 348 ASSERT_TRUE(events.empty()); |
266 events = db_->GetEvents(EVENT_EXTENSION_DISABLE, clock_->GetTime(), | 349 events = db_->GetEvents(EVENT_EXTENSION_DISABLE, clock_->GetTime(), |
267 clock_->GetTime()); | 350 clock_->GetTime()); |
268 ASSERT_TRUE(events.empty()); | 351 ASSERT_TRUE(events.empty()); |
269 } | 352 } |
270 | 353 |
271 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventsTimeRange) { | 354 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventsTimeRange) { |
272 base::Time start_time = clock_->GetTime(); | 355 base::Time start_time = clock_->GetTime(); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 db_->AddStateValue(key, value_2); | 419 db_->AddStateValue(key, value_2); |
337 EXPECT_EQ(db_->GetStateValue(key), value_2); | 420 EXPECT_EQ(db_->GetStateValue(key), value_2); |
338 } | 421 } |
339 | 422 |
340 TEST_F(PerformanceMonitorDatabaseMetricTest, GetStatsForActivityAndMetric) { | 423 TEST_F(PerformanceMonitorDatabaseMetricTest, GetStatsForActivityAndMetric) { |
341 Database::MetricVector stats = db_->GetStatsForActivityAndMetric( | 424 Database::MetricVector stats = db_->GetStatsForActivityAndMetric( |
342 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); | 425 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); |
343 ASSERT_EQ(1u, stats.size()); | 426 ASSERT_EQ(1u, stats.size()); |
344 EXPECT_EQ(13.1, stats[0].value); | 427 EXPECT_EQ(13.1, stats[0].value); |
345 base::Time before = clock_->GetTime(); | 428 base::Time before = clock_->GetTime(); |
346 db_->AddMetric(activity_, METRIC_CPU_USAGE, std::string("18")); | 429 db_->AddMetric(activity_, |
| 430 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 18.0)); |
347 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE, | 431 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE, |
348 before, clock_->GetTime()); | 432 before, clock_->GetTime()); |
349 ASSERT_EQ(1u, stats.size()); | 433 ASSERT_EQ(1u, stats.size()); |
350 EXPECT_EQ(18, stats[0].value); | 434 EXPECT_EQ(18, stats[0].value); |
351 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE); | 435 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE); |
352 ASSERT_EQ(2u, stats.size()); | 436 ASSERT_EQ(2u, stats.size()); |
353 EXPECT_EQ(13.1, stats[0].value); | 437 EXPECT_EQ(13.1, stats[0].value); |
354 EXPECT_EQ(18, stats[1].value); | 438 EXPECT_EQ(18, stats[1].value); |
355 stats = db_->GetStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE); | 439 stats = db_->GetStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE); |
356 ASSERT_EQ(1u, stats.size()); | 440 ASSERT_EQ(1u, stats.size()); |
(...skipping 11 matching lines...) Expand all Loading... |
368 linked_ptr<Database::MetricVector> stats = stats_map[activity_]; | 452 linked_ptr<Database::MetricVector> stats = stats_map[activity_]; |
369 ASSERT_EQ(1u, stats->size()); | 453 ASSERT_EQ(1u, stats->size()); |
370 EXPECT_EQ(13.1, stats->at(0).value); | 454 EXPECT_EQ(13.1, stats->at(0).value); |
371 stats = stats_map[kProcessChromeAggregate]; | 455 stats = stats_map[kProcessChromeAggregate]; |
372 ASSERT_EQ(1u, stats->size()); | 456 ASSERT_EQ(1u, stats->size()); |
373 EXPECT_EQ(50.5, stats->at(0).value); | 457 EXPECT_EQ(50.5, stats->at(0).value); |
374 stats_map = db_->GetStatsForMetricByActivity( | 458 stats_map = db_->GetStatsForMetricByActivity( |
375 METRIC_CPU_USAGE, clock_->GetTime(), clock_->GetTime()); | 459 METRIC_CPU_USAGE, clock_->GetTime(), clock_->GetTime()); |
376 EXPECT_EQ(0u, stats_map.size()); | 460 EXPECT_EQ(0u, stats_map.size()); |
377 base::Time before = clock_->GetTime(); | 461 base::Time before = clock_->GetTime(); |
378 db_->AddMetric(activity_, METRIC_CPU_USAGE, std::string("18")); | 462 db_->AddMetric(activity_, |
| 463 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 18.0)); |
379 stats_map = db_->GetStatsForMetricByActivity(METRIC_CPU_USAGE, before, | 464 stats_map = db_->GetStatsForMetricByActivity(METRIC_CPU_USAGE, before, |
380 clock_->GetTime()); | 465 clock_->GetTime()); |
381 ASSERT_EQ(1u, stats_map.size()); | 466 ASSERT_EQ(1u, stats_map.size()); |
382 stats = stats_map[activity_]; | 467 stats = stats_map[activity_]; |
383 ASSERT_EQ(1u, stats->size()); | 468 ASSERT_EQ(1u, stats->size()); |
384 EXPECT_EQ(18, stats->at(0).value); | 469 EXPECT_EQ(18, stats->at(0).value); |
385 } | 470 } |
386 | 471 |
| 472 TEST_F(PerformanceMonitorDatabaseMetricTest, InvalidMetrics) { |
| 473 DatabaseTestHelper helper(db_.get()); |
| 474 Metric invalid_metric(METRIC_CPU_USAGE, clock_->GetTime(), -5.0); |
| 475 ASSERT_FALSE(invalid_metric.IsValid()); |
| 476 |
| 477 // Find the original number of entries in the database. |
| 478 size_t original_number_of_entries = helper.GetNumberOfMetricEntries(); |
| 479 Database::MetricVector stats = db_->GetStatsForActivityAndMetric( |
| 480 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); |
| 481 size_t original_number_of_cpu_entries = stats.size(); |
| 482 |
| 483 // Check that the database normally refuses to insert bad metrics. |
| 484 EXPECT_FALSE(db_->AddMetric(invalid_metric)); |
| 485 |
| 486 // Verify that it was not inserted into the database. |
| 487 stats = db_->GetStatsForActivityAndMetric( |
| 488 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); |
| 489 ASSERT_EQ(original_number_of_cpu_entries, stats.size()); |
| 490 |
| 491 // Forcefully insert it into the database. |
| 492 ASSERT_TRUE(helper.AddInvalidMetric(activity_, invalid_metric)); |
| 493 ASSERT_EQ(original_number_of_entries + 1u, helper.GetNumberOfMetricEntries()); |
| 494 |
| 495 // Try to retrieve it; should only get one result. |
| 496 stats = db_->GetStatsForActivityAndMetric( |
| 497 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); |
| 498 ASSERT_EQ(original_number_of_cpu_entries, stats.size()); |
| 499 |
| 500 // Entry should have been deleted in the database. |
| 501 ASSERT_EQ(original_number_of_entries, helper.GetNumberOfMetricEntries()); |
| 502 } |
| 503 |
387 TEST_F(PerformanceMonitorDatabaseMetricTest, GetFullRange) { | 504 TEST_F(PerformanceMonitorDatabaseMetricTest, GetFullRange) { |
388 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("3.4")); | 505 db_->AddMetric(kProcessChromeAggregate, |
389 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("21")); | 506 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 3.4)); |
| 507 db_->AddMetric(kProcessChromeAggregate, |
| 508 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 21.0)); |
390 Database::MetricVector stats = | 509 Database::MetricVector stats = |
391 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE); | 510 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE); |
392 ASSERT_EQ(3u, stats.size()); | 511 ASSERT_EQ(3u, stats.size()); |
393 ASSERT_EQ(50.5, stats[0].value); | 512 ASSERT_EQ(50.5, stats[0].value); |
394 ASSERT_EQ(3.4, stats[1].value); | 513 ASSERT_EQ(3.4, stats[1].value); |
395 ASSERT_EQ(21, stats[2].value); | 514 ASSERT_EQ(21, stats[2].value); |
396 } | 515 } |
397 | 516 |
398 TEST_F(PerformanceMonitorDatabaseMetricTest, GetRange) { | 517 TEST_F(PerformanceMonitorDatabaseMetricTest, GetRange) { |
399 base::Time start = clock_->GetTime(); | 518 base::Time start = clock_->GetTime(); |
400 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("3")); | 519 db_->AddMetric(kProcessChromeAggregate, |
401 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("9")); | 520 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 3.0)); |
| 521 db_->AddMetric(kProcessChromeAggregate, |
| 522 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 9.0)); |
402 base::Time end = clock_->GetTime(); | 523 base::Time end = clock_->GetTime(); |
403 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("21")); | 524 db_->AddMetric(kProcessChromeAggregate, |
| 525 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 21.0)); |
404 Database::MetricVector stats = | 526 Database::MetricVector stats = |
405 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE, start, end); | 527 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE, start, end); |
406 ASSERT_EQ(2u, stats.size()); | 528 ASSERT_EQ(2u, stats.size()); |
407 ASSERT_EQ(3, stats[0].value); | 529 ASSERT_EQ(3, stats[0].value); |
408 ASSERT_EQ(9, stats[1].value); | 530 ASSERT_EQ(9, stats[1].value); |
409 } | 531 } |
410 | 532 |
411 } // namespace performance_monitor | 533 } // namespace performance_monitor |
OLD | NEW |