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

Unified Diff: Source/core/loader/FrameFetchContext.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/loader/FrameFetchContext.h ('k') | Source/core/loader/FrameFetchContextTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/loader/FrameFetchContext.cpp
diff --git a/Source/core/loader/FrameFetchContext.cpp b/Source/core/loader/FrameFetchContext.cpp
index 51e9019a40d16b6a15d2fca86fb429d4bb4d5c60..874d17a757af8aba8d807865f1c81d0126a8f808 100644
--- a/Source/core/loader/FrameFetchContext.cpp
+++ b/Source/core/loader/FrameFetchContext.cpp
@@ -65,11 +65,14 @@
#include "platform/weborigin/SchemeRegistry.h"
#include "platform/weborigin/SecurityPolicy.h"
+#include <algorithm>
+
namespace blink {
FrameFetchContext::FrameFetchContext(DocumentLoader* loader)
: m_document(nullptr)
, m_documentLoader(loader)
+ , m_imageFetched(false)
{
}
@@ -658,31 +661,60 @@ void FrameFetchContext::countClientHintsViewportWidth()
UseCounter::count(frame(), UseCounter::ClientHintsViewportWidth);
}
-bool FrameFetchContext::isLowPriorityIframe() const
+bool FrameFetchContext::fetchIncreasePriorities() const
{
- return !frame()->isMainFrame() && frame()->settings() && frame()->settings()->lowPriorityIframes();
+ return frame()->settings() && frame()->settings()->fetchIncreasePriorities();
}
-bool FrameFetchContext::fetchDeferLateScripts() const
+ResourceLoadPriority FrameFetchContext::modifyPriorityForExperiments(ResourceLoadPriority priority, Resource::Type type, const FetchRequest& request)
{
- return frame()->settings() && frame()->settings()->fetchDeferLateScripts();
-}
+ // An image fetch is used to distinguish between "early" and "late" scripts in a document
+ if (type == Resource::Image)
+ m_imageFetched = true;
-bool FrameFetchContext::fetchIncreaseFontPriority() const
-{
- return frame()->settings() && frame()->settings()->fetchIncreaseFontPriority();
-}
+ // If Settings is null, we can't verify any experiments are in force.
+ if (!frame()->settings())
+ return priority;
-bool FrameFetchContext::fetchIncreaseAsyncScriptPriority() const
-{
- return frame()->settings() && frame()->settings()->fetchIncreaseAsyncScriptPriority();
-}
+ if (!frame()->isMainFrame() && frame()->settings()->lowPriorityIframes() && type == Resource::MainResource)
+ return ResourceLoadPriorityVeryLow;
-bool FrameFetchContext::fetchIncreasePriorities() const
-{
- return frame()->settings() && frame()->settings()->fetchIncreasePriorities();
-}
+ // Async/Defer scripts.
+ if (type == Resource::Script && FetchRequest::LazyLoad == request.defer())
+ return frame()->settings()->fetchIncreaseAsyncScriptPriority() ? ResourceLoadPriorityMedium : ResourceLoadPriorityLow;
+
+ // 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
+
+ // 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.
+ int modifiedPriority = static_cast<int>(priority);
+ if (fetchIncreasePriorities()) {
+ if (type == Resource::CSSStyleSheet || type == Resource::Script || type == Resource::Font || type == Resource::Image)
+ modifiedPriority++;
+ }
+ if (frame()->settings()->fetchIncreaseFontPriority() && type == Resource::Font)
+ modifiedPriority++;
+
+ if (type == Resource::Script) {
+ // Reduce the priority of late-body scripts.
+ if (frame()->settings()->fetchDeferLateScripts() && request.forPreload() && m_imageFetched)
+ modifiedPriority--;
+ // Parser-blocking scripts.
+ if (fetchIncreasePriorities() && !request.forPreload())
+ modifiedPriority++;
+ }
+
+ // Clamp priority
+ modifiedPriority = std::min(static_cast<int>(ResourceLoadPriorityHighest), std::max(static_cast<int>(ResourceLoadPriorityLowest), modifiedPriority));
+ return static_cast<ResourceLoadPriority>(modifiedPriority);
+}
DEFINE_TRACE(FrameFetchContext)
{
« no previous file with comments | « Source/core/loader/FrameFetchContext.h ('k') | Source/core/loader/FrameFetchContextTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698