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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 } // namespace | 74 } // namespace |
75 | 75 |
76 // This test tests adding many things to a database, and how long it takes | 76 // This test tests adding many things to a database, and how long it takes |
77 // to query the database with different numbers of things in it. The time | 77 // to query the database with different numbers of things in it. The time |
78 // is the total time to do all the operations, and as such, it is only | 78 // is the total time to do all the operations, and as such, it is only |
79 // useful for a regression test. If there is a regression, it might be | 79 // useful for a regression test. If there is a regression, it might be |
80 // useful to make another set of tests to test these things in isolation. | 80 // useful to make another set of tests to test these things in isolation. |
81 TEST_F(VisitedLink, TestAddAndQuery) { | 81 TEST_F(VisitedLink, TestAddAndQuery) { |
82 // init | 82 // init |
83 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, | 83 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, |
84 db_name_, 0); | 84 FilePath(db_name_), 0); |
85 ASSERT_TRUE(master.Init()); | 85 ASSERT_TRUE(master.Init()); |
86 | 86 |
87 PerfTimeLogger timer("Visited_link_add_and_query"); | 87 PerfTimeLogger timer("Visited_link_add_and_query"); |
88 | 88 |
89 // first check without anything in the table | 89 // first check without anything in the table |
90 CheckVisited(master, added_prefix, 0, add_count); | 90 CheckVisited(master, added_prefix, 0, add_count); |
91 | 91 |
92 // now fill half the table | 92 // now fill half the table |
93 const int half_size = add_count / 2; | 93 const int half_size = add_count / 2; |
94 FillTable(master, added_prefix, 0, half_size); | 94 FillTable(master, added_prefix, 0, half_size); |
(...skipping 10 matching lines...) Expand all Loading... |
105 CheckVisited(master, unadded_prefix, 0, add_count); | 105 CheckVisited(master, unadded_prefix, 0, add_count); |
106 } | 106 } |
107 | 107 |
108 // Tests how long it takes to write and read a large database to and from disk. | 108 // Tests how long it takes to write and read a large database to and from disk. |
109 TEST_F(VisitedLink, TestLoad) { | 109 TEST_F(VisitedLink, TestLoad) { |
110 // create a big DB | 110 // create a big DB |
111 { | 111 { |
112 PerfTimeLogger table_initialization_timer("Table_initialization"); | 112 PerfTimeLogger table_initialization_timer("Table_initialization"); |
113 | 113 |
114 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, | 114 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, |
115 db_name_, 0); | 115 FilePath(db_name_), 0); |
116 | 116 |
117 // time init with empty table | 117 // time init with empty table |
118 PerfTimeLogger initTimer("Empty_visited_link_init"); | 118 PerfTimeLogger initTimer("Empty_visited_link_init"); |
119 bool success = master.Init(); | 119 bool success = master.Init(); |
120 initTimer.Done(); | 120 initTimer.Done(); |
121 ASSERT_TRUE(success); | 121 ASSERT_TRUE(success); |
122 | 122 |
123 // add a bunch of stuff | 123 // add a bunch of stuff |
124 // TODO(maruel): This is very inefficient because the file gets rewritten | 124 // TODO(maruel): This is very inefficient because the file gets rewritten |
125 // many time and this is the actual bottleneck of this test. The file should | 125 // many time and this is the actual bottleneck of this test. The file should |
(...skipping 19 matching lines...) Expand all Loading... |
145 { | 145 { |
146 // make sure the file has to be re-loaded | 146 // make sure the file has to be re-loaded |
147 file_util::EvictFileFromSystemCache( | 147 file_util::EvictFileFromSystemCache( |
148 FilePath::FromWStringHack(std::wstring(db_name_))); | 148 FilePath::FromWStringHack(std::wstring(db_name_))); |
149 | 149 |
150 // cold load (no OS cache, hopefully) | 150 // cold load (no OS cache, hopefully) |
151 { | 151 { |
152 PerfTimer cold_timer; | 152 PerfTimer cold_timer; |
153 | 153 |
154 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, | 154 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, |
155 db_name_, 0); | 155 FilePath(db_name_), 0); |
156 bool success = master.Init(); | 156 bool success = master.Init(); |
157 TimeDelta elapsed = cold_timer.Elapsed(); | 157 TimeDelta elapsed = cold_timer.Elapsed(); |
158 ASSERT_TRUE(success); | 158 ASSERT_TRUE(success); |
159 | 159 |
160 cold_load_times.push_back(elapsed.InMillisecondsF()); | 160 cold_load_times.push_back(elapsed.InMillisecondsF()); |
161 } | 161 } |
162 | 162 |
163 // hot load (with OS caching the file in memory) | 163 // hot load (with OS caching the file in memory) |
164 { | 164 { |
165 PerfTimer hot_timer; | 165 PerfTimer hot_timer; |
166 | 166 |
167 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, | 167 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, |
168 db_name_, 0); | 168 FilePath(db_name_), 0); |
169 bool success = master.Init(); | 169 bool success = master.Init(); |
170 TimeDelta elapsed = hot_timer.Elapsed(); | 170 TimeDelta elapsed = hot_timer.Elapsed(); |
171 ASSERT_TRUE(success); | 171 ASSERT_TRUE(success); |
172 | 172 |
173 hot_load_times.push_back(elapsed.InMillisecondsF()); | 173 hot_load_times.push_back(elapsed.InMillisecondsF()); |
174 } | 174 } |
175 } | 175 } |
176 | 176 |
177 // We discard the max and return the average time. | 177 // We discard the max and return the average time. |
178 cold_load_times.erase(std::max_element(cold_load_times.begin(), | 178 cold_load_times.erase(std::max_element(cold_load_times.begin(), |
179 cold_load_times.end())); | 179 cold_load_times.end())); |
180 hot_load_times.erase(std::max_element(hot_load_times.begin(), | 180 hot_load_times.erase(std::max_element(hot_load_times.begin(), |
181 hot_load_times.end())); | 181 hot_load_times.end())); |
182 | 182 |
183 double cold_sum = 0, hot_sum = 0; | 183 double cold_sum = 0, hot_sum = 0; |
184 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { | 184 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { |
185 cold_sum += cold_load_times[i]; | 185 cold_sum += cold_load_times[i]; |
186 hot_sum += hot_load_times[i]; | 186 hot_sum += hot_load_times[i]; |
187 } | 187 } |
188 LogPerfResult("Visited_link_cold_load_time", | 188 LogPerfResult("Visited_link_cold_load_time", |
189 cold_sum / cold_load_times.size(), "ms"); | 189 cold_sum / cold_load_times.size(), "ms"); |
190 LogPerfResult("Visited_link_hot_load_time", | 190 LogPerfResult("Visited_link_hot_load_time", |
191 hot_sum / hot_load_times.size(), "ms"); | 191 hot_sum / hot_load_times.size(), "ms"); |
192 } | 192 } |
193 | 193 |
OLD | NEW |