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/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 high.reset(); | 481 high.reset(); |
482 EXPECT_TRUE(second_last_singlehost->started()); | 482 EXPECT_TRUE(second_last_singlehost->started()); |
483 EXPECT_FALSE(last_singlehost->started()); | 483 EXPECT_FALSE(last_singlehost->started()); |
484 lows_singlehost.erase(lows_singlehost.begin()); | 484 lows_singlehost.erase(lows_singlehost.begin()); |
485 EXPECT_TRUE(last_singlehost->started()); | 485 EXPECT_TRUE(last_singlehost->started()); |
486 | 486 |
487 // Queue more requests from different hosts until we reach the total limit. | 487 // Queue more requests from different hosts until we reach the total limit. |
488 int expected_slots_left = | 488 int expected_slots_left = |
489 kMaxNumDelayableRequestsPerClient - kMaxNumDelayableRequestsPerHost; | 489 kMaxNumDelayableRequestsPerClient - kMaxNumDelayableRequestsPerHost; |
490 EXPECT_GT(expected_slots_left, 0); | 490 EXPECT_GT(expected_slots_left, 0); |
491 ScopedVector<TestRequest> lows_differenthosts; | 491 ScopedVector<TestRequest> lows_different_host; |
492 for (int i = 0; i < expected_slots_left; ++i) { | 492 for (int i = 0; i < expected_slots_left; ++i) { |
493 string url = "http://host" + base::IntToString(i) + "/low"; | 493 string url = "http://host" + base::IntToString(i) + "/low"; |
494 lows_differenthosts.push_back(NewRequest(url.c_str(), net::LOWEST)); | 494 lows_different_host.push_back(NewRequest(url.c_str(), net::LOWEST)); |
495 EXPECT_TRUE(lows_differenthosts[i]->started()); | 495 EXPECT_TRUE(lows_different_host[i]->started()); |
496 } | 496 } |
497 | 497 |
498 scoped_ptr<TestRequest> last_differenthost(NewRequest("http://host_new/last", | 498 scoped_ptr<TestRequest> last_different_host(NewRequest("http://host_new/last", |
499 net::LOWEST)); | 499 net::LOWEST)); |
500 EXPECT_FALSE(last_differenthost->started()); | 500 EXPECT_FALSE(last_different_host->started()); |
501 } | 501 } |
502 | 502 |
503 TEST_F(ResourceSchedulerTest, RaisePriorityAndStart) { | 503 TEST_F(ResourceSchedulerTest, RaisePriorityAndStart) { |
504 // Dummies to enforce scheduling. | 504 // Dummies to enforce scheduling. |
505 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 505 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
506 scoped_ptr<TestRequest> low(NewRequest("http://host/req", net::LOWEST)); | 506 scoped_ptr<TestRequest> low(NewRequest("http://host/req", net::LOWEST)); |
507 | 507 |
508 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); | 508 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); |
509 EXPECT_FALSE(request->started()); | 509 EXPECT_FALSE(request->started()); |
510 | 510 |
(...skipping 1842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2353 } | 2353 } |
2354 scoped_ptr<TestRequest> lowest(NewRequestWithChildAndRoute( | 2354 scoped_ptr<TestRequest> lowest(NewRequestWithChildAndRoute( |
2355 "http://host/lowest", net::LOWEST, kChildId2, kRouteId2)); | 2355 "http://host/lowest", net::LOWEST, kChildId2, kRouteId2)); |
2356 EXPECT_FALSE(lowest->started()); | 2356 EXPECT_FALSE(lowest->started()); |
2357 scheduler_->OnClientDeleted(kChildId2, kRouteId2); | 2357 scheduler_->OnClientDeleted(kChildId2, kRouteId2); |
2358 high.reset(); | 2358 high.reset(); |
2359 delayable_requests.clear(); | 2359 delayable_requests.clear(); |
2360 EXPECT_TRUE(lowest->started()); | 2360 EXPECT_TRUE(lowest->started()); |
2361 } | 2361 } |
2362 | 2362 |
| 2363 TEST_F(ResourceSchedulerTest, DefaultLayoutBlockingPriority) { |
| 2364 const int kDeferLateScripts = 0; |
| 2365 const int kIncreaseFontPriority = 0; |
| 2366 const int kIncreaseAsyncScriptPriority = 0; |
| 2367 const int kEnablePriorityIncrease = 0; |
| 2368 const int kEnableLayoutBlockingThreshold = 0; |
| 2369 const int kLayoutBlockingThreshold = 0; |
| 2370 const int kMaxNumDelayableWhileLayoutBlocking = 1; |
| 2371 const int kMaxNumDelayableRequestsPerClient = 10; |
| 2372 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2373 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2374 kDeferLateScripts, |
| 2375 kIncreaseFontPriority, |
| 2376 kIncreaseAsyncScriptPriority, |
| 2377 kEnablePriorityIncrease, |
| 2378 kEnableLayoutBlockingThreshold, |
| 2379 kLayoutBlockingThreshold, |
| 2380 kMaxNumDelayableWhileLayoutBlocking, |
| 2381 kMaxNumDelayableRequestsPerClient))); |
| 2382 InitializeScheduler(); |
| 2383 scoped_ptr<TestRequest> high( |
| 2384 NewRequest("http://hosthigh/high", net::HIGHEST)); |
| 2385 scoped_ptr<TestRequest> high2( |
| 2386 NewRequest("http://hosthigh/high", net::HIGHEST)); |
| 2387 scoped_ptr<TestRequest> medium( |
| 2388 NewRequest("http://hostmedium/medium", net::MEDIUM)); |
| 2389 scoped_ptr<TestRequest> medium2( |
| 2390 NewRequest("http://hostmedium/medium", net::MEDIUM)); |
| 2391 scoped_ptr<TestRequest> low(NewRequest("http://hostlow/low", net::LOW)); |
| 2392 scoped_ptr<TestRequest> low2(NewRequest("http://hostlow/low", net::LOW)); |
| 2393 scoped_ptr<TestRequest> lowest(NewRequest("http://hostlowest/lowest", net::LOW
EST)); |
| 2394 scoped_ptr<TestRequest> lowest2( |
| 2395 NewRequest("http://hostlowest/lowest", net::LOWEST)); |
| 2396 EXPECT_TRUE(high->started()); |
| 2397 EXPECT_TRUE(high2->started()); |
| 2398 EXPECT_TRUE(medium->started()); |
| 2399 EXPECT_TRUE(medium2->started()); |
| 2400 EXPECT_TRUE(low->started()); |
| 2401 EXPECT_TRUE(low2->started()); |
| 2402 EXPECT_TRUE(lowest->started()); |
| 2403 EXPECT_FALSE(lowest2->started()); |
| 2404 lowest.reset(); |
| 2405 EXPECT_TRUE(lowest2->started()); |
| 2406 } |
| 2407 |
| 2408 TEST_F(ResourceSchedulerTest, IncreaseLayoutBlockingPriority) { |
| 2409 // Changes the level of priorities that are allowed during layout-blocking |
| 2410 // from net::LOWEST to net::LOW. |
| 2411 const int kDeferLateScripts = 0; |
| 2412 const int kIncreaseFontPriority = 0; |
| 2413 const int kIncreaseAsyncScriptPriority = 0; |
| 2414 const int kEnablePriorityIncrease = 1; |
| 2415 const int kEnableLayoutBlockingThreshold = 0; |
| 2416 const int kLayoutBlockingThreshold = 0; |
| 2417 const int kMaxNumDelayableWhileLayoutBlocking = 1; |
| 2418 const int kMaxNumDelayableRequestsPerClient = 10; |
| 2419 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2420 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2421 kDeferLateScripts, |
| 2422 kIncreaseFontPriority, |
| 2423 kIncreaseAsyncScriptPriority, |
| 2424 kEnablePriorityIncrease, |
| 2425 kEnableLayoutBlockingThreshold, |
| 2426 kLayoutBlockingThreshold, |
| 2427 kMaxNumDelayableWhileLayoutBlocking, |
| 2428 kMaxNumDelayableRequestsPerClient))); |
| 2429 InitializeScheduler(); |
| 2430 scoped_ptr<TestRequest> high( |
| 2431 NewRequest("http://hosthigh/high", net::HIGHEST)); |
| 2432 scoped_ptr<TestRequest> high2( |
| 2433 NewRequest("http://hosthigh/high", net::HIGHEST)); |
| 2434 scoped_ptr<TestRequest> medium( |
| 2435 NewRequest("http://hostmedium/medium", net::MEDIUM)); |
| 2436 scoped_ptr<TestRequest> medium2( |
| 2437 NewRequest("http://hostmedium/medium", net::MEDIUM)); |
| 2438 scoped_ptr<TestRequest> low(NewRequest("http://hostlow/low", net::LOW)); |
| 2439 scoped_ptr<TestRequest> low2(NewRequest("http://hostlow/low", net::LOW)); |
| 2440 scoped_ptr<TestRequest> lowest(NewRequest("http://hostlowest/lowest", net::LOW
EST)); |
| 2441 scoped_ptr<TestRequest> lowest2( |
| 2442 NewRequest("http://hostlowest/lowest", net::LOWEST)); |
| 2443 EXPECT_TRUE(high->started()); |
| 2444 EXPECT_TRUE(high2->started()); |
| 2445 EXPECT_TRUE(medium->started()); |
| 2446 EXPECT_TRUE(medium2->started()); |
| 2447 EXPECT_TRUE(low->started()); |
| 2448 EXPECT_FALSE(low2->started()); |
| 2449 EXPECT_FALSE(lowest->started()); |
| 2450 EXPECT_FALSE(lowest2->started()); |
| 2451 low.reset(); |
| 2452 EXPECT_TRUE(low2->started()); |
| 2453 EXPECT_FALSE(lowest->started()); |
| 2454 EXPECT_FALSE(lowest2->started()); |
| 2455 low2.reset(); |
| 2456 EXPECT_TRUE(lowest->started()); |
| 2457 EXPECT_FALSE(lowest2->started()); |
| 2458 lowest.reset(); |
| 2459 EXPECT_TRUE(lowest2->started()); |
| 2460 } |
| 2461 |
| 2462 TEST_F(ResourceSchedulerTest, UseLayoutBlockingThresholdOne) { |
| 2463 // Prevents any low priority requests from starting while more than |
| 2464 // N high priority requests are pending (before body). |
| 2465 const int kDeferLateScripts = 0; |
| 2466 const int kIncreaseFontPriority = 0; |
| 2467 const int kIncreaseAsyncScriptPriority = 0; |
| 2468 const int kEnablePriorityIncrease = 0; |
| 2469 const int kEnableLayoutBlockingThreshold = 1; |
| 2470 const int kLayoutBlockingThreshold = 1; |
| 2471 const int kMaxNumDelayableWhileLayoutBlocking = 1; |
| 2472 const int kMaxNumDelayableRequestsPerClient = 10; |
| 2473 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2474 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2475 kDeferLateScripts, |
| 2476 kIncreaseFontPriority, |
| 2477 kIncreaseAsyncScriptPriority, |
| 2478 kEnablePriorityIncrease, |
| 2479 kEnableLayoutBlockingThreshold, |
| 2480 kLayoutBlockingThreshold, |
| 2481 kMaxNumDelayableWhileLayoutBlocking, |
| 2482 kMaxNumDelayableRequestsPerClient))); |
| 2483 InitializeScheduler(); |
| 2484 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 2485 scoped_ptr<TestRequest> high2(NewRequest("http://host/high", net::HIGHEST)); |
| 2486 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 2487 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 2488 EXPECT_TRUE(high->started()); |
| 2489 EXPECT_TRUE(high2->started()); |
| 2490 EXPECT_FALSE(low->started()); |
| 2491 EXPECT_FALSE(low2->started()); |
| 2492 high.reset(); |
| 2493 EXPECT_TRUE(low->started()); |
| 2494 EXPECT_FALSE(low2->started()); |
| 2495 high2.reset(); |
| 2496 EXPECT_FALSE(low2->started()); |
| 2497 scheduler()->OnWillInsertBody(kChildId, kRouteId); |
| 2498 EXPECT_TRUE(low2->started()); |
| 2499 } |
| 2500 |
| 2501 TEST_F(ResourceSchedulerTest, UseLayoutBlockingThresholdTwo) { |
| 2502 // Prevents any low priority requests from starting while more than |
| 2503 // N high priority requests are pending (before body). |
| 2504 const int kDeferLateScripts = 0; |
| 2505 const int kIncreaseFontPriority = 0; |
| 2506 const int kIncreaseAsyncScriptPriority = 0; |
| 2507 const int kEnablePriorityIncrease = 0; |
| 2508 const int kEnableLayoutBlockingThreshold = 1; |
| 2509 const int kLayoutBlockingThreshold = 2; |
| 2510 const int kMaxNumDelayableWhileLayoutBlocking = 1; |
| 2511 const int kMaxNumDelayableRequestsPerClient = 10; |
| 2512 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2513 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2514 kDeferLateScripts, |
| 2515 kIncreaseFontPriority, |
| 2516 kIncreaseAsyncScriptPriority, |
| 2517 kEnablePriorityIncrease, |
| 2518 kEnableLayoutBlockingThreshold, |
| 2519 kLayoutBlockingThreshold, |
| 2520 kMaxNumDelayableWhileLayoutBlocking, |
| 2521 kMaxNumDelayableRequestsPerClient))); |
| 2522 InitializeScheduler(); |
| 2523 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 2524 scoped_ptr<TestRequest> high2(NewRequest("http://host/high", net::HIGHEST)); |
| 2525 scoped_ptr<TestRequest> high3(NewRequest("http://host/high", net::HIGHEST)); |
| 2526 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 2527 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 2528 EXPECT_TRUE(high->started()); |
| 2529 EXPECT_TRUE(high2->started()); |
| 2530 EXPECT_TRUE(high3->started()); |
| 2531 EXPECT_FALSE(low->started()); |
| 2532 EXPECT_FALSE(low2->started()); |
| 2533 high.reset(); |
| 2534 EXPECT_TRUE(low->started()); |
| 2535 EXPECT_FALSE(low2->started()); |
| 2536 high2.reset(); |
| 2537 high3.reset(); |
| 2538 EXPECT_FALSE(low2->started()); |
| 2539 scheduler()->OnWillInsertBody(kChildId, kRouteId); |
| 2540 EXPECT_TRUE(low2->started()); |
| 2541 } |
| 2542 |
| 2543 TEST_F(ResourceSchedulerTest, TwoDelayableLoadsUntilBodyInserted) { |
| 2544 // Allow for two low priority requests to be in flight at any point in time |
| 2545 // during the layout-blocking phase of loading. |
| 2546 const int kDeferLateScripts = 0; |
| 2547 const int kIncreaseFontPriority = 0; |
| 2548 const int kIncreaseAsyncScriptPriority = 0; |
| 2549 const int kEnablePriorityIncrease = 0; |
| 2550 const int kEnableLayoutBlockingThreshold = 0; |
| 2551 const int kLayoutBlockingThreshold = 0; |
| 2552 const int kMaxNumDelayableWhileLayoutBlocking = 2; |
| 2553 const int kMaxNumDelayableRequestsPerClient = 10; |
| 2554 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2555 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2556 kDeferLateScripts, |
| 2557 kIncreaseFontPriority, |
| 2558 kIncreaseAsyncScriptPriority, |
| 2559 kEnablePriorityIncrease, |
| 2560 kEnableLayoutBlockingThreshold, |
| 2561 kLayoutBlockingThreshold, |
| 2562 kMaxNumDelayableWhileLayoutBlocking, |
| 2563 kMaxNumDelayableRequestsPerClient))); |
| 2564 InitializeScheduler(); |
| 2565 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 2566 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 2567 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 2568 scoped_ptr<TestRequest> low3(NewRequest("http://host/low", net::LOWEST)); |
| 2569 EXPECT_TRUE(high->started()); |
| 2570 EXPECT_TRUE(low->started()); |
| 2571 EXPECT_TRUE(low2->started()); |
| 2572 EXPECT_FALSE(low3->started()); |
| 2573 high.reset(); |
| 2574 scheduler()->OnWillInsertBody(kChildId, kRouteId); |
| 2575 EXPECT_TRUE(low3->started()); |
| 2576 } |
| 2577 |
| 2578 TEST_F(ResourceSchedulerTest, |
| 2579 UseLayoutBlockingThresholdOneAndTwoDelayableLoadsUntilBodyInserted) { |
| 2580 // Allow for two low priority requests to be in flight during the |
| 2581 // layout-blocking phase of loading but only when there is not more than one |
| 2582 // in-flight high priority request. |
| 2583 const int kDeferLateScripts = 0; |
| 2584 const int kIncreaseFontPriority = 0; |
| 2585 const int kIncreaseAsyncScriptPriority = 0; |
| 2586 const int kEnablePriorityIncrease = 0; |
| 2587 const int kEnableLayoutBlockingThreshold = 1; |
| 2588 const int kLayoutBlockingThreshold = 1; |
| 2589 const int kMaxNumDelayableWhileLayoutBlocking = 2; |
| 2590 const int kMaxNumDelayableRequestsPerClient = 10; |
| 2591 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2592 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2593 kDeferLateScripts, |
| 2594 kIncreaseFontPriority, |
| 2595 kIncreaseAsyncScriptPriority, |
| 2596 kEnablePriorityIncrease, |
| 2597 kEnableLayoutBlockingThreshold, |
| 2598 kLayoutBlockingThreshold, |
| 2599 kMaxNumDelayableWhileLayoutBlocking, |
| 2600 kMaxNumDelayableRequestsPerClient))); |
| 2601 InitializeScheduler(); |
| 2602 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 2603 scoped_ptr<TestRequest> high2(NewRequest("http://host/high", net::HIGHEST)); |
| 2604 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 2605 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 2606 scoped_ptr<TestRequest> low3(NewRequest("http://host/low", net::LOWEST)); |
| 2607 EXPECT_TRUE(high->started()); |
| 2608 EXPECT_TRUE(high2->started()); |
| 2609 EXPECT_FALSE(low->started()); |
| 2610 EXPECT_FALSE(low2->started()); |
| 2611 EXPECT_FALSE(low3->started()); |
| 2612 high.reset(); |
| 2613 EXPECT_TRUE(low->started()); |
| 2614 EXPECT_TRUE(low2->started()); |
| 2615 EXPECT_FALSE(low3->started()); |
| 2616 high2.reset(); |
| 2617 scheduler()->OnWillInsertBody(kChildId, kRouteId); |
| 2618 EXPECT_TRUE(low3->started()); |
| 2619 } |
| 2620 |
| 2621 TEST_F(ResourceSchedulerTest, TwentyMaxNumDelayableRequestsPerClient) { |
| 2622 // Do not exceed 20 low-priority requests to be in flight across all hosts |
| 2623 // at any point in time. |
| 2624 const int kDeferLateScripts = 0; |
| 2625 const int kIncreaseFontPriority = 0; |
| 2626 const int kIncreaseAsyncScriptPriority = 0; |
| 2627 const int kEnablePriorityIncrease = 0; |
| 2628 const int kEnableLayoutBlockingThreshold = 0; |
| 2629 const int kLayoutBlockingThreshold = 0; |
| 2630 const int kMaxNumDelayableWhileLayoutBlocking = 1; |
| 2631 const int kMaxNumDelayableRequestsPerClient = 20; |
| 2632 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2633 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2634 kDeferLateScripts, |
| 2635 kIncreaseFontPriority, |
| 2636 kIncreaseAsyncScriptPriority, |
| 2637 kEnablePriorityIncrease, |
| 2638 kEnableLayoutBlockingThreshold, |
| 2639 kLayoutBlockingThreshold, |
| 2640 kMaxNumDelayableWhileLayoutBlocking, |
| 2641 kMaxNumDelayableRequestsPerClient))); |
| 2642 InitializeScheduler(); |
| 2643 |
| 2644 // Only load low priority resources if there's a body. |
| 2645 scheduler()->OnWillInsertBody(kChildId, kRouteId); |
| 2646 |
| 2647 // Queue requests from different hosts until the total limit is reached. |
| 2648 ScopedVector<TestRequest> lows_different_host; |
| 2649 for (int i = 0; i < kMaxNumDelayableRequestsPerClient; ++i) { |
| 2650 string url = "http://host" + base::IntToString(i) + "/low"; |
| 2651 lows_different_host.push_back(NewRequest(url.c_str(), net::LOWEST)); |
| 2652 EXPECT_TRUE(lows_different_host[i]->started()); |
| 2653 } |
| 2654 |
| 2655 scoped_ptr<TestRequest> last_different_host(NewRequest("http://host_new/last", |
| 2656 net::LOWEST)); |
| 2657 EXPECT_FALSE(last_different_host->started()); |
| 2658 } |
| 2659 |
| 2660 TEST_F(ResourceSchedulerTest, |
| 2661 TwentyMaxNumDelayableRequestsPerClientWithEverythingEnabled) { |
| 2662 // Do not exceed 20 low-priority requests to be in flight across all hosts |
| 2663 // at any point in time and make sure it still works correctly when the other |
| 2664 // options are toggled. |
| 2665 const int kDeferLateScripts = 1; |
| 2666 const int kIncreaseFontPriority = 1; |
| 2667 const int kIncreaseAsyncScriptPriority = 1; |
| 2668 const int kEnablePriorityIncrease = 1; |
| 2669 const int kEnableLayoutBlockingThreshold = 1; |
| 2670 const int kLayoutBlockingThreshold = 1; |
| 2671 const int kMaxNumDelayableWhileLayoutBlocking = 1; |
| 2672 const int kMaxNumDelayableRequestsPerClient = 20; |
| 2673 ASSERT_TRUE(InitializeFieldTrials(base::StringPrintf( |
| 2674 "ResourcePriorities/LayoutBlocking_%d%d%d%d%d_%d_%d_%d/", |
| 2675 kDeferLateScripts, |
| 2676 kIncreaseFontPriority, |
| 2677 kIncreaseAsyncScriptPriority, |
| 2678 kEnablePriorityIncrease, |
| 2679 kEnableLayoutBlockingThreshold, |
| 2680 kLayoutBlockingThreshold, |
| 2681 kMaxNumDelayableWhileLayoutBlocking, |
| 2682 kMaxNumDelayableRequestsPerClient))); |
| 2683 InitializeScheduler(); |
| 2684 |
| 2685 // Only load low priority resources if there's a body. |
| 2686 scheduler()->OnWillInsertBody(kChildId, kRouteId); |
| 2687 |
| 2688 // Queue requests from different hosts until the total limit is reached. |
| 2689 ScopedVector<TestRequest> lows_different_host; |
| 2690 for (int i = 0; i < kMaxNumDelayableRequestsPerClient; ++i) { |
| 2691 string url = "http://host" + base::IntToString(i) + "/low"; |
| 2692 lows_different_host.push_back(NewRequest(url.c_str(), net::LOWEST)); |
| 2693 EXPECT_TRUE(lows_different_host[i]->started()); |
| 2694 } |
| 2695 |
| 2696 scoped_ptr<TestRequest> last_different_host(NewRequest("http://host_new/last", |
| 2697 net::LOWEST)); |
| 2698 EXPECT_FALSE(last_different_host->started()); |
| 2699 } |
| 2700 |
2363 } // unnamed namespace | 2701 } // unnamed namespace |
2364 | 2702 |
2365 } // namespace content | 2703 } // namespace content |
OLD | NEW |