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

Side by Side Diff: Source/core/rendering/RenderLayer.h

Issue 208313004: Cache the absolute bounding box rect on RenderLayer. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: remove extre line break Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/core/rendering/RenderLayer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 * Copyright (C) 2013 Intel Corporation. All rights reserved. 3 * Copyright (C) 2013 Intel Corporation. All rights reserved.
4 * 4 *
5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
6 * 6 *
7 * Other contributors: 7 * Other contributors:
8 * Robert O'Callahan <roc+@cs.cmu.edu> 8 * Robert O'Callahan <roc+@cs.cmu.edu>
9 * David Baron <dbaron@fas.harvard.edu> 9 * David Baron <dbaron@fas.harvard.edu>
10 * Christian Biesinger <cbiesinger@web.de> 10 * Christian Biesinger <cbiesinger@web.de>
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 DontConstrainForMask = 1 << 4, 291 DontConstrainForMask = 1 << 4,
292 IncludeCompositedDescendants = 1 << 5, 292 IncludeCompositedDescendants = 1 << 5,
293 UseFragmentBoxes = 1 << 6, 293 UseFragmentBoxes = 1 << 6,
294 PretendLayerHasOwnBacking = 1 << 7, 294 PretendLayerHasOwnBacking = 1 << 7,
295 DefaultCalculateLayerBoundsFlags = IncludeSelfTransform | UseLocalClipR ectIfPossible | IncludeLayerFilterOutsets | UseFragmentBoxes 295 DefaultCalculateLayerBoundsFlags = IncludeSelfTransform | UseLocalClipR ectIfPossible | IncludeLayerFilterOutsets | UseFragmentBoxes
296 }; 296 };
297 typedef unsigned CalculateLayerBoundsFlags; 297 typedef unsigned CalculateLayerBoundsFlags;
298 298
299 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if know n. 299 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if know n.
300 LayoutRect boundingBox(const RenderLayer* rootLayer, CalculateLayerBoundsFla gs = 0, const LayoutPoint* offsetFromRoot = 0) const; 300 LayoutRect boundingBox(const RenderLayer* rootLayer, CalculateLayerBoundsFla gs = 0, const LayoutPoint* offsetFromRoot = 0) const;
301 // Bounding box in the coordinates of this layer.
302 LayoutRect localBoundingBox(CalculateLayerBoundsFlags = 0) const;
303 // Pixel snapped bounding box relative to the root.
304 IntRect absoluteBoundingBox() const;
305 301
306 // Bounds used for layer overlap testing in RenderLayerCompositor. 302 // Bounds used for layer overlap testing in RenderLayerCompositor.
307 LayoutRect overlapBounds() const { return overlapBoundsIncludeChildren() ? c alculateLayerBounds(this) : localBoundingBox(); } 303 LayoutRect overlapBounds() const { return overlapBoundsIncludeChildren() ? c alculateLayerBounds(this) : localBoundingBox(); }
308 304
309 // If true, this layer's children are included in its bounds for overlap tes ting. 305 // If true, this layer's children are included in its bounds for overlap tes ting.
310 // We can't rely on the children's positions if this layer has a filter that could have moved the children's pixels around. 306 // We can't rely on the children's positions if this layer has a filter that could have moved the children's pixels around.
311 bool overlapBoundsIncludeChildren() const { return hasFilter() && renderer() ->style()->filter().hasFilterThatMovesPixels(); } 307 bool overlapBoundsIncludeChildren() const { return hasFilter() && renderer() ->style()->filter().hasFilterThatMovesPixels(); }
312 308
313 // Can pass offsetFromRoot if known. 309 // Can pass offsetFromRoot if known.
314 LayoutRect calculateLayerBounds(const RenderLayer* ancestorLayer, const Layo utPoint* offsetFromRoot = 0, CalculateLayerBoundsFlags = DefaultCalculateLayerBo undsFlags) const; 310 LayoutRect calculateLayerBounds(const RenderLayer* ancestorLayer, const Layo utPoint* offsetFromRoot = 0, CalculateLayerBoundsFlags = DefaultCalculateLayerBo undsFlags) const;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 void setOffsetFromSquashingLayerOrigin(IntSize offset) { m_compositingProper ties.offsetFromSquashingLayerOrigin = offset; } 473 void setOffsetFromSquashingLayerOrigin(IntSize offset) { m_compositingProper ties.offsetFromSquashingLayerOrigin = offset; }
478 IntSize offsetFromSquashingLayerOrigin() const { return m_compositingPropert ies.offsetFromSquashingLayerOrigin; } 474 IntSize offsetFromSquashingLayerOrigin() const { return m_compositingPropert ies.offsetFromSquashingLayerOrigin; }
479 475
480 bool scrollsOverflow() const; 476 bool scrollsOverflow() const;
481 477
482 bool hasDirectReasonsForCompositing() const { return compositingReasons() & CompositingReasonComboAllDirectReasons; } 478 bool hasDirectReasonsForCompositing() const { return compositingReasons() & CompositingReasonComboAllDirectReasons; }
483 CompositingReasons styleDeterminedCompositingReasons() const { return compos itingReasons() & CompositingReasonComboAllStyleDeterminedReasons; } 479 CompositingReasons styleDeterminedCompositingReasons() const { return compos itingReasons() & CompositingReasonComboAllStyleDeterminedReasons; }
484 480
485 void clearAncestorDependentPropertyCache(); 481 void clearAncestorDependentPropertyCache();
486 482
483 const IntRect& absoluteBoundingBox() { ASSERT(!m_needsToRecomputeBounds); re turn m_absoluteBoundingBox; }
484 void setAbsoluteBoundingBox(const IntRect&);
485 void clearNeedsToRecomputeBounds();
486 bool needsToRecomputeBounds() { return m_needsToRecomputeBounds; }
487 487
488 private: 488 private:
489 class AncestorDependentPropertyCache { 489 class AncestorDependentPropertyCache {
490 WTF_MAKE_NONCOPYABLE(AncestorDependentPropertyCache); 490 WTF_MAKE_NONCOPYABLE(AncestorDependentPropertyCache);
491 public: 491 public:
492 AncestorDependentPropertyCache(); 492 AncestorDependentPropertyCache();
493 493
494 RenderLayer* ancestorCompositedScrollingLayer() const; 494 RenderLayer* ancestorCompositedScrollingLayer() const;
495 void setAncestorCompositedScrollingLayer(RenderLayer*); 495 void setAncestorCompositedScrollingLayer(RenderLayer*);
496 496
497 RenderLayer* scrollParent() const; 497 RenderLayer* scrollParent() const;
498 void setScrollParent(RenderLayer*); 498 void setScrollParent(RenderLayer*);
499 499
500 bool ancestorCompositedScrollingLayerDirty() const { return m_ancestorCo mpositedScrollingLayerDirty; } 500 bool ancestorCompositedScrollingLayerDirty() const { return m_ancestorCo mpositedScrollingLayerDirty; }
501 bool scrollParentDirty() const { return m_scrollParentDirty; } 501 bool scrollParentDirty() const { return m_scrollParentDirty; }
502 502
503 private: 503 private:
504 RenderLayer* m_ancestorCompositedScrollingLayer; 504 RenderLayer* m_ancestorCompositedScrollingLayer;
505 RenderLayer* m_scrollParent; 505 RenderLayer* m_scrollParent;
506 506
507 bool m_ancestorCompositedScrollingLayerDirty; 507 bool m_ancestorCompositedScrollingLayerDirty;
508 bool m_scrollParentDirty; 508 bool m_scrollParentDirty;
509 }; 509 };
510 510
511 void ensureAncestorDependentPropertyCache() const; 511 void ensureAncestorDependentPropertyCache() const;
512 512
513 // Bounding box in the coordinates of this layer.
514 LayoutRect localBoundingBox(CalculateLayerBoundsFlags = 0) const;
515
513 bool hasOverflowControls() const; 516 bool hasOverflowControls() const;
514 517
515 void setIsUnclippedDescendant(bool isUnclippedDescendant) { m_isUnclippedDes cendant = isUnclippedDescendant; } 518 void setIsUnclippedDescendant(bool isUnclippedDescendant) { m_isUnclippedDes cendant = isUnclippedDescendant; }
516 519
517 void setAncestorChainHasSelfPaintingLayerDescendant(); 520 void setAncestorChainHasSelfPaintingLayerDescendant();
518 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); 521 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus();
519 522
520 void setAncestorChainHasOutOfFlowPositionedDescendant(); 523 void setAncestorChainHasOutOfFlowPositionedDescendant();
521 void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); 524 void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
522 525
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 unsigned m_has3DTransformedDescendant : 1; 706 unsigned m_has3DTransformedDescendant : 1;
704 707
705 unsigned m_containsDirtyOverlayScrollbars : 1; 708 unsigned m_containsDirtyOverlayScrollbars : 1;
706 709
707 // This is an optimization added for <table>. 710 // This is an optimization added for <table>.
708 // Currently cells do not need to update their repaint rectangles when scrol ling. This also 711 // Currently cells do not need to update their repaint rectangles when scrol ling. This also
709 // saves a lot of time when scrolling on a table. 712 // saves a lot of time when scrolling on a table.
710 const unsigned m_canSkipRepaintRectsUpdateOnScroll : 1; 713 const unsigned m_canSkipRepaintRectsUpdateOnScroll : 1;
711 714
712 unsigned m_hasFilterInfo : 1; 715 unsigned m_hasFilterInfo : 1;
716 unsigned m_needsToRecomputeBounds : 1;
713 717
714 RenderLayerModelObject* m_renderer; 718 RenderLayerModelObject* m_renderer;
715 719
716 RenderLayer* m_parent; 720 RenderLayer* m_parent;
717 RenderLayer* m_previous; 721 RenderLayer* m_previous;
718 RenderLayer* m_next; 722 RenderLayer* m_next;
719 RenderLayer* m_first; 723 RenderLayer* m_first;
720 RenderLayer* m_last; 724 RenderLayer* m_last;
721 725
722 // Our current relative position offset. 726 // Our current relative position offset.
723 LayoutSize m_offsetForInFlowPosition; 727 LayoutSize m_offsetForInFlowPosition;
724 728
725 // Our (x,y) coordinates are in our parent layer's coordinate space. 729 // Our (x,y) coordinates are in our parent layer's coordinate space.
726 LayoutPoint m_topLeft; 730 LayoutPoint m_topLeft;
727 731
728 // The layer's width/height 732 // The layer's width/height
729 IntSize m_layerSize; 733 IntSize m_layerSize;
730 734
731 // Cached normal flow values for absolute positioned elements with static le ft/top values. 735 // Cached normal flow values for absolute positioned elements with static le ft/top values.
732 LayoutUnit m_staticInlinePosition; 736 LayoutUnit m_staticInlinePosition;
733 LayoutUnit m_staticBlockPosition; 737 LayoutUnit m_staticBlockPosition;
734 738
739 IntRect m_absoluteBoundingBox;
740
735 OwnPtr<TransformationMatrix> m_transform; 741 OwnPtr<TransformationMatrix> m_transform;
736 742
737 // Pointer to the enclosing RenderLayer that caused us to be paginated. It i s 0 if we are not paginated. 743 // Pointer to the enclosing RenderLayer that caused us to be paginated. It i s 0 if we are not paginated.
738 RenderLayer* m_enclosingPaginationLayer; 744 RenderLayer* m_enclosingPaginationLayer;
739 745
740 // Pointer to the enclosing RenderLayer that establishes the 3d rendering co ntext in which this layer participates. 746 // Pointer to the enclosing RenderLayer that establishes the 3d rendering co ntext in which this layer participates.
741 // If it 0, it does not participate in a 3d rendering context. 747 // If it 0, it does not participate in a 3d rendering context.
742 RenderLayer* m_3dRenderingContextRoot; 748 RenderLayer* m_3dRenderingContextRoot;
743 749
744 // Properties that are computed while updating compositing layers. These val ues may be dirty/invalid if 750 // Properties that are computed while updating compositing layers. These val ues may be dirty/invalid if
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 803
798 } // namespace WebCore 804 } // namespace WebCore
799 805
800 #ifndef NDEBUG 806 #ifndef NDEBUG
801 // Outside the WebCore namespace for ease of invocation from gdb. 807 // Outside the WebCore namespace for ease of invocation from gdb.
802 void showLayerTree(const WebCore::RenderLayer*); 808 void showLayerTree(const WebCore::RenderLayer*);
803 void showLayerTree(const WebCore::RenderObject*); 809 void showLayerTree(const WebCore::RenderObject*);
804 #endif 810 #endif
805 811
806 #endif // RenderLayer_h 812 #endif // RenderLayer_h
OLDNEW
« no previous file with comments | « no previous file | Source/core/rendering/RenderLayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698