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

Unified Diff: third_party/WebKit/Source/core/paint/BoxPaintInvalidator.cpp

Issue 2707073002: Move PreviousBoxGeometries from BoxPaintInvalidator into LayoutBox::m_rareData (Closed)
Patch Set: - Created 3 years, 10 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
« no previous file with comments | « third_party/WebKit/Source/core/paint/BoxPaintInvalidator.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/paint/BoxPaintInvalidator.cpp
diff --git a/third_party/WebKit/Source/core/paint/BoxPaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/BoxPaintInvalidator.cpp
index a7c502c1570aa4f3fa31d0fd87ab13256a9400a3..b4a5f0d331840567bc42f03895c846d9f4e5cabb 100644
--- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidator.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidator.cpp
@@ -15,25 +15,6 @@
namespace blink {
-struct PreviousBoxGeometries {
- LayoutRect contentBoxRect;
- LayoutRect layoutOverflowRect;
-};
-
-typedef HashMap<const LayoutBox*, PreviousBoxGeometries>
- PreviousBoxGeometriesMap;
-static PreviousBoxGeometriesMap& previousBoxGeometriesMap() {
- DEFINE_STATIC_LOCAL(PreviousBoxGeometriesMap, map, ());
- return map;
-}
-
-void BoxPaintInvalidator::boxWillBeDestroyed(const LayoutBox& box) {
- DCHECK(box.hasPreviousBoxGeometries() ==
- previousBoxGeometriesMap().contains(&box));
- if (box.hasPreviousBoxGeometries())
- previousBoxGeometriesMap().erase(&box);
-}
-
static LayoutRect computeRightDelta(const LayoutPoint& location,
const LayoutSize& oldSize,
const LayoutSize& newSize,
@@ -118,7 +99,7 @@ PaintInvalidationReason BoxPaintInvalidator::computePaintInvalidationReason() {
if ((style.backgroundLayers().thisOrNextLayersUseContentBox() ||
style.maskLayers().thisOrNextLayersUseContentBox()) &&
- previousContentBoxRect() != m_box.contentBoxRect())
+ m_box.previousContentBoxSize() != m_box.contentBoxRect().size())
return PaintInvalidationContentBoxChange;
LayoutSize oldBorderBoxSize = m_box.previousSize();
@@ -217,7 +198,7 @@ void BoxPaintInvalidator::invalidateScrollingContentsBackgroundIfNeeded() {
!backgroundGeometryDependsOnLayoutOverflowRect())
return;
- const LayoutRect& oldLayoutOverflow = previousLayoutOverflowRect();
+ const LayoutRect& oldLayoutOverflow = m_box.previousLayoutOverflowRect();
LayoutRect newLayoutOverflow = m_box.layoutOverflowRect();
bool shouldFullyInvalidateOnScrollingContentsLayer = false;
@@ -307,7 +288,8 @@ PaintInvalidationReason BoxPaintInvalidator::invalidatePaintIfNeeded() {
return reason;
}
-bool BoxPaintInvalidator::needsToSavePreviousBoxGeometries() {
+bool BoxPaintInvalidator::
+ needsToSavePreviousContentBoxSizeOrLayoutOverflowRect() {
// Don't save old box geometries if the paint rect is empty because we'll
// fully invalidate once the paint rect becomes non-empty.
if (m_context.newVisualRect.isEmpty())
@@ -320,48 +302,28 @@ bool BoxPaintInvalidator::needsToSavePreviousBoxGeometries() {
// Background and mask layers can depend on other boxes than border box. See
// crbug.com/490533
- if (style.backgroundLayers().thisOrNextLayersUseContentBox() ||
- style.maskLayers().thisOrNextLayersUseContentBox() ||
- backgroundGeometryDependsOnLayoutOverflowRect() ||
- backgroundPaintsOntoScrollingContentsLayer())
+ if ((style.backgroundLayers().thisOrNextLayersUseContentBox() ||
+ style.maskLayers().thisOrNextLayersUseContentBox()) &&
+ m_box.contentBoxRect().size() != m_box.size())
+ return true;
+ if ((backgroundGeometryDependsOnLayoutOverflowRect() ||
+ backgroundPaintsOntoScrollingContentsLayer()) &&
+ m_box.layoutOverflowRect() != m_box.borderBoxRect())
return true;
return false;
}
void BoxPaintInvalidator::savePreviousBoxGeometriesIfNeeded() {
- m_box.getMutableForPainting().setPreviousSize(m_box.size());
-
- DCHECK(m_box.hasPreviousBoxGeometries() ==
- previousBoxGeometriesMap().contains(&m_box));
- if (!needsToSavePreviousBoxGeometries()) {
- if (m_box.hasPreviousBoxGeometries()) {
- previousBoxGeometriesMap().erase(&m_box);
- m_box.getMutableForPainting().setHasPreviousBoxGeometries(false);
- }
- return;
- }
-
- PreviousBoxGeometries geometries = {m_box.contentBoxRect(),
- m_box.layoutOverflowRect()};
- previousBoxGeometriesMap().set(&m_box, geometries);
- m_box.getMutableForPainting().setHasPreviousBoxGeometries(true);
-}
+ m_box.getMutableForPainting().savePreviousSize();
-LayoutRect BoxPaintInvalidator::previousContentBoxRect() {
- DCHECK(m_box.hasPreviousBoxGeometries() ==
- previousBoxGeometriesMap().contains(&m_box));
- return m_box.hasPreviousBoxGeometries()
- ? previousBoxGeometriesMap().get(&m_box).contentBoxRect
- : LayoutRect(LayoutPoint(), m_box.previousSize());
-}
-
-LayoutRect BoxPaintInvalidator::previousLayoutOverflowRect() {
- DCHECK(m_box.hasPreviousBoxGeometries() ==
- previousBoxGeometriesMap().contains(&m_box));
- return m_box.hasPreviousBoxGeometries()
- ? previousBoxGeometriesMap().get(&m_box).layoutOverflowRect
- : LayoutRect(LayoutPoint(), m_box.previousSize());
+ if (needsToSavePreviousContentBoxSizeOrLayoutOverflowRect()) {
+ m_box.getMutableForPainting()
+ .savePreviousContentBoxSizeAndLayoutOverflowRect();
+ } else {
+ m_box.getMutableForPainting()
+ .clearPreviousContentBoxSizeAndLayoutOverflowRect();
+ }
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/paint/BoxPaintInvalidator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698