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

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

Issue 1319153004: Cleanup ResourceLoadPriority setting (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Guess who uploaded without compiling locally Created 5 years, 3 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
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/loader/FrameFetchContext.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/loader/FrameFetchContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698