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

Unified Diff: Source/WebCore/rendering/RenderView.h

Issue 13913013: Only update composited scrolling state when necessary (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: . Created 7 years, 8 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/WebCore/rendering/RenderView.h
diff --git a/Source/WebCore/rendering/RenderView.h b/Source/WebCore/rendering/RenderView.h
index 33d8e3c4ca249b06004e92c0a54b31dbd826e126..b69cb47fd50a89c4ebe0a317af6a421a25578976 100644
--- a/Source/WebCore/rendering/RenderView.h
+++ b/Source/WebCore/rendering/RenderView.h
@@ -39,8 +39,28 @@ class RenderWidget;
class CustomFilterGlobalContext;
#endif
+enum CompositedScrollingUpdateMode {
+ UpdateNeedsCompositedScrolling,
+ UpdateDescendantsAreContiguousInStackingOrder
+};
+
+// This object allows postponing calls to RenderLayer::updateNeedsCompositedScrolling
+// while any instance is in scope. When the last instance is destructed, all
+// updates are processed. This allows us to postpone updates during layer list
+// updates. (If we didn't postpone the updates, they would cause errors since
+// they require clean lists).
+struct ScopedCompositedScrollingUpdater {
jamesr 2013/04/09 21:10:00 in particular this class seems very hacky
+ ScopedCompositedScrollingUpdater(RenderView*);
+ ScopedCompositedScrollingUpdater(RenderLayer*, CompositedScrollingUpdateMode);
+ ~ScopedCompositedScrollingUpdater();
+private:
+ RenderView* m_renderView;
+};
+
class RenderView : public RenderBlock {
public:
+ friend struct ScopedCompositedScrollingUpdater;
+
explicit RenderView(Document*);
virtual ~RenderView();
@@ -214,7 +234,9 @@ public:
void addRenderCounter() { m_renderCounterCount++; }
void removeRenderCounter() { ASSERT(m_renderCounterCount > 0); m_renderCounterCount--; }
bool hasRenderCounters() { return m_renderCounterCount; }
-
+
+ void cancelScheduledCompositedScrollingUpdatesForLayer(RenderLayer*);
+
virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) OVERRIDE;
protected:
@@ -316,6 +338,11 @@ private:
LayoutState* m_layoutState;
unsigned m_layoutStateDisableCount;
OwnPtr<RenderLayerCompositor> m_compositor;
+
+ unsigned m_scopedCompositedScrollingUpdatersCount;
+ HashSet<RenderLayer*> m_pendingCompositedScrollingUpdates;
+ HashSet<RenderLayer*> m_pendingContiguityUpdates;
+
#if ENABLE(CSS_SHADERS) && USE(3D_GRAPHICS)
OwnPtr<CustomFilterGlobalContext> m_customFilterGlobalContext;
#endif

Powered by Google App Engine
This is Rietveld 408576698