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

Side by Side Diff: net/cookies/cookie_monster_perftest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
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 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // Note that the performance tests currently all operate on a loaded cookie 45 // Note that the performance tests currently all operate on a loaded cookie
46 // store (or, more precisely, one that has no backing persistent store). 46 // store (or, more precisely, one that has no backing persistent store).
47 // Therefore, callbacks will actually always complete synchronously. If the 47 // Therefore, callbacks will actually always complete synchronously. If the
48 // tests get more advanced we need to add other means of signaling 48 // tests get more advanced we need to add other means of signaling
49 // completion. 49 // completion.
50 base::MessageLoop::current()->RunUntilIdle(); 50 base::MessageLoop::current()->RunUntilIdle();
51 EXPECT_TRUE(has_run_); 51 EXPECT_TRUE(has_run_);
52 has_run_ = false; 52 has_run_ = false;
53 } 53 }
54 54
55 void Run() { 55 void Run() { has_run_ = true; }
56 has_run_ = true;
57 }
58 56
59 bool has_run_; 57 bool has_run_;
60 }; 58 };
61 59
62 class SetCookieCallback : public BaseCallback { 60 class SetCookieCallback : public BaseCallback {
63 public: 61 public:
64 void SetCookie( 62 void SetCookie(CookieMonster* cm,
65 CookieMonster* cm, const GURL& gurl, const std::string& cookie) { 63 const GURL& gurl,
66 cm->SetCookieWithOptionsAsync(gurl, cookie, options_, base::Bind( 64 const std::string& cookie) {
67 &SetCookieCallback::Run, base::Unretained(this))); 65 cm->SetCookieWithOptionsAsync(
66 gurl,
67 cookie,
68 options_,
69 base::Bind(&SetCookieCallback::Run, base::Unretained(this)));
68 WaitForCallback(); 70 WaitForCallback();
69 } 71 }
72
70 private: 73 private:
71 void Run(bool success) { 74 void Run(bool success) {
72 EXPECT_TRUE(success); 75 EXPECT_TRUE(success);
73 BaseCallback::Run(); 76 BaseCallback::Run();
74 } 77 }
75 net::CookieOptions options_; 78 net::CookieOptions options_;
76 }; 79 };
77 80
78 class GetCookiesCallback : public BaseCallback { 81 class GetCookiesCallback : public BaseCallback {
79 public: 82 public:
80 const std::string& GetCookies(CookieMonster* cm, const GURL& gurl) { 83 const std::string& GetCookies(CookieMonster* cm, const GURL& gurl) {
81 cm->GetCookiesWithOptionsAsync(gurl, options_, base::Bind( 84 cm->GetCookiesWithOptionsAsync(
82 &GetCookiesCallback::Run, base::Unretained(this))); 85 gurl,
86 options_,
87 base::Bind(&GetCookiesCallback::Run, base::Unretained(this)));
83 WaitForCallback(); 88 WaitForCallback();
84 return cookies_; 89 return cookies_;
85 } 90 }
86 91
87 private: 92 private:
88 void Run(const std::string& cookies) { 93 void Run(const std::string& cookies) {
89 cookies_ = cookies; 94 cookies_ = cookies;
90 BaseCallback::Run(); 95 BaseCallback::Run();
91 } 96 }
92 std::string cookies_; 97 std::string cookies_;
(...skipping 29 matching lines...) Expand all
122 for (int i = 0; i < kNumCookies; i++) { 127 for (int i = 0; i < kNumCookies; i++) {
123 cookies.push_back(base::StringPrintf("a%03d=b", i)); 128 cookies.push_back(base::StringPrintf("a%03d=b", i));
124 } 129 }
125 130
126 SetCookieCallback setCookieCallback; 131 SetCookieCallback setCookieCallback;
127 132
128 // Add a bunch of cookies on a single host 133 // Add a bunch of cookies on a single host
129 base::PerfTimeLogger timer("Cookie_monster_add_single_host"); 134 base::PerfTimeLogger timer("Cookie_monster_add_single_host");
130 135
131 for (std::vector<std::string>::const_iterator it = cookies.begin(); 136 for (std::vector<std::string>::const_iterator it = cookies.begin();
132 it != cookies.end(); ++it) { 137 it != cookies.end();
138 ++it) {
133 setCookieCallback.SetCookie(cm.get(), GURL(kGoogleURL), *it); 139 setCookieCallback.SetCookie(cm.get(), GURL(kGoogleURL), *it);
134 } 140 }
135 timer.Done(); 141 timer.Done();
136 142
137 GetCookiesCallback getCookiesCallback; 143 GetCookiesCallback getCookiesCallback;
138 144
139 base::PerfTimeLogger timer2("Cookie_monster_query_single_host"); 145 base::PerfTimeLogger timer2("Cookie_monster_query_single_host");
140 for (std::vector<std::string>::const_iterator it = cookies.begin(); 146 for (std::vector<std::string>::const_iterator it = cookies.begin();
141 it != cookies.end(); ++it) { 147 it != cookies.end();
148 ++it) {
142 getCookiesCallback.GetCookies(cm.get(), GURL(kGoogleURL)); 149 getCookiesCallback.GetCookies(cm.get(), GURL(kGoogleURL));
143 } 150 }
144 timer2.Done(); 151 timer2.Done();
145 152
146 base::PerfTimeLogger timer3("Cookie_monster_deleteall_single_host"); 153 base::PerfTimeLogger timer3("Cookie_monster_deleteall_single_host");
147 cm->DeleteAllAsync(CookieMonster::DeleteCallback()); 154 cm->DeleteAllAsync(CookieMonster::DeleteCallback());
148 base::MessageLoop::current()->RunUntilIdle(); 155 base::MessageLoop::current()->RunUntilIdle();
149 timer3.Done(); 156 timer3.Done();
150 } 157 }
151 158
152 TEST_F(CookieMonsterTest, TestAddCookieOnManyHosts) { 159 TEST_F(CookieMonsterTest, TestAddCookieOnManyHosts) {
153 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 160 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
154 std::string cookie(kCookieLine); 161 std::string cookie(kCookieLine);
155 std::vector<GURL> gurls; // just wanna have ffffuunnn 162 std::vector<GURL> gurls; // just wanna have ffffuunnn
156 for (int i = 0; i < kNumCookies; ++i) { 163 for (int i = 0; i < kNumCookies; ++i) {
157 gurls.push_back(GURL(base::StringPrintf("https://a%04d.izzle", i))); 164 gurls.push_back(GURL(base::StringPrintf("https://a%04d.izzle", i)));
158 } 165 }
159 166
160 SetCookieCallback setCookieCallback; 167 SetCookieCallback setCookieCallback;
161 168
162 // Add a cookie on a bunch of host 169 // Add a cookie on a bunch of host
163 base::PerfTimeLogger timer("Cookie_monster_add_many_hosts"); 170 base::PerfTimeLogger timer("Cookie_monster_add_many_hosts");
164 for (std::vector<GURL>::const_iterator it = gurls.begin(); 171 for (std::vector<GURL>::const_iterator it = gurls.begin(); it != gurls.end();
165 it != gurls.end(); ++it) { 172 ++it) {
166 setCookieCallback.SetCookie(cm.get(), *it, cookie); 173 setCookieCallback.SetCookie(cm.get(), *it, cookie);
167 } 174 }
168 timer.Done(); 175 timer.Done();
169 176
170 GetCookiesCallback getCookiesCallback; 177 GetCookiesCallback getCookiesCallback;
171 178
172 base::PerfTimeLogger timer2("Cookie_monster_query_many_hosts"); 179 base::PerfTimeLogger timer2("Cookie_monster_query_many_hosts");
173 for (std::vector<GURL>::const_iterator it = gurls.begin(); 180 for (std::vector<GURL>::const_iterator it = gurls.begin(); it != gurls.end();
174 it != gurls.end(); ++it) { 181 ++it) {
175 getCookiesCallback.GetCookies(cm.get(), *it); 182 getCookiesCallback.GetCookies(cm.get(), *it);
176 } 183 }
177 timer2.Done(); 184 timer2.Done();
178 185
179 base::PerfTimeLogger timer3("Cookie_monster_deleteall_many_hosts"); 186 base::PerfTimeLogger timer3("Cookie_monster_deleteall_many_hosts");
180 cm->DeleteAllAsync(CookieMonster::DeleteCallback()); 187 cm->DeleteAllAsync(CookieMonster::DeleteCallback());
181 base::MessageLoop::current()->RunUntilIdle(); 188 base::MessageLoop::current()->RunUntilIdle();
182 timer3.Done(); 189 timer3.Done();
183 } 190 }
184 191
(...skipping 22 matching lines...) Expand all
207 domain_list.push_back(domain_base_3); 214 domain_list.push_back(domain_base_3);
208 for (int i4 = 0; i4 < 2; i4++) { 215 for (int i4 = 0; i4 < 2; i4++) {
209 std::string domain_base_4((i4 ? "a." : "b.") + domain_base_3); 216 std::string domain_base_4((i4 ? "a." : "b.") + domain_base_3);
210 EXPECT_EQ("top.com", cm->GetKey(domain_base_4)); 217 EXPECT_EQ("top.com", cm->GetKey(domain_base_4));
211 domain_list.push_back(domain_base_4); 218 domain_list.push_back(domain_base_4);
212 } 219 }
213 } 220 }
214 } 221 }
215 } 222 }
216 223
217
218 EXPECT_EQ(31u, domain_list.size()); 224 EXPECT_EQ(31u, domain_list.size());
219 for (std::vector<std::string>::const_iterator it = domain_list.begin(); 225 for (std::vector<std::string>::const_iterator it = domain_list.begin();
220 it != domain_list.end(); it++) { 226 it != domain_list.end();
227 it++) {
221 GURL gurl("https://" + *it + "/"); 228 GURL gurl("https://" + *it + "/");
222 const std::string cookie = base::StringPrintf(domain_cookie_format_tree, 229 const std::string cookie =
223 it->c_str()); 230 base::StringPrintf(domain_cookie_format_tree, it->c_str());
224 setCookieCallback.SetCookie(cm.get(), gurl, cookie); 231 setCookieCallback.SetCookie(cm.get(), gurl, cookie);
225 } 232 }
226 EXPECT_EQ(31u, cm->GetAllCookies().size()); 233 EXPECT_EQ(31u, cm->GetAllCookies().size());
227 234
228 GURL probe_gurl("https://b.a.b.a.top.com/"); 235 GURL probe_gurl("https://b.a.b.a.top.com/");
229 std::string cookie_line = getCookiesCallback.GetCookies(cm.get(), probe_gurl); 236 std::string cookie_line = getCookiesCallback.GetCookies(cm.get(), probe_gurl);
230 EXPECT_EQ(5, CountInString(cookie_line, '=')) 237 EXPECT_EQ(5, CountInString(cookie_line, '='))
231 << "Cookie line: " << cookie_line; 238 << "Cookie line: " << cookie_line;
232 base::PerfTimeLogger timer("Cookie_monster_query_domain_tree"); 239 base::PerfTimeLogger timer("Cookie_monster_query_domain_tree");
233 for (int i = 0; i < kNumCookies; i++) { 240 for (int i = 0; i < kNumCookies; i++) {
(...skipping 18 matching lines...) Expand all
252 // below the top level.) 259 // below the top level.)
253 domain_list.push_back("a.top.com"); 260 domain_list.push_back("a.top.com");
254 domain_list.push_back("b.a.top.com"); 261 domain_list.push_back("b.a.top.com");
255 domain_list.push_back("a.b.a.top.com"); 262 domain_list.push_back("a.b.a.top.com");
256 domain_list.push_back("b.a.b.a.top.com"); 263 domain_list.push_back("b.a.b.a.top.com");
257 EXPECT_EQ(4u, domain_list.size()); 264 EXPECT_EQ(4u, domain_list.size());
258 265
259 const char* domain_cookie_format_line = "a%03d=b; domain=%s"; 266 const char* domain_cookie_format_line = "a%03d=b; domain=%s";
260 for (int i = 0; i < 8; i++) { 267 for (int i = 0; i < 8; i++) {
261 for (std::vector<std::string>::const_iterator it = domain_list.begin(); 268 for (std::vector<std::string>::const_iterator it = domain_list.begin();
262 it != domain_list.end(); it++) { 269 it != domain_list.end();
270 it++) {
263 GURL gurl("https://" + *it + "/"); 271 GURL gurl("https://" + *it + "/");
264 const std::string cookie = base::StringPrintf(domain_cookie_format_line, 272 const std::string cookie =
265 i, it->c_str()); 273 base::StringPrintf(domain_cookie_format_line, i, it->c_str());
266 setCookieCallback.SetCookie(cm.get(), gurl, cookie); 274 setCookieCallback.SetCookie(cm.get(), gurl, cookie);
267 } 275 }
268 } 276 }
269 277
270 cookie_line = getCookiesCallback.GetCookies(cm.get(), probe_gurl); 278 cookie_line = getCookiesCallback.GetCookies(cm.get(), probe_gurl);
271 EXPECT_EQ(32, CountInString(cookie_line, '=')); 279 EXPECT_EQ(32, CountInString(cookie_line, '='));
272 base::PerfTimeLogger timer2("Cookie_monster_query_domain_line"); 280 base::PerfTimeLogger timer2("Cookie_monster_query_domain_line");
273 for (int i = 0; i < kNumCookies; i++) { 281 for (int i = 0; i < kNumCookies; i++) {
274 getCookiesCallback.GetCookies(cm.get(), probe_gurl); 282 getCookiesCallback.GetCookies(cm.get(), probe_gurl);
275 } 283 }
276 timer2.Done(); 284 timer2.Done();
277 } 285 }
278 286
279 TEST_F(CookieMonsterTest, TestImport) { 287 TEST_F(CookieMonsterTest, TestImport) {
280 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 288 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
281 std::vector<CanonicalCookie*> initial_cookies; 289 std::vector<CanonicalCookie*> initial_cookies;
282 GetCookiesCallback getCookiesCallback; 290 GetCookiesCallback getCookiesCallback;
283 291
284 // We want to setup a fairly large backing store, with 300 domains of 50 292 // We want to setup a fairly large backing store, with 300 domains of 50
285 // cookies each. Creation times must be unique. 293 // cookies each. Creation times must be unique.
286 int64 time_tick(base::Time::Now().ToInternalValue()); 294 int64 time_tick(base::Time::Now().ToInternalValue());
287 295
288 for (int domain_num = 0; domain_num < 300; domain_num++) { 296 for (int domain_num = 0; domain_num < 300; domain_num++) {
289 std::string domain_name(base::StringPrintf(".Domain_%d.com", domain_num)); 297 std::string domain_name(base::StringPrintf(".Domain_%d.com", domain_num));
290 std::string gurl("www" + domain_name); 298 std::string gurl("www" + domain_name);
291 for (int cookie_num = 0; cookie_num < 50; cookie_num++) { 299 for (int cookie_num = 0; cookie_num < 50; cookie_num++) {
292 std::string cookie_line(base::StringPrintf("Cookie_%d=1; Path=/", 300 std::string cookie_line(
293 cookie_num)); 301 base::StringPrintf("Cookie_%d=1; Path=/", cookie_num));
294 AddCookieToList(gurl, cookie_line, 302 AddCookieToList(gurl,
303 cookie_line,
295 base::Time::FromInternalValue(time_tick++), 304 base::Time::FromInternalValue(time_tick++),
296 &initial_cookies); 305 &initial_cookies);
297 } 306 }
298 } 307 }
299 308
300 store->SetLoadExpectation(true, initial_cookies); 309 store->SetLoadExpectation(true, initial_cookies);
301 310
302 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 311 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL));
303 312
304 // Import will happen on first access. 313 // Import will happen on first access.
(...skipping 23 matching lines...) Expand all
328 // times reported are approximately the same--this indicates that no GC 337 // times reported are approximately the same--this indicates that no GC
329 // happened repeatedly for any case. 338 // happened repeatedly for any case.
330 TEST_F(CookieMonsterTest, TestGCTimes) { 339 TEST_F(CookieMonsterTest, TestGCTimes) {
331 SetCookieCallback setCookieCallback; 340 SetCookieCallback setCookieCallback;
332 341
333 const struct TestCase { 342 const struct TestCase {
334 const char* name; 343 const char* name;
335 size_t num_cookies; 344 size_t num_cookies;
336 size_t num_old_cookies; 345 size_t num_old_cookies;
337 } test_cases[] = { 346 } test_cases[] = {
338 { 347 {// A whole lot of recent cookies; gc shouldn't happen.
339 // A whole lot of recent cookies; gc shouldn't happen. 348 "all_recent", CookieMonster::kMaxCookies * 2, 0,
340 "all_recent", 349 },
341 CookieMonster::kMaxCookies * 2, 350 {// Some old cookies, but still overflowing max.
342 0, 351 "mostly_recent", CookieMonster::kMaxCookies * 2,
343 }, { 352 CookieMonster::kMaxCookies / 2,
344 // Some old cookies, but still overflowing max. 353 },
345 "mostly_recent", 354 {// Old cookies enough to bring us right down to our purge line.
346 CookieMonster::kMaxCookies * 2, 355 "balanced", CookieMonster::kMaxCookies * 2,
347 CookieMonster::kMaxCookies / 2, 356 CookieMonster::kMaxCookies + CookieMonster::kPurgeCookies + 1,
348 }, { 357 },
349 // Old cookies enough to bring us right down to our purge line. 358 {
350 "balanced", 359 "mostly_old",
351 CookieMonster::kMaxCookies * 2, 360 // Old cookies enough to bring below our purge line (which we
352 CookieMonster::kMaxCookies + CookieMonster::kPurgeCookies + 1, 361 // shouldn't do).
353 }, { 362 CookieMonster::kMaxCookies * 2, CookieMonster::kMaxCookies * 3 / 4,
354 "mostly_old", 363 },
355 // Old cookies enough to bring below our purge line (which we 364 {
356 // shouldn't do). 365 "less_than_gc_thresh",
357 CookieMonster::kMaxCookies * 2, 366 // Few enough cookies that gc shouldn't happen at all.
358 CookieMonster::kMaxCookies * 3 / 4, 367 CookieMonster::kMaxCookies - 5, 0,
359 }, { 368 },
360 "less_than_gc_thresh", 369 };
361 // Few enough cookies that gc shouldn't happen at all.
362 CookieMonster::kMaxCookies - 5,
363 0,
364 },
365 };
366 for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) { 370 for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) {
367 const TestCase& test_case(test_cases[ci]); 371 const TestCase& test_case(test_cases[ci]);
368 scoped_refptr<CookieMonster> cm( 372 scoped_refptr<CookieMonster> cm(CreateMonsterFromStoreForGC(
369 CreateMonsterFromStoreForGC( 373 test_case.num_cookies,
370 test_case.num_cookies, test_case.num_old_cookies, 374 test_case.num_old_cookies,
371 CookieMonster::kSafeFromGlobalPurgeDays * 2)); 375 CookieMonster::kSafeFromGlobalPurgeDays * 2));
372 376
373 GURL gurl("http://google.com"); 377 GURL gurl("http://google.com");
374 std::string cookie_line("z=3"); 378 std::string cookie_line("z=3");
375 // Trigger the Garbage collection we're allowed. 379 // Trigger the Garbage collection we're allowed.
376 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line); 380 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line);
377 381
378 base::PerfTimeLogger timer((std::string("GC_") + test_case.name).c_str()); 382 base::PerfTimeLogger timer((std::string("GC_") + test_case.name).c_str());
379 for (int i = 0; i < kNumCookies; i++) 383 for (int i = 0; i < kNumCookies; i++)
380 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line); 384 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line);
381 timer.Done(); 385 timer.Done();
382 } 386 }
383 } 387 }
384 388
385 } // namespace net 389 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698