| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 83 |
| 84 } // namespace | 84 } // namespace |
| 85 | 85 |
| 86 // This test tests adding many things to a database, and how long it takes | 86 // This test tests adding many things to a database, and how long it takes |
| 87 // to query the database with different numbers of things in it. The time | 87 // to query the database with different numbers of things in it. The time |
| 88 // is the total time to do all the operations, and as such, it is only | 88 // is the total time to do all the operations, and as such, it is only |
| 89 // useful for a regression test. If there is a regression, it might be | 89 // useful for a regression test. If there is a regression, it might be |
| 90 // useful to make another set of tests to test these things in isolation. | 90 // useful to make another set of tests to test these things in isolation. |
| 91 TEST_F(VisitedLink, TestAddAndQuery) { | 91 TEST_F(VisitedLink, TestAddAndQuery) { |
| 92 // init | 92 // init |
| 93 VisitedLinkMaster master(NULL, DummyVisitedLinkEventListener::GetInstance(), | 93 VisitedLinkMaster master(DummyVisitedLinkEventListener::GetInstance(), |
| 94 NULL, true, FilePath(db_name_), 0); | 94 NULL, true, FilePath(db_name_), 0); |
| 95 ASSERT_TRUE(master.Init()); | 95 ASSERT_TRUE(master.Init()); |
| 96 | 96 |
| 97 PerfTimeLogger timer("Visited_link_add_and_query"); | 97 PerfTimeLogger timer("Visited_link_add_and_query"); |
| 98 | 98 |
| 99 // first check without anything in the table | 99 // first check without anything in the table |
| 100 CheckVisited(master, added_prefix, 0, add_count); | 100 CheckVisited(master, added_prefix, 0, add_count); |
| 101 | 101 |
| 102 // now fill half the table | 102 // now fill half the table |
| 103 const int half_size = add_count / 2; | 103 const int half_size = add_count / 2; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 114 CheckVisited(master, added_prefix, 0, add_count); | 114 CheckVisited(master, added_prefix, 0, add_count); |
| 115 CheckVisited(master, unadded_prefix, 0, add_count); | 115 CheckVisited(master, unadded_prefix, 0, add_count); |
| 116 } | 116 } |
| 117 | 117 |
| 118 // Tests how long it takes to write and read a large database to and from disk. | 118 // Tests how long it takes to write and read a large database to and from disk. |
| 119 TEST_F(VisitedLink, TestLoad) { | 119 TEST_F(VisitedLink, TestLoad) { |
| 120 // create a big DB | 120 // create a big DB |
| 121 { | 121 { |
| 122 PerfTimeLogger table_initialization_timer("Table_initialization"); | 122 PerfTimeLogger table_initialization_timer("Table_initialization"); |
| 123 | 123 |
| 124 VisitedLinkMaster master(NULL, DummyVisitedLinkEventListener::GetInstance(), | 124 VisitedLinkMaster master(DummyVisitedLinkEventListener::GetInstance(), |
| 125 NULL, true, FilePath(db_name_), 0); | 125 NULL, true, FilePath(db_name_), 0); |
| 126 | 126 |
| 127 // time init with empty table | 127 // time init with empty table |
| 128 PerfTimeLogger initTimer("Empty_visited_link_init"); | 128 PerfTimeLogger initTimer("Empty_visited_link_init"); |
| 129 bool success = master.Init(); | 129 bool success = master.Init(); |
| 130 initTimer.Done(); | 130 initTimer.Done(); |
| 131 ASSERT_TRUE(success); | 131 ASSERT_TRUE(success); |
| 132 | 132 |
| 133 // add a bunch of stuff | 133 // add a bunch of stuff |
| 134 // TODO(maruel): This is very inefficient because the file gets rewritten | 134 // TODO(maruel): This is very inefficient because the file gets rewritten |
| (...skipping 18 matching lines...) Expand all Loading... |
| 153 std::vector<double> hot_load_times; | 153 std::vector<double> hot_load_times; |
| 154 for (int i = 0; i < load_count; i++) { | 154 for (int i = 0; i < load_count; i++) { |
| 155 // make sure the file has to be re-loaded | 155 // make sure the file has to be re-loaded |
| 156 file_util::EvictFileFromSystemCache( | 156 file_util::EvictFileFromSystemCache( |
| 157 FilePath::FromWStringHack(std::wstring(db_name_))); | 157 FilePath::FromWStringHack(std::wstring(db_name_))); |
| 158 | 158 |
| 159 // cold load (no OS cache, hopefully) | 159 // cold load (no OS cache, hopefully) |
| 160 { | 160 { |
| 161 PerfTimer cold_timer; | 161 PerfTimer cold_timer; |
| 162 | 162 |
| 163 VisitedLinkMaster master(NULL, | 163 VisitedLinkMaster master(DummyVisitedLinkEventListener::GetInstance(), |
| 164 DummyVisitedLinkEventListener::GetInstance(), | |
| 165 NULL, | 164 NULL, |
| 166 true, | 165 true, |
| 167 FilePath(db_name_), | 166 FilePath(db_name_), |
| 168 0); | 167 0); |
| 169 bool success = master.Init(); | 168 bool success = master.Init(); |
| 170 TimeDelta elapsed = cold_timer.Elapsed(); | 169 TimeDelta elapsed = cold_timer.Elapsed(); |
| 171 ASSERT_TRUE(success); | 170 ASSERT_TRUE(success); |
| 172 | 171 |
| 173 cold_load_times.push_back(elapsed.InMillisecondsF()); | 172 cold_load_times.push_back(elapsed.InMillisecondsF()); |
| 174 } | 173 } |
| 175 | 174 |
| 176 // hot load (with OS caching the file in memory) | 175 // hot load (with OS caching the file in memory) |
| 177 { | 176 { |
| 178 PerfTimer hot_timer; | 177 PerfTimer hot_timer; |
| 179 | 178 |
| 180 VisitedLinkMaster master(NULL, | 179 VisitedLinkMaster master(DummyVisitedLinkEventListener::GetInstance(), |
| 181 DummyVisitedLinkEventListener::GetInstance(), | |
| 182 NULL, | 180 NULL, |
| 183 true, | 181 true, |
| 184 FilePath(db_name_), | 182 FilePath(db_name_), |
| 185 0); | 183 0); |
| 186 bool success = master.Init(); | 184 bool success = master.Init(); |
| 187 TimeDelta elapsed = hot_timer.Elapsed(); | 185 TimeDelta elapsed = hot_timer.Elapsed(); |
| 188 ASSERT_TRUE(success); | 186 ASSERT_TRUE(success); |
| 189 | 187 |
| 190 hot_load_times.push_back(elapsed.InMillisecondsF()); | 188 hot_load_times.push_back(elapsed.InMillisecondsF()); |
| 191 } | 189 } |
| 192 } | 190 } |
| 193 | 191 |
| 194 // We discard the max and return the average time. | 192 // We discard the max and return the average time. |
| 195 cold_load_times.erase(std::max_element(cold_load_times.begin(), | 193 cold_load_times.erase(std::max_element(cold_load_times.begin(), |
| 196 cold_load_times.end())); | 194 cold_load_times.end())); |
| 197 hot_load_times.erase(std::max_element(hot_load_times.begin(), | 195 hot_load_times.erase(std::max_element(hot_load_times.begin(), |
| 198 hot_load_times.end())); | 196 hot_load_times.end())); |
| 199 | 197 |
| 200 double cold_sum = 0, hot_sum = 0; | 198 double cold_sum = 0, hot_sum = 0; |
| 201 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { | 199 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { |
| 202 cold_sum += cold_load_times[i]; | 200 cold_sum += cold_load_times[i]; |
| 203 hot_sum += hot_load_times[i]; | 201 hot_sum += hot_load_times[i]; |
| 204 } | 202 } |
| 205 LogPerfResult("Visited_link_cold_load_time", | 203 LogPerfResult("Visited_link_cold_load_time", |
| 206 cold_sum / cold_load_times.size(), "ms"); | 204 cold_sum / cold_load_times.size(), "ms"); |
| 207 LogPerfResult("Visited_link_hot_load_time", | 205 LogPerfResult("Visited_link_hot_load_time", |
| 208 hot_sum / hot_load_times.size(), "ms"); | 206 hot_sum / hot_load_times.size(), "ms"); |
| 209 } | 207 } |
| OLD | NEW |