| OLD | NEW | 
|    1 // Copyright 2014 The Chromium Authors. All rights reserved. |    1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "core/layout/PaintInvalidationState.h" |    5 #include "core/layout/PaintInvalidationState.h" | 
|    6  |    6  | 
|    7 #include "core/frame/FrameView.h" |    7 #include "core/frame/FrameView.h" | 
|    8 #include "core/frame/LocalFrame.h" |    8 #include "core/frame/LocalFrame.h" | 
|    9 #include "core/frame/Settings.h" |    9 #include "core/frame/Settings.h" | 
|   10 #include "core/layout/LayoutInline.h" |   10 #include "core/layout/LayoutInline.h" | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|   36 PaintInvalidationState::PaintInvalidationState( |   36 PaintInvalidationState::PaintInvalidationState( | 
|   37     const LayoutView& layoutView, |   37     const LayoutView& layoutView, | 
|   38     Vector<const LayoutObject*>& pendingDelayedPaintInvalidations) |   38     Vector<const LayoutObject*>& pendingDelayedPaintInvalidations) | 
|   39     : m_currentObject(layoutView), |   39     : m_currentObject(layoutView), | 
|   40       m_forcedSubtreeInvalidationFlags(0), |   40       m_forcedSubtreeInvalidationFlags(0), | 
|   41       m_clipped(false), |   41       m_clipped(false), | 
|   42       m_clippedForAbsolutePosition(false), |   42       m_clippedForAbsolutePosition(false), | 
|   43       m_cachedOffsetsEnabled(true), |   43       m_cachedOffsetsEnabled(true), | 
|   44       m_cachedOffsetsForAbsolutePositionEnabled(true), |   44       m_cachedOffsetsForAbsolutePositionEnabled(true), | 
|   45       m_paintInvalidationContainer(&layoutView.containerForPaintInvalidation()), |   45       m_paintInvalidationContainer(&layoutView.containerForPaintInvalidation()), | 
 |   46       m_scrollAdjustment( | 
 |   47           m_paintInvalidationContainer->scrollAdjustmentForPaintInvalidation()), | 
|   46       m_paintInvalidationContainerForStackedContents( |   48       m_paintInvalidationContainerForStackedContents( | 
|   47           m_paintInvalidationContainer), |   49           m_paintInvalidationContainer), | 
|   48       m_containerForAbsolutePosition(layoutView), |   50       m_containerForAbsolutePosition(layoutView), | 
|   49       m_pendingDelayedPaintInvalidations(pendingDelayedPaintInvalidations), |   51       m_pendingDelayedPaintInvalidations(pendingDelayedPaintInvalidations), | 
|   50       m_paintingLayer(*layoutView.layer()) |   52       m_paintingLayer(*layoutView.layer()) | 
|   51 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY |   53 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY | 
|   52       , |   54       , | 
|   53       m_canCheckFastPathSlowPathEquality(layoutView == |   55       m_canCheckFastPathSlowPathEquality(layoutView == | 
|   54                                          m_paintInvalidationContainer) |   56                                          m_paintInvalidationContainer) | 
|   55 #endif |   57 #endif | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|   78       m_clippedForAbsolutePosition(parentState.m_clippedForAbsolutePosition), |   80       m_clippedForAbsolutePosition(parentState.m_clippedForAbsolutePosition), | 
|   79       m_clipRect(parentState.m_clipRect), |   81       m_clipRect(parentState.m_clipRect), | 
|   80       m_clipRectForAbsolutePosition(parentState.m_clipRectForAbsolutePosition), |   82       m_clipRectForAbsolutePosition(parentState.m_clipRectForAbsolutePosition), | 
|   81       m_paintOffset(parentState.m_paintOffset), |   83       m_paintOffset(parentState.m_paintOffset), | 
|   82       m_paintOffsetForAbsolutePosition( |   84       m_paintOffsetForAbsolutePosition( | 
|   83           parentState.m_paintOffsetForAbsolutePosition), |   85           parentState.m_paintOffsetForAbsolutePosition), | 
|   84       m_cachedOffsetsEnabled(parentState.m_cachedOffsetsEnabled), |   86       m_cachedOffsetsEnabled(parentState.m_cachedOffsetsEnabled), | 
|   85       m_cachedOffsetsForAbsolutePositionEnabled( |   87       m_cachedOffsetsForAbsolutePositionEnabled( | 
|   86           parentState.m_cachedOffsetsForAbsolutePositionEnabled), |   88           parentState.m_cachedOffsetsForAbsolutePositionEnabled), | 
|   87       m_paintInvalidationContainer(parentState.m_paintInvalidationContainer), |   89       m_paintInvalidationContainer(parentState.m_paintInvalidationContainer), | 
 |   90       m_scrollAdjustment(parentState.m_scrollAdjustment), | 
