diff options
author | simonhatch@chromium.org <simonhatch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-31 21:59:47 +0000 |
---|---|---|
committer | simonhatch@chromium.org <simonhatch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-31 21:59:47 +0000 |
commit | 0685520661350c7355d1f9c0790463650d631309 (patch) | |
tree | 7834ee37eb5d2f787b68df00f3c0c4ffacb9762e /content/browser/loader/resource_scheduler_unittest.cc | |
parent | 26a801fb5d2739bb45ba03e5c9a57a56d6961382 (diff) | |
download | chromium_src-0685520661350c7355d1f9c0790463650d631309.zip chromium_src-0685520661350c7355d1f9c0790463650d631309.tar.gz chromium_src-0685520661350c7355d1f9c0790463650d631309.tar.bz2 |
This CL adds an intra-priority level sorting value for finer grained control of resource loading. The blink side of this patch sorts visible images by estimated on screen real-estate, preferring to download images with more visual impact first. Ie. On a page with a large banner, and dozens of small icons, the large banner will most likely be scheduled ahead of the others.
In the future, we can also use this to experiment with other signals, ie. prioritize by distance to viewport.
This needs https://codereview.chromium.org/153983004/ to land first.
In our tests, this was a nice win on speed-index for desktop, with a gain of about ~2-3%.
BUG=
Review URL: https://codereview.chromium.org/146333004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260665 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/loader/resource_scheduler_unittest.cc')
-rw-r--r-- | content/browser/loader/resource_scheduler_unittest.cc | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc index 912c2bb..e677f8f 100644 --- a/content/browser/loader/resource_scheduler_unittest.cc +++ b/content/browser/loader/resource_scheduler_unittest.cc @@ -189,13 +189,15 @@ class ResourceSchedulerTest : public testing::Test { } void ChangeRequestPriority(TestRequest* request, - net::RequestPriority new_priority) { + net::RequestPriority new_priority, + int intra_priority = 0) { scoped_refptr<FakeResourceMessageFilter> filter( new FakeResourceMessageFilter(kChildId)); const ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( request->url_request()); const GlobalRequestID& id = info->GetGlobalRequestID(); - ResourceHostMsg_DidChangePriority msg(id.request_id, new_priority); + ResourceHostMsg_DidChangePriority msg(id.request_id, new_priority, + intra_priority); bool ok = false; rdh_.OnMessageReceived(msg, filter.get(), &ok); EXPECT_TRUE(ok); @@ -454,6 +456,28 @@ TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) { EXPECT_FALSE(idle->started()); } +TEST_F(ResourceSchedulerTest, HigherIntraPriorityGoesToFrontOfQueue) { + // Dummies to enforce scheduling. + scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); + scoped_ptr<TestRequest> low(NewRequest("http://host/high", net::LOWEST)); + + const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. + ScopedVector<TestRequest> lows; + for (int i = 0; i < kMaxNumDelayableRequestsPerClient; ++i) { + string url = "http://host/low" + base::IntToString(i); + lows.push_back(NewRequest(url.c_str(), net::IDLE)); + } + + scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); + EXPECT_FALSE(request->started()); + + ChangeRequestPriority(request.get(), net::IDLE, 1); + EXPECT_FALSE(request->started()); + + scheduler_.OnWillInsertBody(kChildId, kRouteId); + EXPECT_TRUE(request->started()); +} + TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) { // Dummies to enforce scheduling. scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |