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

Side by Side Diff: Source/WebCore/rendering/RenderLayer.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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // Also unique to paginated fragments. An additional clip that applies to th e layer. It is in layer-local 308 // Also unique to paginated fragments. An additional clip that applies to th e layer. It is in layer-local
309 // (physical) coordinates. 309 // (physical) coordinates.
310 LayoutRect paginationClip; 310 LayoutRect paginationClip;
311 }; 311 };
312 312
313 typedef Vector<LayerFragment, 1> LayerFragments; 313 typedef Vector<LayerFragment, 1> LayerFragments;
314 314
315 class RenderLayer : public ScrollableArea { 315 class RenderLayer : public ScrollableArea {
316 public: 316 public:
317 friend class RenderReplica; 317 friend class RenderReplica;
318 friend struct ScopedCompositedScrollingUpdater;
318 319
319 RenderLayer(RenderLayerModelObject*); 320 RenderLayer(RenderLayerModelObject*);
320 ~RenderLayer(); 321 ~RenderLayer();
321 322
322 String name() const; 323 String name() const;
323 324
324 RenderLayerModelObject* renderer() const { return m_renderer; } 325 RenderLayerModelObject* renderer() const { return m_renderer; }
325 RenderBox* renderBox() const { return m_renderer && m_renderer->isBox() ? to RenderBox(m_renderer) : 0; } 326 RenderBox* renderBox() const { return m_renderer && m_renderer->isBox() ? to RenderBox(m_renderer) : 0; }
326 RenderLayer* parent() const { return m_parent; } 327 RenderLayer* parent() const { return m_parent; }
327 RenderLayer* previousSibling() const { return m_previous; } 328 RenderLayer* previousSibling() const { return m_previous; }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 // A stacking container can have z-order lists. All stacking contexts are 491 // A stacking container can have z-order lists. All stacking contexts are
491 // stacking containers, but the converse is not true. Layers that use 492 // stacking containers, but the converse is not true. Layers that use
492 // composited scrolling are stacking containers, but they may not 493 // composited scrolling are stacking containers, but they may not
493 // necessarily be stacking contexts. 494 // necessarily be stacking contexts.
494 bool isStackingContainer() const { return isStackingContext() || needsCompos itedScrolling(); } 495 bool isStackingContainer() const { return isStackingContext() || needsCompos itedScrolling(); }
495 496
496 // Gets the enclosing stacking container for this layer, excluding this 497 // Gets the enclosing stacking container for this layer, excluding this
497 // layer itself. 498 // layer itself.
498 RenderLayer* stackingContainer() const; 499 RenderLayer* stackingContainer() const;
499 500
501 // Gets the enclosing stacking context for this layer, excluding this
502 // layer itself.
503 RenderLayer* stackingContext() const;
504
500 // Gets the enclosing stacking container for this layer, possibly the layer 505 // Gets the enclosing stacking container for this layer, possibly the layer
501 // itself, if it is a stacking container. 506 // itself, if it is a stacking container.
502 RenderLayer* enclosingStackingContainer() { return isStackingContainer() ? t his : stackingContainer(); } 507 RenderLayer* enclosingStackingContainer() { return isStackingContainer() ? t his : stackingContainer(); }
503 508
509 // Gets the enclosing stacking context for this layer, possibly the layer
510 // itself, if it is a stacking context.
511 RenderLayer* enclosingStackingContext() { return isStackingContext() ? this : stackingContext(); }
512
504 void dirtyZOrderLists(); 513 void dirtyZOrderLists();
505 void dirtyStackingContainerZOrderLists(); 514 void dirtyStackingContainerZOrderLists();
506 515
507 Vector<RenderLayer*>* posZOrderList() const 516 Vector<RenderLayer*>* posZOrderList() const
508 { 517 {
509 ASSERT(!m_zOrderListsDirty); 518 ASSERT(!m_zOrderListsDirty);
510 ASSERT(isStackingContainer() || !m_posZOrderList); 519 ASSERT(isStackingContainer() || !m_posZOrderList);
511 return m_posZOrderList.get(); 520 return m_posZOrderList.get();
512 } 521 }
513 522
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 void computeRepaintRectsIncludingDescendants(); 868 void computeRepaintRectsIncludingDescendants();
860 void clearRepaintRects(); 869 void clearRepaintRects();
861 870
862 void clipToRect(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const ClipRect&, 871 void clipToRect(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const ClipRect&,
863 BorderRadiusClippingRule = IncludeSelfForBorderRadius); 872 BorderRadiusClippingRule = IncludeSelfForBorderRadius);
864 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C lipRect&); 873 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C lipRect&);
865 874
866 bool shouldRepaintAfterLayout() const; 875 bool shouldRepaintAfterLayout() const;
867 876
868 void updateSelfPaintingLayer(); 877 void updateSelfPaintingLayer();
878 void updateIsNormalFlowOnly();
879 void updateVisibilityAfterStyleChange(const RenderStyle* oldStyle);
869 void updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle); 880 void updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle);
870 881
871 void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle); 882 void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle);
872 void updateScrollbarsAfterLayout(); 883 void updateScrollbarsAfterLayout();
873 884
874 void setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject* containi ngBlock); 885 void setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject* containi ngBlock);
875 void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); 886 void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
876 void updateOutOfFlowPositioned(const RenderStyle* oldStyle); 887 void updateOutOfFlowPositioned(const RenderStyle* oldStyle);
877 888
878 void updateNeedsCompositedScrolling(); 889 void updateNeedsCompositedScrolling();
890 void setNeedsCompositedScrolling(bool);
891
892 void requestNeedsCompositedScrollingUpdate();
893 void requestDescendantsAreContiguousInStackingOrderUpdate();
894 void cancelScheduledCompositedScrollingUpdates() const;
879 895
880 // Returns true if the position changed. 896 // Returns true if the position changed.
881 bool updateLayerPosition(); 897 bool updateLayerPosition();
882 898
883 void updateLayerPositions(RenderGeometryMap* = 0, UpdateLayerPositionsFlags = defaultFlags); 899 void updateLayerPositions(RenderGeometryMap* = 0, UpdateLayerPositionsFlags = defaultFlags);
884 900
885 enum UpdateLayerPositionsAfterScrollFlag { 901 enum UpdateLayerPositionsAfterScrollFlag {
886 NoFlag = 0, 902 NoFlag = 0,
887 IsOverflowScroll = 1 << 0, 903 IsOverflowScroll = 1 << 0,
888 HasSeenViewportConstrainedAncestor = 1 << 1, 904 HasSeenViewportConstrainedAncestor = 1 << 1,
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 // stacking context. 1160 // stacking context.
1145 bool m_hasOutOfFlowPositionedDescendant : 1; 1161 bool m_hasOutOfFlowPositionedDescendant : 1;
1146 bool m_hasOutOfFlowPositionedDescendantDirty : 1; 1162 bool m_hasOutOfFlowPositionedDescendantDirty : 1;
1147 1163
1148 bool m_needsCompositedScrolling : 1; 1164 bool m_needsCompositedScrolling : 1;
1149 1165
1150 // If this is true, then no non-descendant appears between any of our 1166 // If this is true, then no non-descendant appears between any of our
1151 // descendants in stacking order. This is one of the requirements of being 1167 // descendants in stacking order. This is one of the requirements of being
1152 // able to safely become a stacking context. 1168 // able to safely become a stacking context.
1153 bool m_descendantsAreContiguousInStackingOrder : 1; 1169 bool m_descendantsAreContiguousInStackingOrder : 1;
1170 bool m_descendantsAreContiguousInStackingOrderDirty : 1;
1154 1171
1155 const bool m_isRootLayer : 1; 1172 const bool m_isRootLayer : 1;
1156 1173
1157 bool m_usedTransparency : 1; // Tracks whether we need to close a transparen t layer, i.e., whether 1174 bool m_usedTransparency : 1; // Tracks whether we need to close a transparen t layer, i.e., whether
1158 // we ended up painting this layer or any desce ndants (and therefore need to 1175 // we ended up painting this layer or any desce ndants (and therefore need to
1159 // blend). 1176 // blend).
1160 bool m_paintingInsideReflection : 1; // A state bit tracking if we are pain ting inside a replica. 1177 bool m_paintingInsideReflection : 1; // A state bit tracking if we are pain ting inside a replica.
1161 bool m_inOverflowRelayout : 1; 1178 bool m_inOverflowRelayout : 1;
1162 unsigned m_repaintStatus : 2; // RepaintStatus 1179 unsigned m_repaintStatus : 2; // RepaintStatus
1163 1180
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 }; 1282 };
1266 1283
1267 inline void RenderLayer::clearZOrderLists() 1284 inline void RenderLayer::clearZOrderLists()
1268 { 1285 {
1269 ASSERT(!isStackingContainer()); 1286 ASSERT(!isStackingContainer());
1270 1287
1271 m_posZOrderList.clear(); 1288 m_posZOrderList.clear();
1272 m_negZOrderList.clear(); 1289 m_negZOrderList.clear();
1273 } 1290 }
1274 1291
1275 inline void RenderLayer::updateZOrderLists()
1276 {
1277 if (!m_zOrderListsDirty)
1278 return;
1279
1280 if (!isStackingContainer()) {
1281 clearZOrderLists();
1282 m_zOrderListsDirty = false;
1283 return;
1284 }
1285
1286 rebuildZOrderLists();
1287 }
1288
1289 #if !ASSERT_DISABLED 1292 #if !ASSERT_DISABLED
1290 class LayerListMutationDetector { 1293 class LayerListMutationDetector {
1291 public: 1294 public:
1292 LayerListMutationDetector(RenderLayer* layer) 1295 LayerListMutationDetector(RenderLayer* layer)
1293 : m_layer(layer) 1296 : m_layer(layer)
1294 , m_previousMutationAllowedState(layer->layerListMutationAllowed()) 1297 , m_previousMutationAllowedState(layer->layerListMutationAllowed())
1295 { 1298 {
1296 m_layer->setLayerListMutationAllowed(false); 1299 m_layer->setLayerListMutationAllowed(false);
1297 } 1300 }
1298 1301
(...skipping 11 matching lines...) Expand all
1310 1313
1311 } // namespace WebCore 1314 } // namespace WebCore
1312 1315
1313 #ifndef NDEBUG 1316 #ifndef NDEBUG
1314 // Outside the WebCore namespace for ease of invocation from gdb. 1317 // Outside the WebCore namespace for ease of invocation from gdb.
1315 void showLayerTree(const WebCore::RenderLayer*); 1318 void showLayerTree(const WebCore::RenderLayer*);
1316 void showLayerTree(const WebCore::RenderObject*); 1319 void showLayerTree(const WebCore::RenderObject*);
1317 #endif 1320 #endif
1318 1321
1319 #endif // RenderLayer_h 1322 #endif // RenderLayer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698