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

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

Issue 131233003: Refactor ResourceLoadPriorityOptimizer to avoid walking render tree (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Changes from review. Created 6 years, 11 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
Index: Source/core/fetch/ResourceLoadPriorityOptimizer.cpp
diff --git a/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp b/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp
index 29882526a7c3c9c29648936219152a8f0d5d5aef..40a6f56ab672ae8e99651265e4f1d5084798e74e 100644
--- a/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp
+++ b/Source/core/fetch/ResourceLoadPriorityOptimizer.cpp
@@ -30,9 +30,18 @@
#include "config.h"
#include "core/fetch/ResourceLoadPriorityOptimizer.h"
+#include "core/rendering/RenderObject.h"
+
+#include "wtf/Vector.h"
namespace WebCore {
+ResourceLoadPriorityOptimizer* ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()
+{
+ DEFINE_STATIC_LOCAL(ResourceLoadPriorityOptimizer, s_renderLoadOptimizer, ());
+ return &s_renderLoadOptimizer;
+}
+
ResourceLoadPriorityOptimizer::ResourceAndVisibility::ResourceAndVisibility(ImageResource* image, VisibilityStatus v)
: imageResource(image)
, status(v)
@@ -49,6 +58,37 @@ ResourceLoadPriorityOptimizer::ResourceLoadPriorityOptimizer()
ResourceLoadPriorityOptimizer::~ResourceLoadPriorityOptimizer()
{
+}
+
+void ResourceLoadPriorityOptimizer::addRenderObject(RenderObject* renderer)
+{
+ m_objects.add(renderer);
+ renderer->setHasPendingResourceUpdate(true);
+}
+
+void ResourceLoadPriorityOptimizer::removeRenderObject(RenderObject* renderer)
+{
+ if (!renderer->hasPendingResourceUpdate())
+ return;
+ m_objects.remove(renderer);
+ renderer->setHasPendingResourceUpdate(false);
+}
+
+void ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities()
+{
+ m_imageResources.clear();
+
+ Vector<RenderObject*> objectsToRemove;
+ for (RenderObjectSet::iterator it = m_objects.begin(); it != m_objects.end(); ++it) {
+ RenderObject* obj = *it;
+ if (!obj->updateImageLoadingPriorities()) {
+ objectsToRemove.append(obj);
+ }
+ }
+
+ for (Vector<RenderObject*>::iterator it = objectsToRemove.begin(); it != objectsToRemove.end(); ++it)
+ m_objects.remove(*it);
+
updateImageResourcesWithLoadPriority();
}

Powered by Google App Engine
This is Rietveld 408576698