Index: Source/core/fetch/ResourceFetcher.cpp |
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp |
index c4e60ef6cb0287542634fca608518185c3e21a0c..a62cb6a937df12a7209905da2f0158061672c426 100644 |
--- a/Source/core/fetch/ResourceFetcher.cpp |
+++ b/Source/core/fetch/ResourceFetcher.cpp |
@@ -57,78 +57,48 @@ using blink::WebURLRequest; |
namespace blink { |
-ResourceLoadPriority ResourceFetcher::loadPriority(Resource::Type type, const FetchRequest& request) |
+static ResourceLoadPriority typeToPriority(Resource::Type type) |
{ |
- // TODO(yoav): Change it here so that priority can be changed even after it was resolved. |
- 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. |
- // The toggles do not depend on each other and can be flipped individually |
- // though the cumulative result will depend on the interaction between them. |
- // 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(); |
- // Increases the priorities for CSS, Scripts, Fonts and Images all by one level |
- // and parser-blocking scripts and visible images by 2. |
- // This is used in conjunction with logic on the Chrome side to raise the threshold |
- // of "layout-blocking" resources and provide a boost to resources that are needed |
- // as soon as possible for something currently on the screen. |
- bool increasePriorities = context().fetchIncreasePriorities(); |
- |
switch (type) { |
case Resource::MainResource: |
- return context().isLowPriorityIframe() ? ResourceLoadPriorityVeryLow : ResourceLoadPriorityVeryHigh; |
+ return ResourceLoadPriorityVeryHigh; |
+ case Resource::XSLStyleSheet: |
+ ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
case Resource::CSSStyleSheet: |
- return increasePriorities ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityHigh; |
+ return ResourceLoadPriorityHigh; |
case Resource::Raw: |
- return request.options().synchronousPolicy == RequestSynchronously ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; |
case Resource::Script: |
- // Async/Defer scripts. |
- if (FetchRequest::LazyLoad == request.defer()) |
- 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 (!request.forPreload()) |
- return increasePriorities ? ResourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; |
- // Non-async/defer scripts discovered by the preload scanner (only early scripts if deferLateScripts is active). |
- 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 when they become visible. |
- return increasePriorities ? ResourceLoadPriorityLow : ResourceLoadPriorityVeryLow; |
+ case Resource::LinkSubresource: |
+ case Resource::TextTrack: |
case Resource::Media: |
- return ResourceLoadPriorityLow; |
- case Resource::XSLStyleSheet: |
- ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
- return ResourceLoadPriorityHigh; |
case Resource::SVGDocument: |
return ResourceLoadPriorityLow; |
+ case Resource::Image: |
case Resource::LinkPrefetch: |
case Resource::LinkPreload: |
return ResourceLoadPriorityVeryLow; |
- case Resource::LinkSubresource: |
- return ResourceLoadPriorityLow; |
- case Resource::TextTrack: |
- return ResourceLoadPriorityLow; |
} |
ASSERT_NOT_REACHED(); |
return ResourceLoadPriorityUnresolved; |
} |
+ResourceLoadPriority ResourceFetcher::loadPriority(Resource::Type type, const FetchRequest& request) |
+{ |
+ // TODO(yoav): Change it here so that priority can be changed even after it was resolved. |
+ if (request.priority() != ResourceLoadPriorityUnresolved) |
+ return request.priority(); |
+ |
+ // Synchronous requests should always be max priority, lest they hang the renderer. |
+ if (request.options().synchronousPolicy == RequestSynchronously) |
+ return ResourceLoadPriorityHighest; |
+ |
+ return context().modifyPriorityForExperiments(typeToPriority(type), type, request); |
+} |
+ |
static void populateResourceTiming(ResourceTimingInfo* info, Resource* resource, bool clearLoadTimings) |
{ |
info->setInitialRequest(resource->resourceRequest()); |
@@ -189,7 +159,6 @@ ResourceFetcher::ResourceFetcher(FetchContext* context) |
, m_autoLoadImages(true) |
, m_imagesEnabled(true) |
, m_allowStaleResources(false) |
- , m_imageFetched(false) |
{ |
#if ENABLE(OILPAN) |
ThreadState::current()->registerPreFinalizer(this); |