| 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" | |
| 16 #include "chrome/browser/performance_monitor/metric.h" | 15 #include "chrome/browser/performance_monitor/metric.h" |
| 17 #include "chrome/browser/performance_monitor/performance_monitor_util.h" | 16 #include "chrome/browser/performance_monitor/performance_monitor_util.h" |
| 18 #include "chrome/common/extensions/extension.h" | 17 #include "chrome/common/extensions/extension.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 18 #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" | |
| 22 | 19 |
| 23 using extensions::Extension; | 20 using extensions::Extension; |
| 24 | 21 |
| 25 namespace performance_monitor { | 22 namespace performance_monitor { |
| 26 | 23 |
| 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 | |
| 81 // A clock that increments every access. Great for testing. | 24 // A clock that increments every access. Great for testing. |
| 82 class TestingClock : public Database::Clock { | 25 class TestingClock : public Database::Clock { |
| 83 public: | 26 public: |
| 84 TestingClock() | 27 TestingClock() |
| 85 : counter_(0) { | 28 : counter_(0) { |
| 86 } | 29 } |
| 87 explicit TestingClock(const TestingClock& other) | 30 explicit TestingClock(const TestingClock& other) |
| 88 : counter_(other.counter_) { | 31 : counter_(other.counter_) { |
| 89 } | 32 } |
| 90 virtual ~TestingClock() {} | 33 virtual ~TestingClock() {} |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 db_->set_clock(scoped_ptr<Database::Clock>(clock_)); | 100 db_->set_clock(scoped_ptr<Database::Clock>(clock_)); |
| 158 activity_ = std::string("A"); | 101 activity_ = std::string("A"); |
| 159 } | 102 } |
| 160 | 103 |
| 161 void SetUp() { | 104 void SetUp() { |
| 162 ASSERT_TRUE(db_.get()); | 105 ASSERT_TRUE(db_.get()); |
| 163 PopulateDB(); | 106 PopulateDB(); |
| 164 } | 107 } |
| 165 | 108 |
| 166 void PopulateDB() { | 109 void PopulateDB() { |
| 167 db_->AddMetric(kProcessChromeAggregate, | 110 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, |
| 168 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 50.5)); | 111 std::string("50.5")); |
| 169 db_->AddMetric(activity_, | 112 db_->AddMetric(activity_, METRIC_CPU_USAGE, std::string("13.1")); |
| 170 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 13.1)); | 113 |
| 171 db_->AddMetric(kProcessChromeAggregate, | 114 db_->AddMetric(kProcessChromeAggregate, METRIC_PRIVATE_MEMORY_USAGE, |
| 172 Metric(METRIC_PRIVATE_MEMORY_USAGE, | 115 std::string("1000000")); |
| 173 clock_->GetTime(), | 116 db_->AddMetric(activity_, METRIC_PRIVATE_MEMORY_USAGE, |
| 174 1000000.0)); | 117 std::string("3000000")); |
| 175 db_->AddMetric(activity_, | |
| 176 Metric(METRIC_PRIVATE_MEMORY_USAGE, | |
| 177 clock_->GetTime(), | |
| 178 3000000.0)); | |
| 179 } | 118 } |
| 180 | 119 |
| 181 scoped_ptr<Database> db_; | 120 scoped_ptr<Database> db_; |
| 182 Database::Clock* clock_; | 121 Database::Clock* clock_; |
| 183 ScopedTempDir temp_dir_; | 122 ScopedTempDir temp_dir_; |
| 184 std::string activity_; | 123 std::string activity_; |
| 185 }; | 124 }; |
| 186 | 125 |
| 187 ////// PerformanceMonitorDatabaseSetupTests //////////////////////////////////// | 126 ////// PerformanceMonitorDatabaseSetupTests //////////////////////////////////// |
| 188 TEST(PerformanceMonitorDatabaseSetupTest, OpenClose) { | 127 TEST(PerformanceMonitorDatabaseSetupTest, OpenClose) { |
| 189 ScopedTempDir temp_dir; | 128 ScopedTempDir temp_dir; |
| 190 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 129 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 191 scoped_ptr<Database> db = Database::Create(temp_dir.path()); | 130 scoped_ptr<Database> db = Database::Create(temp_dir.path()); |
| 192 ASSERT_TRUE(db.get()); | 131 ASSERT_TRUE(db.get()); |
| 193 DatabaseTestHelper helper(db.get()); | 132 ASSERT_TRUE(db->Close()); |
| 194 ASSERT_TRUE(helper.Close()); | |
| 195 } | 133 } |
| 196 | 134 |
| 197 TEST(PerformanceMonitorDatabaseSetupTest, ActiveInterval) { | 135 TEST(PerformanceMonitorDatabaseSetupTest, ActiveInterval) { |
| 198 ScopedTempDir temp_dir; | 136 ScopedTempDir temp_dir; |
| 199 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 137 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 200 | 138 |
| 201 TestingClock* clock_1 = new TestingClock(); | 139 TestingClock* clock_1 = new TestingClock(); |
| 202 base::Time start_time = clock_1->GetTime(); | 140 base::Time start_time = clock_1->GetTime(); |
| 203 | 141 |
| 204 scoped_ptr<Database> db_1 = Database::Create(temp_dir.path()); | 142 scoped_ptr<Database> db_1 = Database::Create(temp_dir.path()); |
| 205 db_1->set_clock(scoped_ptr<Database::Clock>(clock_1)); | 143 db_1->set_clock(scoped_ptr<Database::Clock>(clock_1)); |
| 206 DatabaseTestHelper helper1(db_1.get()); | |
| 207 db_1->AddStateValue("test", "test"); | 144 db_1->AddStateValue("test", "test"); |
| 208 ASSERT_TRUE(db_1.get()); | 145 ASSERT_TRUE(db_1.get()); |
| 209 ASSERT_TRUE(helper1.Close()); | 146 ASSERT_TRUE(db_1->Close()); |
| 210 | 147 |
| 211 TestingClock* clock_2 = new TestingClock(*clock_1); | 148 TestingClock* clock_2 = new TestingClock(*clock_1); |
| 212 base::Time mid_time = clock_2->GetTime(); | 149 base::Time mid_time = clock_2->GetTime(); |
| 213 scoped_ptr<Database> db_2 = Database::Create(temp_dir.path()); | 150 scoped_ptr<Database> db_2 = Database::Create(temp_dir.path()); |
| 214 db_2->set_clock(scoped_ptr<Database::Clock>(clock_2)); | 151 db_2->set_clock(scoped_ptr<Database::Clock>(clock_2)); |
| 215 DatabaseTestHelper helper2(db_2.get()); | |
| 216 db_2->AddStateValue("test", "test"); | 152 db_2->AddStateValue("test", "test"); |
| 217 ASSERT_TRUE(db_2.get()); | 153 ASSERT_TRUE(db_2.get()); |
| 218 ASSERT_TRUE(helper2.Close()); | 154 ASSERT_TRUE(db_2->Close()); |
| 219 | 155 |
| 220 TestingClock* clock_3 = new TestingClock(*clock_2); | 156 TestingClock* clock_3 = new TestingClock(*clock_2); |
| 221 base::Time end_time = clock_3->GetTime(); | 157 base::Time end_time = clock_3->GetTime(); |
| 222 scoped_ptr<Database> db_3 = Database::Create(temp_dir.path()); | 158 scoped_ptr<Database> db_3 = Database::Create(temp_dir.path()); |
| 223 db_3->set_clock(scoped_ptr<Database::Clock>(clock_3)); | 159 db_3->set_clock(scoped_ptr<Database::Clock>(clock_3)); |
| 224 db_3->AddStateValue("test", "test"); | 160 db_3->AddStateValue("test", "test"); |
| 225 ASSERT_TRUE(db_3.get()); | 161 ASSERT_TRUE(db_3.get()); |
| 226 | 162 |
| 227 std::vector<TimeRange> active_interval = db_3->GetActiveIntervals(start_time, | 163 std::vector<TimeRange> active_interval = db_3->GetActiveIntervals(start_time, |
| 228 end_time); | 164 end_time); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 } | 218 } |
| 283 | 219 |
| 284 TEST_F(PerformanceMonitorDatabaseMetricTest, GetMaxMetric) { | 220 TEST_F(PerformanceMonitorDatabaseMetricTest, GetMaxMetric) { |
| 285 Metric stat; | 221 Metric stat; |
| 286 EXPECT_EQ(0.0, db_->GetMaxStatsForActivityAndMetric(activity_, | 222 EXPECT_EQ(0.0, db_->GetMaxStatsForActivityAndMetric(activity_, |
| 287 METRIC_PAGE_LOAD_TIME)); | 223 METRIC_PAGE_LOAD_TIME)); |
| 288 | 224 |
| 289 EXPECT_EQ(1000000, | 225 EXPECT_EQ(1000000, |
| 290 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); | 226 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); |
| 291 | 227 |
| 292 db_->AddMetric(kProcessChromeAggregate, | 228 db_->AddMetric(kProcessChromeAggregate, METRIC_PRIVATE_MEMORY_USAGE, |
| 293 Metric(METRIC_PRIVATE_MEMORY_USAGE, clock_->GetTime(), 99.0)); | 229 std::string("99")); |
| 294 EXPECT_EQ(1000000, | 230 EXPECT_EQ(1000000, |
| 295 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); | 231 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); |
| 296 | 232 |
| 297 db_->AddMetric(kProcessChromeAggregate, | 233 db_->AddMetric(kProcessChromeAggregate, METRIC_PRIVATE_MEMORY_USAGE, |
| 298 Metric(METRIC_PRIVATE_MEMORY_USAGE, | 234 std::string("6000000")); |
| 299 clock_->GetTime(), | |
| 300 6000000.0)); | |
| 301 EXPECT_EQ(6000000, | 235 EXPECT_EQ(6000000, |
| 302 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); | 236 db_->GetMaxStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE)); |
| 303 } | 237 } |
| 304 | 238 |
| 305 TEST_F(PerformanceMonitorDatabaseEventTest, GetAllEventTypes) { | 239 TEST_F(PerformanceMonitorDatabaseEventTest, GetAllEventTypes) { |
| 306 Database::EventTypeSet types = db_->GetEventTypes(); | 240 Database::EventTypeSet types = db_->GetEventTypes(); |
| 307 ASSERT_EQ(2u, types.size()); | 241 ASSERT_EQ(2u, types.size()); |
| 308 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_INSTALL)); | 242 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_INSTALL)); |
| 309 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_UNINSTALL)); | 243 ASSERT_EQ(1u, types.count(EVENT_EXTENSION_UNINSTALL)); |
| 310 } | 244 } |
| 311 | 245 |
| 312 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventInTimeRange) { | 246 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventInTimeRange) { |
| 313 base::Time start_time = clock_->GetTime(); | 247 base::Time start_time = clock_->GetTime(); |
| 314 scoped_ptr<Event> crash_event = util::CreateRendererFreezeEvent( | 248 scoped_ptr<Event> crash_event = util::CreateRendererFreezeEvent( |
| 315 clock_->GetTime(), "chrome://freeze"); | 249 clock_->GetTime(), "chrome://freeze"); |
| 316 db_->AddEvent(*crash_event.get()); | 250 db_->AddEvent(*crash_event.get()); |
| 317 Database::EventVector events = db_->GetEvents(start_time, clock_->GetTime()); | 251 Database::EventVector events = db_->GetEvents(start_time, clock_->GetTime()); |
| 318 ASSERT_EQ(1u, events.size()); | 252 ASSERT_EQ(1u, events.size()); |
| 319 EXPECT_TRUE(events[0]->data()->Equals(crash_event->data())); | 253 EXPECT_TRUE(events[0]->data()->Equals(crash_event->data())); |
| 320 } | 254 } |
| 321 | 255 |
| 322 TEST_F(PerformanceMonitorDatabaseEventTest, GetInstallEvents) { | 256 TEST_F(PerformanceMonitorDatabaseEventTest, GetInstallEvents) { |
| 323 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_INSTALL); | 257 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_INSTALL); |
| 324 ASSERT_EQ(2u, events.size()); | 258 ASSERT_EQ(2u, events.size()); |
| 325 EXPECT_TRUE(events[0]->data()->Equals(install_event_1_->data())); | 259 EXPECT_TRUE(events[0]->data()->Equals(install_event_1_->data())); |
| 326 EXPECT_TRUE(events[1]->data()->Equals(install_event_2_->data())); | 260 EXPECT_TRUE(events[1]->data()->Equals(install_event_2_->data())); |
| 327 } | 261 } |
| 328 | 262 |
| 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 | |
| 346 TEST_F(PerformanceMonitorDatabaseEventTest, GetUnusedEventType) { | 263 TEST_F(PerformanceMonitorDatabaseEventTest, GetUnusedEventType) { |
| 347 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_DISABLE); | 264 Database::EventVector events = db_->GetEvents(EVENT_EXTENSION_DISABLE); |
| 348 ASSERT_TRUE(events.empty()); | 265 ASSERT_TRUE(events.empty()); |
| 349 events = db_->GetEvents(EVENT_EXTENSION_DISABLE, clock_->GetTime(), | 266 events = db_->GetEvents(EVENT_EXTENSION_DISABLE, clock_->GetTime(), |
| 350 clock_->GetTime()); | 267 clock_->GetTime()); |
| 351 ASSERT_TRUE(events.empty()); | 268 ASSERT_TRUE(events.empty()); |
| 352 } | 269 } |
| 353 | 270 |
| 354 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventsTimeRange) { | 271 TEST_F(PerformanceMonitorDatabaseEventTest, GetEventsTimeRange) { |
| 355 base::Time start_time = clock_->GetTime(); | 272 base::Time start_time = clock_->GetTime(); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 db_->AddStateValue(key, value_2); | 336 db_->AddStateValue(key, value_2); |
| 420 EXPECT_EQ(db_->GetStateValue(key), value_2); | 337 EXPECT_EQ(db_->GetStateValue(key), value_2); |
| 421 } | 338 } |
| 422 | 339 |
| 423 TEST_F(PerformanceMonitorDatabaseMetricTest, GetStatsForActivityAndMetric) { | 340 TEST_F(PerformanceMonitorDatabaseMetricTest, GetStatsForActivityAndMetric) { |
| 424 Database::MetricVector stats = db_->GetStatsForActivityAndMetric( | 341 Database::MetricVector stats = db_->GetStatsForActivityAndMetric( |
| 425 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); | 342 activity_, METRIC_CPU_USAGE, base::Time(), clock_->GetTime()); |
| 426 ASSERT_EQ(1u, stats.size()); | 343 ASSERT_EQ(1u, stats.size()); |
| 427 EXPECT_EQ(13.1, stats[0].value); | 344 EXPECT_EQ(13.1, stats[0].value); |
| 428 base::Time before = clock_->GetTime(); | 345 base::Time before = clock_->GetTime(); |
| 429 db_->AddMetric(activity_, | 346 db_->AddMetric(activity_, METRIC_CPU_USAGE, std::string("18")); |
| 430 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 18.0)); | |
| 431 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE, | 347 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE, |
| 432 before, clock_->GetTime()); | 348 before, clock_->GetTime()); |
| 433 ASSERT_EQ(1u, stats.size()); | 349 ASSERT_EQ(1u, stats.size()); |
| 434 EXPECT_EQ(18, stats[0].value); | 350 EXPECT_EQ(18, stats[0].value); |
| 435 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE); | 351 stats = db_->GetStatsForActivityAndMetric(activity_, METRIC_CPU_USAGE); |
| 436 ASSERT_EQ(2u, stats.size()); | 352 ASSERT_EQ(2u, stats.size()); |
| 437 EXPECT_EQ(13.1, stats[0].value); | 353 EXPECT_EQ(13.1, stats[0].value); |
| 438 EXPECT_EQ(18, stats[1].value); | 354 EXPECT_EQ(18, stats[1].value); |
| 439 stats = db_->GetStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE); | 355 stats = db_->GetStatsForActivityAndMetric(METRIC_PRIVATE_MEMORY_USAGE); |
| 440 ASSERT_EQ(1u, stats.size()); | 356 ASSERT_EQ(1u, stats.size()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 452 linked_ptr<Database::MetricVector> stats = stats_map[activity_]; | 368 linked_ptr<Database::MetricVector> stats = stats_map[activity_]; |
| 453 ASSERT_EQ(1u, stats->size()); | 369 ASSERT_EQ(1u, stats->size()); |
| 454 EXPECT_EQ(13.1, stats->at(0).value); | 370 EXPECT_EQ(13.1, stats->at(0).value); |
| 455 stats = stats_map[kProcessChromeAggregate]; | 371 stats = stats_map[kProcessChromeAggregate]; |
| 456 ASSERT_EQ(1u, stats->size()); | 372 ASSERT_EQ(1u, stats->size()); |
| 457 EXPECT_EQ(50.5, stats->at(0).value); | 373 EXPECT_EQ(50.5, stats->at(0).value); |
| 458 stats_map = db_->GetStatsForMetricByActivity( | 374 stats_map = db_->GetStatsForMetricByActivity( |
| 459 METRIC_CPU_USAGE, clock_->GetTime(), clock_->GetTime()); | 375 METRIC_CPU_USAGE, clock_->GetTime(), clock_->GetTime()); |
| 460 EXPECT_EQ(0u, stats_map.size()); | 376 EXPECT_EQ(0u, stats_map.size()); |
| 461 base::Time before = clock_->GetTime(); | 377 base::Time before = clock_->GetTime(); |
| 462 db_->AddMetric(activity_, | 378 db_->AddMetric(activity_, METRIC_CPU_USAGE, std::string("18")); |
| 463 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 18.0)); | |
| 464 stats_map = db_->GetStatsForMetricByActivity(METRIC_CPU_USAGE, before, | 379 stats_map = db_->GetStatsForMetricByActivity(METRIC_CPU_USAGE, before, |
| 465 clock_->GetTime()); | 380 clock_->GetTime()); |
| 466 ASSERT_EQ(1u, stats_map.size()); | 381 ASSERT_EQ(1u, stats_map.size()); |
| 467 stats = stats_map[activity_]; | 382 stats = stats_map[activity_]; |
| 468 ASSERT_EQ(1u, stats->size()); | 383 ASSERT_EQ(1u, stats->size()); |
| 469 EXPECT_EQ(18, stats->at(0).value); | 384 EXPECT_EQ(18, stats->at(0).value); |
| 470 } | 385 } |
| 471 | 386 |
| 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 | |
| 504 TEST_F(PerformanceMonitorDatabaseMetricTest, GetFullRange) { | 387 TEST_F(PerformanceMonitorDatabaseMetricTest, GetFullRange) { |
| 505 db_->AddMetric(kProcessChromeAggregate, | 388 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("3.4")); |
| 506 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 3.4)); | 389 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("21")); |
| 507 db_->AddMetric(kProcessChromeAggregate, | |
| 508 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 21.0)); | |
| 509 Database::MetricVector stats = | 390 Database::MetricVector stats = |
| 510 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE); | 391 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE); |
| 511 ASSERT_EQ(3u, stats.size()); | 392 ASSERT_EQ(3u, stats.size()); |
| 512 ASSERT_EQ(50.5, stats[0].value); | 393 ASSERT_EQ(50.5, stats[0].value); |
| 513 ASSERT_EQ(3.4, stats[1].value); | 394 ASSERT_EQ(3.4, stats[1].value); |
| 514 ASSERT_EQ(21, stats[2].value); | 395 ASSERT_EQ(21, stats[2].value); |
| 515 } | 396 } |
| 516 | 397 |
| 517 TEST_F(PerformanceMonitorDatabaseMetricTest, GetRange) { | 398 TEST_F(PerformanceMonitorDatabaseMetricTest, GetRange) { |
| 518 base::Time start = clock_->GetTime(); | 399 base::Time start = clock_->GetTime(); |
| 519 db_->AddMetric(kProcessChromeAggregate, | 400 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("3")); |
| 520 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 3.0)); | 401 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("9")); |
| 521 db_->AddMetric(kProcessChromeAggregate, | |
| 522 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 9.0)); | |
| 523 base::Time end = clock_->GetTime(); | 402 base::Time end = clock_->GetTime(); |
| 524 db_->AddMetric(kProcessChromeAggregate, | 403 db_->AddMetric(kProcessChromeAggregate, METRIC_CPU_USAGE, std::string("21")); |
| 525 Metric(METRIC_CPU_USAGE, clock_->GetTime(), 21.0)); | |
| 526 Database::MetricVector stats = | 404 Database::MetricVector stats = |
| 527 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE, start, end); | 405 db_->GetStatsForActivityAndMetric(METRIC_CPU_USAGE, start, end); |
| 528 ASSERT_EQ(2u, stats.size()); | 406 ASSERT_EQ(2u, stats.size()); |
| 529 ASSERT_EQ(3, stats[0].value); | 407 ASSERT_EQ(3, stats[0].value); |
| 530 ASSERT_EQ(9, stats[1].value); | 408 ASSERT_EQ(9, stats[1].value); |
| 531 } | 409 } |
| 532 | 410 |
| 533 } // namespace performance_monitor | 411 } // namespace performance_monitor |
| OLD | NEW |