|   88       m_paintInvalidationContainerForStackedContents( |   91       m_paintInvalidationContainerForStackedContents( | 
|   89           parentState.m_paintInvalidationContainerForStackedContents), |   92           parentState.m_paintInvalidationContainerForStackedContents), | 
|   90       m_containerForAbsolutePosition( |   93       m_containerForAbsolutePosition( | 
|   91           currentObject.canContainAbsolutePositionObjects() |   94           currentObject.canContainAbsolutePositionObjects() | 
|   92               ? currentObject |   95               ? currentObject | 
|   93               : parentState.m_containerForAbsolutePosition), |   96               : parentState.m_containerForAbsolutePosition), | 
|   94       m_svgTransform(parentState.m_svgTransform), |   97       m_svgTransform(parentState.m_svgTransform), | 
|   95       m_pendingDelayedPaintInvalidations( |   98       m_pendingDelayedPaintInvalidations( | 
|   96           parentState.m_pendingDelayedPaintInvalidations), |   99           parentState.m_pendingDelayedPaintInvalidations), | 
|   97       m_paintingLayer(parentState.childPaintingLayer(currentObject)) |  100       m_paintingLayer(parentState.childPaintingLayer(currentObject)) | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  113 #if DCHECK_IS_ON() |  116 #if DCHECK_IS_ON() | 
|  114     m_didUpdateForChildren = parentState.m_didUpdateForChildren; |  117     m_didUpdateForChildren = parentState.m_didUpdateForChildren; | 
|  115 #endif |  118 #endif | 
|  116     return; |  119     return; | 
|  117   } |  120   } | 
|  118  |  121  | 
|  119 #if DCHECK_IS_ON() |  122 #if DCHECK_IS_ON() | 
|  120   DCHECK(parentState.m_didUpdateForChildren); |  123   DCHECK(parentState.m_didUpdateForChildren); | 
|  121 #endif |  124 #endif | 
|  122  |  125  | 
 |  126   const auto* oldPaintInvalidationContainer = m_paintInvalidationContainer; | 
|  123   if (currentObject.isPaintInvalidationContainer()) { |  127   if (currentObject.isPaintInvalidationContainer()) { | 
|  124     m_paintInvalidationContainer = toLayoutBoxModelObject(¤tObject); |  128     m_paintInvalidationContainer = toLayoutBoxModelObject(¤tObject); | 
|  125     if (currentObject.styleRef().isStackingContext()) |  129     if (currentObject.styleRef().isStackingContext()) | 
|  126       m_paintInvalidationContainerForStackedContents = |  130       m_paintInvalidationContainerForStackedContents = | 
|  127           toLayoutBoxModelObject(¤tObject); |  131           toLayoutBoxModelObject(¤tObject); | 
|  128   } else if (currentObject.isLayoutView()) { |  132   } else if (currentObject.isLayoutView()) { | 
|  129     // m_paintInvalidationContainerForStackedContents is only for stacked |  133     // m_paintInvalidationContainerForStackedContents is only for stacked | 
|  130     // descendants in its own frame, because it doesn't establish stacking |  134     // descendants in its own frame, because it doesn't establish stacking | 
|  131     // context for stacked contents in sub-frames. Contents stacked in the root |  135     // context for stacked contents in sub-frames. Contents stacked in the root | 
|  132     // stacking context in this frame should use this frame's |  136     // stacking context in this frame should use this frame's | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
|  160     //   path and enable fast path for descendants if possible; or |  164     //   path and enable fast path for descendants if possible; or | 
|  161     // - Track offset between the two paintInvalidationContainers. |  165     // - Track offset between the two paintInvalidationContainers. | 
|  162     m_cachedOffsetsEnabled = false; |  166     m_cachedOffsetsEnabled = false; | 
|  163     if (m_forcedSubtreeInvalidationFlags & |  167     if (m_forcedSubtreeInvalidationFlags & | 
|  164         PaintInvalidatorContext:: |  168         PaintInvalidatorContext:: | 
|  165             ForcedSubtreeFullInvalidationForStackedContents) |  169             ForcedSubtreeFullInvalidationForStackedContents) | 
|  166       m_forcedSubtreeInvalidationFlags |= |  170       m_forcedSubtreeInvalidationFlags |= | 
|  167           PaintInvalidatorContext::ForcedSubtreeFullInvalidation; |  171           PaintInvalidatorContext::ForcedSubtreeFullInvalidation; | 
|  168   } |  172   } | 
|  169  |  173  | 
 |  174   if (m_paintInvalidationContainer != oldPaintInvalidationContainer) { | 
 |  175     m_scrollAdjustment = | 
 |  176         m_paintInvalidationContainer->scrollAdjustmentForPaintInvalidation(); | 
 |  177   } else { | 
 |  178     DCHECK( | 
 |  179         m_scrollAdjustment == | 
 |  180         m_paintInvalidationContainer->scrollAdjustmentForPaintInvalidation()); | 
 |  181   } | 
 |  182  | 
