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

Side by Side Diff: content/browser/loader/resource_scheduler_unittest.cc

Issue 462813002: Changed resource scheduler to block until all critical resources actually load. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed member initialization order (clang warning) Created 6 years, 4 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
« no previous file with comments | « content/browser/loader/resource_scheduler.cc ('k') | no next file » | 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) 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 "content/browser/loader/resource_scheduler.h" 5 #include "content/browser/loader/resource_scheduler.h"
6 6
7 #include "base/memory/scoped_vector.h" 7 #include "base/memory/scoped_vector.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/timer/mock_timer.h" 10 #include "base/timer/mock_timer.h"
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 EXPECT_TRUE(low2->started()); 297 EXPECT_TRUE(low2->started());
298 } 298 }
299 299
300 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInserted) { 300 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInserted) {
301 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 301 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
302 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 302 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
303 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); 303 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST));
304 EXPECT_TRUE(high->started()); 304 EXPECT_TRUE(high->started());
305 EXPECT_TRUE(low->started()); 305 EXPECT_TRUE(low->started());
306 EXPECT_FALSE(low2->started()); 306 EXPECT_FALSE(low2->started());
307 high.reset();
308 scheduler_.OnWillInsertBody(kChildId, kRouteId);
309 EXPECT_TRUE(low2->started());
310 }
311
312 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilCriticalComplete) {
313 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
314 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
315 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST));
316 EXPECT_TRUE(high->started());
317 EXPECT_TRUE(low->started());
318 EXPECT_FALSE(low2->started());
307 scheduler_.OnWillInsertBody(kChildId, kRouteId); 319 scheduler_.OnWillInsertBody(kChildId, kRouteId);
320 EXPECT_FALSE(low2->started());
321 high.reset();
308 EXPECT_TRUE(low2->started()); 322 EXPECT_TRUE(low2->started());
309 } 323 }
310 324
311 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInsertedExceptSpdy) { 325 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInsertedExceptSpdy) {
312 http_server_properties_.SetSupportsSpdy( 326 http_server_properties_.SetSupportsSpdy(
313 net::HostPortPair("spdyhost", 443), true); 327 net::HostPortPair("spdyhost", 443), true);
314 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 328 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
315 scoped_ptr<TestRequest> low_spdy( 329 scoped_ptr<TestRequest> low_spdy(
316 NewRequest("https://spdyhost/low", net::LOWEST)); 330 NewRequest("https://spdyhost/low", net::LOWEST));
317 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 331 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
318 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); 332 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST));
319 EXPECT_TRUE(high->started()); 333 EXPECT_TRUE(high->started());
320 EXPECT_TRUE(low_spdy->started()); 334 EXPECT_TRUE(low_spdy->started());
321 EXPECT_TRUE(low->started()); 335 EXPECT_TRUE(low->started());
322 EXPECT_FALSE(low2->started()); 336 EXPECT_FALSE(low2->started());
323 scheduler_.OnWillInsertBody(kChildId, kRouteId); 337 scheduler_.OnWillInsertBody(kChildId, kRouteId);
338 high.reset();
324 EXPECT_TRUE(low2->started()); 339 EXPECT_TRUE(low2->started());
325 } 340 }
326 341
327 TEST_F(ResourceSchedulerTest, NavigationResetsState) { 342 TEST_F(ResourceSchedulerTest, NavigationResetsState) {
328 scheduler_.OnWillInsertBody(kChildId, kRouteId); 343 scheduler_.OnWillInsertBody(kChildId, kRouteId);
329 scheduler_.OnNavigate(kChildId, kRouteId); 344 scheduler_.OnNavigate(kChildId, kRouteId);
330 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 345 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
331 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 346 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
332 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); 347 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST));
333 EXPECT_TRUE(high->started()); 348 EXPECT_TRUE(high->started());
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 EXPECT_FALSE(idle->started()); 469 EXPECT_FALSE(idle->started());
455 470
456 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. 471 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc.
457 ScopedVector<TestRequest> lows; 472 ScopedVector<TestRequest> lows;
458 for (int i = 0; i < kMaxNumDelayableRequestsPerClient - 1; ++i) { 473 for (int i = 0; i < kMaxNumDelayableRequestsPerClient - 1; ++i) {
459 string url = "http://host/low" + base::IntToString(i); 474 string url = "http://host/low" + base::IntToString(i);
460 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); 475 lows.push_back(NewRequest(url.c_str(), net::LOWEST));
461 } 476 }
462 477
463 scheduler_.OnWillInsertBody(kChildId, kRouteId); 478 scheduler_.OnWillInsertBody(kChildId, kRouteId);
479 high.reset();
480
464 EXPECT_TRUE(request->started()); 481 EXPECT_TRUE(request->started());
465 EXPECT_FALSE(idle->started()); 482 EXPECT_FALSE(idle->started());
466 } 483 }
467 484
468 TEST_F(ResourceSchedulerTest, LowerPriority) { 485 TEST_F(ResourceSchedulerTest, LowerPriority) {
469 // Dummies to enforce scheduling. 486 // Dummies to enforce scheduling.
470 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 487 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
471 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 488 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
472 489
473 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); 490 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST));
474 scoped_ptr<TestRequest> idle(NewRequest("http://host/idle", net::IDLE)); 491 scoped_ptr<TestRequest> idle(NewRequest("http://host/idle", net::IDLE));
475 EXPECT_FALSE(request->started()); 492 EXPECT_FALSE(request->started());
476 EXPECT_FALSE(idle->started()); 493 EXPECT_FALSE(idle->started());
477 494
478 ChangeRequestPriority(request.get(), net::IDLE); 495 ChangeRequestPriority(request.get(), net::IDLE);
479 EXPECT_FALSE(request->started()); 496 EXPECT_FALSE(request->started());
480 EXPECT_FALSE(idle->started()); 497 EXPECT_FALSE(idle->started());
481 498
482 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. 499 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc.
483 // 2 fewer filler requests: 1 for the "low" dummy at the start, and 1 for the 500 // 2 fewer filler requests: 1 for the "low" dummy at the start, and 1 for the
484 // one at the end, which will be tested. 501 // one at the end, which will be tested.
485 const int kNumFillerRequests = kMaxNumDelayableRequestsPerClient - 2; 502 const int kNumFillerRequests = kMaxNumDelayableRequestsPerClient - 2;
486 ScopedVector<TestRequest> lows; 503 ScopedVector<TestRequest> lows;
487 for (int i = 0; i < kNumFillerRequests; ++i) { 504 for (int i = 0; i < kNumFillerRequests; ++i) {
488 string url = "http://host" + base::IntToString(i) + "/low"; 505 string url = "http://host" + base::IntToString(i) + "/low";
489 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); 506 lows.push_back(NewRequest(url.c_str(), net::LOWEST));
490 } 507 }
491 508
492 scheduler_.OnWillInsertBody(kChildId, kRouteId); 509 scheduler_.OnWillInsertBody(kChildId, kRouteId);
510 high.reset();
511
493 EXPECT_FALSE(request->started()); 512 EXPECT_FALSE(request->started());
494 EXPECT_TRUE(idle->started()); 513 EXPECT_TRUE(idle->started());
495 } 514 }
496 515
497 TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) { 516 TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) {
498 // Dummies to enforce scheduling. 517 // Dummies to enforce scheduling.
499 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 518 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
500 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 519 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
501 520
502 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); 521 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 lows.push_back(NewRequest(url.c_str(), net::IDLE)); 555 lows.push_back(NewRequest(url.c_str(), net::IDLE));
537 } 556 }
538 557
539 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); 558 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE));
540 EXPECT_FALSE(request->started()); 559 EXPECT_FALSE(request->started());
541 560
542 ChangeRequestPriority(request.get(), net::IDLE, 1); 561 ChangeRequestPriority(request.get(), net::IDLE, 1);
543 EXPECT_FALSE(request->started()); 562 EXPECT_FALSE(request->started());
544 563
545 scheduler_.OnWillInsertBody(kChildId, kRouteId); 564 scheduler_.OnWillInsertBody(kChildId, kRouteId);
565 high.reset();
546 EXPECT_TRUE(request->started()); 566 EXPECT_TRUE(request->started());
547 } 567 }
548 568
549 TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) { 569 TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) {
550 // Dummies to enforce scheduling. 570 // Dummies to enforce scheduling.
551 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 571 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
552 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 572 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
553 573
554 scoped_ptr<TestRequest> request( 574 scoped_ptr<TestRequest> request(
555 NewRequest("chrome-extension://req", net::LOWEST)); 575 NewRequest("chrome-extension://req", net::LOWEST));
(...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after
2093 FireCoalescingTimer(); 2113 FireCoalescingTimer();
2094 2114
2095 EXPECT_TRUE(high->started()); 2115 EXPECT_TRUE(high->started());
2096 EXPECT_TRUE(high2->started()); 2116 EXPECT_TRUE(high2->started());
2097 EXPECT_TRUE(low->started()); 2117 EXPECT_TRUE(low->started());
2098 } 2118 }
2099 2119
2100 } // unnamed namespace 2120 } // unnamed namespace
2101 2121
2102 } // namespace content 2122 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/resource_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698