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_util.h" | 9 #include "base/file_util.h" |
10 #include "base/perftimer.h" | 10 #include "base/perftimer.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 // Returns a URL with the given prefix and index | 27 // Returns a URL with the given prefix and index |
28 GURL TestURL(const char* prefix, int i) { | 28 GURL TestURL(const char* prefix, int i) { |
29 return GURL(StringPrintf("%s%d", prefix, i)); | 29 return GURL(StringPrintf("%s%d", prefix, i)); |
30 } | 30 } |
31 | 31 |
32 // we have no slaves, so this broadcase is a NOP | 32 // we have no slaves, so this broadcase is a NOP |
33 VisitedLinkMaster::PostNewTableEvent DummyBroadcastNewTableEvent; | 33 VisitedLinkMaster::PostNewTableEvent DummyBroadcastNewTableEvent; |
34 void DummyBroadcastNewTableEvent(base::SharedMemory *table) { | 34 void DummyBroadcastNewTableEvent(base::SharedMemory *table) { |
35 } | 35 } |
36 | 36 |
37 // Call at the beginning of the test to retrieve the database name and to | 37 // Call at the beginning of the test to retrieve the database name. |
38 // delete any old databases left by previous unit tests. The input buffer | 38 void InitDBName(std::wstring* db_name) { |
39 // should be MAX_PATH long. | 39 FilePath db_path; |
40 void InitDBName(wchar_t* db_name) { | 40 ASSERT_TRUE(file_util::GetCurrentDirectory(&db_path)); |
41 ASSERT_TRUE(GetCurrentDirectory(MAX_PATH, db_name)); | 41 db_path = db_path.Append(FILE_PATH_LITERAL("TempVisitedLinks")); |
42 if (db_name[wcslen(db_name) - 1] != file_util::kPathSeparator) | 42 *db_name = db_path.ToWStringHack(); |
43 wcsncat_s(db_name, MAX_PATH, &file_util::kPathSeparator, 1); | |
44 wcscat_s(db_name, MAX_PATH, L"TempVisitedLinks"); | |
45 } | 43 } |
46 | 44 |
47 // this checks IsVisited for the URLs starting with the given prefix and | 45 // this checks IsVisited for the URLs starting with the given prefix and |
48 // within the given range | 46 // within the given range |
49 void CheckVisited(VisitedLinkMaster& master, const char* prefix, | 47 void CheckVisited(VisitedLinkMaster& master, const char* prefix, |
50 int begin, int end) { | 48 int begin, int end) { |
51 for (int i = begin; i < end; i++) | 49 for (int i = begin; i < end; i++) |
52 master.IsVisited(TestURL(prefix, i)); | 50 master.IsVisited(TestURL(prefix, i)); |
53 } | 51 } |
54 | 52 |
55 // Fills that master's table with URLs starting with the given prefix and | 53 // Fills that master's table with URLs starting with the given prefix and |
56 // within the given range | 54 // within the given range |
57 void FillTable(VisitedLinkMaster& master, const char* prefix, | 55 void FillTable(VisitedLinkMaster& master, const char* prefix, |
58 int begin, int end) { | 56 int begin, int end) { |
59 for (int i = begin; i < end; i++) | 57 for (int i = begin; i < end; i++) |
60 master.AddURL(TestURL(prefix, i)); | 58 master.AddURL(TestURL(prefix, i)); |
61 } | 59 } |
62 | 60 |
63 class VisitedLink : public testing::Test { | 61 class VisitedLink : public testing::Test { |
64 protected: | 62 protected: |
65 wchar_t db_name_[MAX_PATH]; | 63 std::wstring db_name_; |
66 virtual void SetUp() { | 64 virtual void SetUp() { |
67 InitDBName(db_name_); | 65 InitDBName(&db_name_); |
68 DeleteFile(db_name_); | 66 file_util::Delete(db_name_, false); |
69 } | 67 } |
70 virtual void TearDown() { | 68 virtual void TearDown() { |
71 DeleteFile(db_name_); | 69 file_util::Delete(db_name_, false); |
72 } | 70 } |
73 }; | 71 }; |
74 | 72 |
75 } // namespace | 73 } // namespace |
76 | 74 |
77 // This test tests adding many things to a database, and how long it takes | 75 // This test tests adding many things to a database, and how long it takes |
78 // to query the database with different numbers of things in it. The time | 76 // to query the database with different numbers of things in it. The time |
79 // is the total time to do all the operations, and as such, it is only | 77 // is the total time to do all the operations, and as such, it is only |
80 // useful for a regression test. If there is a regression, it might be | 78 // useful for a regression test. If there is a regression, it might be |
81 // useful to make another set of tests to test these things in isolation. | 79 // useful to make another set of tests to test these things in isolation. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 } | 136 } |
139 | 137 |
140 // test loading the DB back, we do this several times since the flushing is | 138 // test loading the DB back, we do this several times since the flushing is |
141 // not very reliable. | 139 // not very reliable. |
142 const int load_count = 5; | 140 const int load_count = 5; |
143 std::vector<double> cold_load_times; | 141 std::vector<double> cold_load_times; |
144 std::vector<double> hot_load_times; | 142 std::vector<double> hot_load_times; |
145 for (int i = 0; i < load_count; i++) | 143 for (int i = 0; i < load_count; i++) |
146 { | 144 { |
147 // make sure the file has to be re-loaded | 145 // make sure the file has to be re-loaded |
148 file_util::EvictFileFromSystemCache(db_name_); | 146 file_util::EvictFileFromSystemCache(db_name_.c_str()); |
149 | 147 |
150 // cold load (no OS cache, hopefully) | 148 // cold load (no OS cache, hopefully) |
151 { | 149 { |
152 PerfTimer cold_timer; | 150 PerfTimer cold_timer; |
153 | 151 |
154 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, | 152 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, |
155 db_name_, 0); | 153 db_name_, 0); |
156 bool success = master.Init(); | 154 bool success = master.Init(); |
157 TimeDelta elapsed = cold_timer.Elapsed(); | 155 TimeDelta elapsed = cold_timer.Elapsed(); |
158 ASSERT_TRUE(success); | 156 ASSERT_TRUE(success); |
(...skipping 25 matching lines...) Expand all Loading... |
184 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { | 182 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { |
185 cold_sum += cold_load_times[i]; | 183 cold_sum += cold_load_times[i]; |
186 hot_sum += hot_load_times[i]; | 184 hot_sum += hot_load_times[i]; |
187 } | 185 } |
188 LogPerfResult("Visited_link_cold_load_time", | 186 LogPerfResult("Visited_link_cold_load_time", |
189 cold_sum / cold_load_times.size(), "ms"); | 187 cold_sum / cold_load_times.size(), "ms"); |
190 LogPerfResult("Visited_link_hot_load_time", | 188 LogPerfResult("Visited_link_hot_load_time", |
191 hot_sum / hot_load_times.size(), "ms"); | 189 hot_sum / hot_load_times.size(), "ms"); |
192 } | 190 } |
193 | 191 |
OLD | NEW |