|  170   if (!currentObject.isBoxModelObject() && !currentObject.isSVG()) |  183   if (!currentObject.isBoxModelObject() && !currentObject.isSVG()) | 
|  171     return; |  184     return; | 
|  172  |  185  | 
|  173   if (m_cachedOffsetsEnabled || currentObject == m_paintInvalidationContainer) |  186   if (m_cachedOffsetsEnabled || currentObject == m_paintInvalidationContainer) | 
|  174     m_cachedOffsetsEnabled = supportsCachedOffsets(currentObject); |  187     m_cachedOffsetsEnabled = supportsCachedOffsets(currentObject); | 
|  175  |  188  | 
|  176   if (currentObject.isSVG()) { |  189   if (currentObject.isSVG()) { | 
|  177     if (currentObject.isSVGRoot()) { |  190     if (currentObject.isSVGRoot()) { | 
|  178       m_svgTransform = |  191       m_svgTransform = | 
|  179           toLayoutSVGRoot(currentObject).localToBorderBoxTransform(); |  192           toLayoutSVGRoot(currentObject).localToBorderBoxTransform(); | 
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  435       point += FloatPoint(m_paintOffset); |  448       point += FloatPoint(m_paintOffset); | 
|  436 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY |  449 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY | 
|  437       DCHECK(point == |  450       DCHECK(point == | 
|  438              slowLocalOriginToAncestorPoint( |  451              slowLocalOriginToAncestorPoint( | 
|  439                  m_currentObject, m_paintInvalidationContainer, FloatPoint())); |  452                  m_currentObject, m_paintInvalidationContainer, FloatPoint())); | 
|  440 #endif |  453 #endif | 
|  441     } else { |  454     } else { | 
|  442       point = slowLocalToAncestorPoint( |  455       point = slowLocalToAncestorPoint( | 
|  443           m_currentObject, *m_paintInvalidationContainer, FloatPoint()); |  456           m_currentObject, *m_paintInvalidationContainer, FloatPoint()); | 
|  444     } |  457     } | 
 |  458  | 
 |  459     point.move(m_scrollAdjustment); | 
|  445   } |  460   } | 
|  446  |  461  | 
|  447   PaintLayer::mapPointInPaintInvalidationContainerToBacking( |  462   PaintLayer::mapPointInPaintInvalidationContainerToBacking( | 
|  448       *m_paintInvalidationContainer, point); |  463       *m_paintInvalidationContainer, point); | 
|  449  |  464  | 
|  450   point.move(m_currentObject.scrollAdjustmentForPaintInvalidation( |  | 
|  451       *m_paintInvalidationContainer)); |  | 
|  452  |  | 
|  453   return LayoutPoint(point); |  465   return LayoutPoint(point); | 
|  454 } |  466 } | 
|  455  |  467  | 
|  456 LayoutRect PaintInvalidationState::computeVisualRectInBacking() const { |  468 LayoutRect PaintInvalidationState::computeVisualRectInBacking() const { | 
|  457 #if DCHECK_IS_ON() |  469 #if DCHECK_IS_ON() | 
|  458   DCHECK(!m_didUpdateForChildren); |  470   DCHECK(!m_didUpdateForChildren); | 
|  459 #endif |  471 #endif | 
|  460  |  472  | 
|  461   if (m_currentObject.isSVGChild()) |  473   if (m_currentObject.isSVGChild()) | 
|  462     return computeVisualRectInBackingForSVG(); |  474     return computeVisualRectInBackingForSVG(); | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
|  486     // and slow path (for things above the SVGRoot). |  498     // and slow path (for things above the SVGRoot). | 
|  487     rect = SVGLayoutSupport::visualRectInAncestorSpace( |  499     rect = SVGLayoutSupport::visualRectInAncestorSpace( | 
|  488         m_currentObject, *m_paintInvalidationContainer); |  500         m_currentObject, *m_paintInvalidationContainer); | 
|  489   } |  501   } | 
|  490  |  502  | 
|  491   PaintLayer::mapRectInPaintInvalidationContainerToBacking( |  503   PaintLayer::mapRectInPaintInvalidationContainerToBacking( | 
|  492       *m_paintInvalidationContainer, rect); |  504       *m_paintInvalidationContainer, rect); | 
|  493  |  505  | 
|  494   m_currentObject.adjustVisualRectForRasterEffects(rect); |  506   m_currentObject.adjustVisualRectForRasterEffects(rect); | 
|  495  |  507  | 
|  496   rect.move(m_currentObject.scrollAdjustmentForPaintInvalidation( |  508   if (m_currentObject != m_paintInvalidationContainer) | 
|  497       *m_paintInvalidationContainer)); |  509     rect.move(m_scrollAdjustment); | 
|  498  |  510  | 
|  499   return rect; |  511   return rect; | 
|  500 } |  512 } | 
|  501  |  513  | 
|  502 static void slowMapToVisualRectInAncestorSpace( |  514 static void slowMapToVisualRectInAncestorSpace( | 
|  503     const LayoutObject& object, |  515     const LayoutObject& object, | 
|  504     const LayoutBoxModelObject& ancestor, |  516     const LayoutBoxModelObject& ancestor, | 
|  505     LayoutRect& rect) { |  517     LayoutRect& rect) { | 
|  506   // TODO(wkorman): The flip below is required because visual rects are |  518   // TODO(wkorman): The flip below is required because visual rects are | 
|  507   // currently in "physical coordinates with flipped block-flow direction" |  519   // currently in "physical coordinates with flipped block-flow direction" | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  544  |  556  | 
|  545 void PaintInvalidationState::mapLocalRectToVisualRectInBacking( |  557 void PaintInvalidationState::mapLocalRectToVisualRectInBacking( | 
|  546     LayoutRect& rect) const { |  558     LayoutRect& rect) const { | 
|  547   mapLocalRectToPaintInvalidationContainer(rect); |  559   mapLocalRectToPaintInvalidationContainer(rect); | 
|  548  |  560  | 
|  549   PaintLayer::mapRectInPaintInvalidationContainerToBacking( |  561   PaintLayer::mapRectInPaintInvalidationContainerToBacking( | 
|  550       *m_paintInvalidationContainer, rect); |  562       *m_paintInvalidationContainer, rect); | 
|  551  |  563  | 
|  552   m_currentObject.adjustVisualRectForRasterEffects(rect); |  564   m_currentObject.adjustVisualRectForRasterEffects(rect); | 
|  553  |  565  | 
|  554   rect.move(m_currentObject.scrollAdjustmentForPaintInvalidation( |  566   if (m_currentObject != m_paintInvalidationContainer) | 
|  555       *m_paintInvalidationContainer)); |  567     rect.move(m_scrollAdjustment); | 
|  556 } |  568 } | 
|  557  |  569  | 
|  558 void PaintInvalidationState::addClipRectRelativeToPaintOffset( |  570 void PaintInvalidationState::addClipRectRelativeToPaintOffset( | 
|  559     const LayoutRect& localClipRect) { |  571     const LayoutRect& localClipRect) { | 
|  560   LayoutRect clipRect = localClipRect; |  572   LayoutRect clipRect = localClipRect; | 
|  561   clipRect.move(m_paintOffset); |  573   clipRect.move(m_paintOffset); | 
|  562   if (m_clipped) { |  574   if (m_clipped) { | 
|  563     m_clipRect.intersect(clipRect); |  575     m_clipRect.intersect(clipRect); | 
|  564   } else { |  576   } else { | 
|  565     m_clipRect = clipRect; |  577     m_clipRect = clipRect; | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  646 } |  658 } | 
|  647  |  659  | 
|  648 void PaintInvalidatorContextAdapter::mapLocalRectToVisualRectInBacking( |  660 void PaintInvalidatorContextAdapter::mapLocalRectToVisualRectInBacking( | 
|  649     const LayoutObject& object, |  661     const LayoutObject& object, | 
|  650     LayoutRect& rect) const { |  662     LayoutRect& rect) const { | 
|  651   DCHECK(&object == &m_paintInvalidationState.currentObject()); |  663   DCHECK(&object == &m_paintInvalidationState.currentObject()); | 
|  652   m_paintInvalidationState.mapLocalRectToVisualRectInBacking(rect); |  664   m_paintInvalidationState.mapLocalRectToVisualRectInBacking(rect); | 
|  653 } |  665 } | 
|  654  |  666  | 
|  655 }  // namespace blink |  667 }  // namespace blink | 
| OLD | NEW |