Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "content/browser/browser_thread_impl.h" | 10 #include "content/browser/browser_thread_impl.h" |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 311 | 311 |
| 312 TEST_F(ResourceSchedulerTest, LimitedNumberOfDelayableRequestsInFlight) { | 312 TEST_F(ResourceSchedulerTest, LimitedNumberOfDelayableRequestsInFlight) { |
| 313 // We only load low priority resources if there's a body. | 313 // We only load low priority resources if there's a body. |
| 314 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 314 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 315 | 315 |
| 316 // Throw in one high priority request to make sure that's not a factor. | 316 // Throw in one high priority request to make sure that's not a factor. |
| 317 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 317 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 318 EXPECT_TRUE(high->started()); | 318 EXPECT_TRUE(high->started()); |
| 319 | 319 |
| 320 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. | 320 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. |
| 321 ScopedVector<TestRequest> lows; | 321 const int kMaxNumDelayableRequestsPerHost = 6; |
| 322 for (int i = 0; i < kMaxNumDelayableRequestsPerClient; ++i) { | 322 ScopedVector<TestRequest> lows_singlehost; |
| 323 // Queue up to the per-host limit (we subtract the current high-pri request). | |
| 324 for (int i = 0; i < kMaxNumDelayableRequestsPerHost - 1; ++i) { | |
| 323 string url = "http://host/low" + base::IntToString(i); | 325 string url = "http://host/low" + base::IntToString(i); |
| 324 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); | 326 lows_singlehost.push_back(NewRequest(url.c_str(), net::LOWEST)); |
| 325 EXPECT_TRUE(lows[i]->started()); | 327 EXPECT_TRUE(lows_singlehost[i]->started()); |
| 326 } | 328 } |
| 327 | 329 |
| 328 scoped_ptr<TestRequest> last(NewRequest("http://host/last", net::LOWEST)); | 330 scoped_ptr<TestRequest> second_last_singlehost(NewRequest("http://host/last", |
| 329 EXPECT_FALSE(last->started()); | 331 net::LOWEST)); |
|
James Simonsen
2013/11/13 01:26:23
nit: fix indenting
oystein (OOO til 10th of July)
2013/11/14 00:19:07
Done.
| |
| 332 scoped_ptr<TestRequest> last_singlehost(NewRequest("http://host/s_last", | |
| 333 net::LOWEST)); | |
| 334 | |
| 335 EXPECT_FALSE(second_last_singlehost->started()); | |
| 330 high.reset(); | 336 high.reset(); |
| 331 EXPECT_FALSE(last->started()); | 337 EXPECT_TRUE(second_last_singlehost->started()); |
| 332 lows.erase(lows.begin()); | 338 EXPECT_FALSE(last_singlehost->started()); |
| 333 EXPECT_TRUE(last->started()); | 339 lows_singlehost.erase(lows_singlehost.begin()); |
| 340 EXPECT_TRUE(last_singlehost->started()); | |
| 341 | |
| 342 // Queue more requests from different hosts until we reach the total limit. | |
| 343 int expected_slots_left = | |
| 344 kMaxNumDelayableRequestsPerClient - kMaxNumDelayableRequestsPerHost; | |
| 345 EXPECT_GT(expected_slots_left, 0); | |
| 346 ScopedVector<TestRequest> lows_differenthosts; | |
| 347 for (int i = 0; i < expected_slots_left; ++i) { | |
| 348 string url = "http://host" + base::IntToString(i) + "/low"; | |
| 349 lows_differenthosts.push_back(NewRequest(url.c_str(), net::LOWEST)); | |
| 350 EXPECT_TRUE(lows_differenthosts[i]->started()); | |
| 351 } | |
| 352 | |
| 353 scoped_ptr<TestRequest> last_differenthost(NewRequest("http://host_new/last", | |
| 354 net::LOWEST)); | |
|
James Simonsen
2013/11/13 01:26:23
indent
oystein (OOO til 10th of July)
2013/11/14 00:19:07
Done.
| |
| 355 EXPECT_FALSE(last_differenthost->started()); | |
| 334 } | 356 } |
| 335 | 357 |
| 336 TEST_F(ResourceSchedulerTest, RaisePriorityAndStart) { | 358 TEST_F(ResourceSchedulerTest, RaisePriorityAndStart) { |
| 337 // Dummies to enforce scheduling. | 359 // Dummies to enforce scheduling. |
| 338 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 360 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 339 scoped_ptr<TestRequest> low(NewRequest("http://host/req", net::LOWEST)); | 361 scoped_ptr<TestRequest> low(NewRequest("http://host/req", net::LOWEST)); |
| 340 | 362 |
| 341 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); | 363 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); |
| 342 EXPECT_FALSE(request->started()); | 364 EXPECT_FALSE(request->started()); |
| 343 | 365 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 384 ChangeRequestPriority(request.get(), net::IDLE); | 406 ChangeRequestPriority(request.get(), net::IDLE); |
| 385 EXPECT_FALSE(request->started()); | 407 EXPECT_FALSE(request->started()); |
| 386 EXPECT_FALSE(idle->started()); | 408 EXPECT_FALSE(idle->started()); |
| 387 | 409 |
| 388 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. | 410 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. |
| 389 // 2 fewer filler requests: 1 for the "low" dummy at the start, and 1 for the | 411 // 2 fewer filler requests: 1 for the "low" dummy at the start, and 1 for the |
| 390 // one at the end, which will be tested. | 412 // one at the end, which will be tested. |
| 391 const int kNumFillerRequests = kMaxNumDelayableRequestsPerClient - 2; | 413 const int kNumFillerRequests = kMaxNumDelayableRequestsPerClient - 2; |
| 392 ScopedVector<TestRequest> lows; | 414 ScopedVector<TestRequest> lows; |
| 393 for (int i = 0; i < kNumFillerRequests; ++i) { | 415 for (int i = 0; i < kNumFillerRequests; ++i) { |
| 394 string url = "http://host/low" + base::IntToString(i); | 416 string url = "http://host" + base::IntToString(i) + "/low"; |
| 395 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); | 417 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); |
| 396 } | 418 } |
| 397 | 419 |
| 398 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 420 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 399 EXPECT_FALSE(request->started()); | 421 EXPECT_FALSE(request->started()); |
| 400 EXPECT_TRUE(idle->started()); | 422 EXPECT_TRUE(idle->started()); |
| 401 } | 423 } |
| 402 | 424 |
| 403 TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) { | 425 TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) { |
| 404 // Dummies to enforce scheduling. | 426 // Dummies to enforce scheduling. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 436 scoped_ptr<TestRequest> low(NewRequest("http://host/high", net::LOWEST)); | 458 scoped_ptr<TestRequest> low(NewRequest("http://host/high", net::LOWEST)); |
| 437 | 459 |
| 438 scoped_ptr<TestRequest> request( | 460 scoped_ptr<TestRequest> request( |
| 439 NewRequest("chrome-extension://req", net::LOWEST)); | 461 NewRequest("chrome-extension://req", net::LOWEST)); |
| 440 EXPECT_TRUE(request->started()); | 462 EXPECT_TRUE(request->started()); |
| 441 } | 463 } |
| 442 | 464 |
| 443 } // unnamed namespace | 465 } // unnamed namespace |
| 444 | 466 |
| 445 } // namespace content | 467 } // namespace content |
| OLD | NEW |