Index: Source/core/fetch/ResourceLoadPriorityOptimizer.cpp |
diff --git a/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp b/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp |
index 721386ed1f684e72d47d52ed423ce3482c1c7656..047695ff7d5dada565a78e9c04722d8e689996e7 100644 |
--- a/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp |
+++ b/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp |
@@ -30,6 +30,7 @@ |
#include "config.h" |
#include "core/fetch/ResourceLoadPriorityOptimizer.h" |
+#include "core/frame/Settings.h" |
#include "core/layout/LayoutObject.h" |
#include "platform/TraceEvent.h" |
@@ -55,6 +56,8 @@ ResourceLoadPriorityOptimizer::ResourceAndVisibility::~ResourceAndVisibility() |
} |
ResourceLoadPriorityOptimizer::ResourceLoadPriorityOptimizer() |
+ : m_retrievedSettings(false) |
+ , m_increaseFetchPriorities(false) |
{ |
} |
@@ -64,6 +67,15 @@ ResourceLoadPriorityOptimizer::~ResourceLoadPriorityOptimizer() |
void ResourceLoadPriorityOptimizer::addLayoutObject(LayoutObject* layoutObject) |
{ |
+ if (!m_retrievedSettings) { |
+ // The list of image resources is populated by the layout objects in |
+ // updateAllImageResourcePriorities so it is safe to only check the |
+ // setting when the first layout object is added. It is impossible to |
+ // have images to update without having first populated at least one |
+ // layout object. |
+ m_increaseFetchPriorities = layoutObject->document().settings()->fetchIncreasePriorities(); |
+ m_retrievedSettings = true; |
+ } |
m_objects.add(layoutObject); |
layoutObject->setHasPendingResourceUpdate(true); |
} |
@@ -98,6 +110,11 @@ void ResourceLoadPriorityOptimizer::updateImageResourcesWithLoadPriority() |
ResourceLoadPriority priority = resource.value->status == Visible ? |
ResourceLoadPriorityLow : ResourceLoadPriorityVeryLow; |
+ if (m_increaseFetchPriorities) { |
+ priority = resource.value->status == Visible ? |
+ ResourceLoadPriorityHigh : ResourceLoadPriorityLow; |
+ } |
+ |
if (priority != resource.value->imageResource->resourceRequest().priority()) { |
resource.value->imageResource->mutableResourceRequest().setPriority(priority, resource.value->screenArea); |
resource.value->imageResource->didChangePriority(priority, resource.value->screenArea); |