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

Unified Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 1246493002: Fix Resource Priorities and Scheduling (Blink Side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Switched to individual experiment toggles Created 5 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/fetch/ResourceFetcher.cpp
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
index 24794a10d923f60b411719a5e8c28aefad10d3ee..00332bb6bf291d50fa51c73fd7a1a4ad7970f7b2 100644
--- a/Source/core/fetch/ResourceFetcher.cpp
+++ b/Source/core/fetch/ResourceFetcher.cpp
@@ -63,26 +63,45 @@ ResourceLoadPriority ResourceFetcher::loadPriority(Resource::Type type, const Fe
if (request.priority() != ResourceLoadPriorityUnresolved)
return request.priority();
+ // An image fetch is used to distinguish between "early" and "late" scripts in a document
+ if (type == Resource::Image)
+ m_imageFetched = true;
+
+ // Runtime experiment that change how we prioritize resources.
+ // Background doc: https://docs.google.com/document/d/1bCDuq9H1ih9iNjgzyAL0gpwNFiEP4TZS-YLRp_RuMlc/edit?usp=sharing
+ bool deferLateScripts = context().fetchDeferLateScripts();
+ bool increaseFontPriority = context().fetchIncreaseFontPriority();
+ bool increaseAsyncScriptPriority = context().fetchIncreaseAsyncScriptPriority();
+ bool increasePriorities = context().fetchIncreasePriorities();
Bryan McQuade 2015/08/07 17:30:40 this is the only one that could probably use a com
Pat Meenan 2015/08/07 21:21:14 Added some documentation explaining it. All of th
+
switch (type) {
case Resource::MainResource:
return context().isLowPriorityIframe() ? ResourceLoadPriorityVeryLow : ResourceLoadPriorityVeryHigh;
case Resource::CSSStyleSheet:
- return ResourceLoadPriorityHigh;
+ return increasePriorities ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityHigh;
Bryan McQuade 2015/08/07 17:30:40 just an idea - perhaps we could add a member metho
Pat Meenan 2015/08/07 21:21:14 It's a little more complicated because not all of
Bryan McQuade 2015/08/10 19:27:09 Ah, interesting, didn't realize not all boosts wer
case Resource::Raw:
return request.options().synchronousPolicy == RequestSynchronously ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
case Resource::Script:
- // Async scripts do not block the parser so they get the lowest priority and can be
- // loaded in parser order with images.
+ // Async/Defer scripts.
if (FetchRequest::LazyLoad == request.defer())
- return ResourceLoadPriorityLow;
- return ResourceLoadPriorityMedium;
+ return increaseAsyncScriptPriority ? ResourceLoadPriorityMedium : ResourceLoadPriorityLow;
+ // Reduce the priority of late-body scripts.
+ if (deferLateScripts && request.forPreload() && m_imageFetched)
+ return increasePriorities ? ResourceLoadPriorityMedium : ResourceLoadPriorityLow;
+ // Parser-blocking scripts.
+ if (increasePriorities && !request.forPreload())
+ return increasePriorities ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
+ // Early scripts discovered by the preload scanner.
+ return increasePriorities ? ResourceLoadPriorityHigh : ResourceLoadPriorityMedium;
case Resource::Font:
+ if (increaseFontPriority)
+ return increasePriorities ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityHigh;
+ return increasePriorities ? ResourceLoadPriorityHigh : ResourceLoadPriorityMedium;
case Resource::ImportResource:
return ResourceLoadPriorityMedium;
case Resource::Image:
- // Default images to VeryLow, and promote whatever is visible. This improves
- // speed-index by ~5% on average, ~14% at the 99th percentile.
- return ResourceLoadPriorityVeryLow;
+ // Default images to VeryLow, and promote when they become visible.
+ return increasePriorities ? ResourceLoadPriorityLow : ResourceLoadPriorityVeryLow;
case Resource::Media:
return ResourceLoadPriorityLow;
case Resource::XSLStyleSheet:
@@ -98,6 +117,7 @@ ResourceLoadPriority ResourceFetcher::loadPriority(Resource::Type type, const Fe
case Resource::TextTrack:
return ResourceLoadPriorityLow;
}
+
ASSERT_NOT_REACHED();
return ResourceLoadPriorityUnresolved;
}
@@ -162,6 +182,7 @@ ResourceFetcher::ResourceFetcher(FetchContext* context)
, m_autoLoadImages(true)
, m_imagesEnabled(true)
, m_allowStaleResources(false)
+ , m_imageFetched(false)
{
}

Powered by Google App Engine
This is Rietveld 408576698