Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Side by Side Diff: chrome/browser/visitedlink_perftest.cc

Issue 113591: Fix Acid3 Test 48: LINKTEST, Chromium side.... (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/src/
Patch Set: Made waiting more bearable. Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/visitedlink_master.cc ('k') | chrome/browser/visitedlink_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 12 matching lines...) Expand all
23 const int add_count = 10000; 23 const int add_count = 10000;
24 const int load_test_add_count = 250000; 24 const int load_test_add_count = 250000;
25 const char added_prefix[] = "http://www.google.com/stuff/something/foo?session=8 5025602345625&id=1345142319023&seq="; 25 const char added_prefix[] = "http://www.google.com/stuff/something/foo?session=8 5025602345625&id=1345142319023&seq=";
26 const char unadded_prefix[] = "http://www.google.org/stuff/something/foo?session =39586739476365&id=2347624314402&seq="; 26 const char unadded_prefix[] = "http://www.google.org/stuff/something/foo?session =39586739476365&id=2347624314402&seq=";
27 27
28 // Returns a URL with the given prefix and index 28 // Returns a URL with the given prefix and index
29 GURL TestURL(const char* prefix, int i) { 29 GURL TestURL(const char* prefix, int i) {
30 return GURL(StringPrintf("%s%d", prefix, i)); 30 return GURL(StringPrintf("%s%d", prefix, i));
31 } 31 }
32 32
33 // we have no slaves, so this broadcase is a NOP 33 // We have no slaves, so all methods on this listener are a no-ops.
34 VisitedLinkMaster::PostNewTableEvent DummyBroadcastNewTableEvent; 34 class DummyVisitedLinkEventListener : public VisitedLinkMaster::Listener {
35 void DummyBroadcastNewTableEvent(base::SharedMemory *table) { 35 public:
36 } 36 DummyVisitedLinkEventListener() {}
37 virtual void NewTable(base::SharedMemory* table) {}
38 virtual void Add(VisitedLinkCommon::Fingerprint) {}
39 virtual void Reset() {}
40
41 static DummyVisitedLinkEventListener* GetInstance() {
42 static DummyVisitedLinkEventListener instance;
43 return &instance;
44 }
45 };
46
37 47
38 // Call at the beginning of the test to retrieve the database name. 48 // Call at the beginning of the test to retrieve the database name.
39 void InitDBName(std::wstring* db_name) { 49 void InitDBName(std::wstring* db_name) {
40 FilePath db_path; 50 FilePath db_path;
41 ASSERT_TRUE(file_util::GetCurrentDirectory(&db_path)); 51 ASSERT_TRUE(file_util::GetCurrentDirectory(&db_path));
42 db_path = db_path.AppendASCII("TempVisitedLinks"); 52 db_path = db_path.AppendASCII("TempVisitedLinks");
43 *db_name = db_path.ToWStringHack(); 53 *db_name = db_path.ToWStringHack();
44 } 54 }
45 55
46 // this checks IsVisited for the URLs starting with the given prefix and 56 // this checks IsVisited for the URLs starting with the given prefix and
(...skipping 26 matching lines...) Expand all
73 83
74 } // namespace 84 } // namespace
75 85
76 // 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
77 // 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
78 // 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
79 // 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
80 // 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.
81 TEST_F(VisitedLink, TestAddAndQuery) { 91 TEST_F(VisitedLink, TestAddAndQuery) {
82 // init 92 // init
83 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, 93 VisitedLinkMaster master(NULL, DummyVisitedLinkEventListener::GetInstance(),
84 FilePath(db_name_), 0); 94 NULL, true, FilePath(db_name_), 0);
85 ASSERT_TRUE(master.Init()); 95 ASSERT_TRUE(master.Init());
86 96
87 PerfTimeLogger timer("Visited_link_add_and_query"); 97 PerfTimeLogger timer("Visited_link_add_and_query");
88 98
89 // first check without anything in the table 99 // first check without anything in the table
90 CheckVisited(master, added_prefix, 0, add_count); 100 CheckVisited(master, added_prefix, 0, add_count);
91 101
92 // now fill half the table 102 // now fill half the table
93 const int half_size = add_count / 2; 103 const int half_size = add_count / 2;
94 FillTable(master, added_prefix, 0, half_size); 104 FillTable(master, added_prefix, 0, half_size);
95 105
96 // check the table again, half of these URLs will be visited, the other half 106 // check the table again, half of these URLs will be visited, the other half
97 // will not 107 // will not
98 CheckVisited(master, added_prefix, 0, add_count); 108 CheckVisited(master, added_prefix, 0, add_count);
99 109
100 // fill the rest of the table 110 // fill the rest of the table
101 FillTable(master, added_prefix, half_size, add_count); 111 FillTable(master, added_prefix, half_size, add_count);
102 112
103 // check URLs, doing half visited, half unvisited 113 // check URLs, doing half visited, half unvisited
104 CheckVisited(master, added_prefix, 0, add_count); 114 CheckVisited(master, added_prefix, 0, add_count);
105 CheckVisited(master, unadded_prefix, 0, add_count); 115 CheckVisited(master, unadded_prefix, 0, add_count);
106 } 116 }
107 117
108 // 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.
109 TEST_F(VisitedLink, TestLoad) { 119 TEST_F(VisitedLink, TestLoad) {
110 // create a big DB 120 // create a big DB
111 { 121 {
112 PerfTimeLogger table_initialization_timer("Table_initialization"); 122 PerfTimeLogger table_initialization_timer("Table_initialization");
113 123
114 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, 124 VisitedLinkMaster master(NULL, DummyVisitedLinkEventListener::GetInstance(),
115 FilePath(db_name_), 0); 125 NULL, true, FilePath(db_name_), 0);
116 126
117 // time init with empty table 127 // time init with empty table
118 PerfTimeLogger initTimer("Empty_visited_link_init"); 128 PerfTimeLogger initTimer("Empty_visited_link_init");
119 bool success = master.Init(); 129 bool success = master.Init();
120 initTimer.Done(); 130 initTimer.Done();
121 ASSERT_TRUE(success); 131 ASSERT_TRUE(success);
122 132
123 // add a bunch of stuff 133 // add a bunch of stuff
124 // TODO(maruel): This is very inefficient because the file gets rewritten 134 // 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 135 // many time and this is the actual bottleneck of this test. The file should
(...skipping 18 matching lines...) Expand all
144 for (int i = 0; i < load_count; i++) 154 for (int i = 0; i < load_count; i++)
145 { 155 {
146 // make sure the file has to be re-loaded 156 // make sure the file has to be re-loaded
147 file_util::EvictFileFromSystemCache( 157 file_util::EvictFileFromSystemCache(
148 FilePath::FromWStringHack(std::wstring(db_name_))); 158 FilePath::FromWStringHack(std::wstring(db_name_)));
149 159
150 // cold load (no OS cache, hopefully) 160 // cold load (no OS cache, hopefully)
151 { 161 {
152 PerfTimer cold_timer; 162 PerfTimer cold_timer;
153 163
154 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, 164 VisitedLinkMaster master(NULL,
155 FilePath(db_name_), 0); 165 DummyVisitedLinkEventListener::GetInstance(),
166 NULL,
167 true,
168 FilePath(db_name_),
169 0);
156 bool success = master.Init(); 170 bool success = master.Init();
157 TimeDelta elapsed = cold_timer.Elapsed(); 171 TimeDelta elapsed = cold_timer.Elapsed();
158 ASSERT_TRUE(success); 172 ASSERT_TRUE(success);
159 173
160 cold_load_times.push_back(elapsed.InMillisecondsF()); 174 cold_load_times.push_back(elapsed.InMillisecondsF());
161 } 175 }
162 176
163 // hot load (with OS caching the file in memory) 177 // hot load (with OS caching the file in memory)
164 { 178 {
165 PerfTimer hot_timer; 179 PerfTimer hot_timer;
166 180
167 VisitedLinkMaster master(NULL, DummyBroadcastNewTableEvent, NULL, true, 181 VisitedLinkMaster master(NULL,
168 FilePath(db_name_), 0); 182 DummyVisitedLinkEventListener::GetInstance(),
183 NULL,
184 true,
185 FilePath(db_name_),
186 0);
169 bool success = master.Init(); 187 bool success = master.Init();
170 TimeDelta elapsed = hot_timer.Elapsed(); 188 TimeDelta elapsed = hot_timer.Elapsed();
171 ASSERT_TRUE(success); 189 ASSERT_TRUE(success);
172 190
173 hot_load_times.push_back(elapsed.InMillisecondsF()); 191 hot_load_times.push_back(elapsed.InMillisecondsF());
174 } 192 }
175 } 193 }
176 194
177 // We discard the max and return the average time. 195 // We discard the max and return the average time.
178 cold_load_times.erase(std::max_element(cold_load_times.begin(), 196 cold_load_times.erase(std::max_element(cold_load_times.begin(),
179 cold_load_times.end())); 197 cold_load_times.end()));
180 hot_load_times.erase(std::max_element(hot_load_times.begin(), 198 hot_load_times.erase(std::max_element(hot_load_times.begin(),
181 hot_load_times.end())); 199 hot_load_times.end()));
182 200
183 double cold_sum = 0, hot_sum = 0; 201 double cold_sum = 0, hot_sum = 0;
184 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { 202 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) {
185 cold_sum += cold_load_times[i]; 203 cold_sum += cold_load_times[i];
186 hot_sum += hot_load_times[i]; 204 hot_sum += hot_load_times[i];
187 } 205 }
188 LogPerfResult("Visited_link_cold_load_time", 206 LogPerfResult("Visited_link_cold_load_time",
189 cold_sum / cold_load_times.size(), "ms"); 207 cold_sum / cold_load_times.size(), "ms");
190 LogPerfResult("Visited_link_hot_load_time", 208 LogPerfResult("Visited_link_hot_load_time",
191 hot_sum / hot_load_times.size(), "ms"); 209 hot_sum / hot_load_times.size(), "ms");
192 } 210 }
OLDNEW
« no previous file with comments | « chrome/browser/visitedlink_master.cc ('k') | chrome/browser/visitedlink_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698