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) |
{ |
} |