summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc b/chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc
index 661ac3aab73..ae735464f56 100644
--- a/chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc
+++ b/chromium/third_party/blink/renderer/core/paint/cull_rect_updater.cc
@@ -21,6 +21,8 @@ namespace blink {
namespace {
+bool g_is_overriding_cull_rects = false;
+
void SetLayerNeedsRepaintOnCullRectChange(PaintLayer& layer) {
if (layer.PreviousPaintResult() == kMayBeClippedByCullRect ||
RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
@@ -241,7 +243,10 @@ void CullRectUpdater::UpdateRecursively(const Context& parent_context,
UpdateForDescendants(context, layer);
}
- layer.ClearNeedsCullRectUpdate();
+ if (g_is_overriding_cull_rects)
+ layer.SetNeedsCullRectUpdate();
+ else
+ layer.ClearNeedsCullRectUpdate();
}
// "Children" in |force_update_children| means children in the containing block
@@ -494,8 +499,7 @@ void CullRectUpdater::PaintPropertiesChanged(
}
OverriddenCullRectScope::OverriddenCullRectScope(PaintLayer& starting_layer,
- const CullRect& cull_rect)
- : starting_layer_(starting_layer) {
+ const CullRect& cull_rect) {
if (starting_layer.GetLayoutObject().GetFrame()->IsLocalRoot() &&
!starting_layer.NeedsCullRectUpdate() &&
!starting_layer.DescendantNeedsCullRectUpdate() &&
@@ -505,14 +509,15 @@ OverriddenCullRectScope::OverriddenCullRectScope(PaintLayer& starting_layer,
return;
}
- updated_ = true;
+ DCHECK(!g_is_overriding_cull_rects);
+ g_is_overriding_cull_rects = true;
+
starting_layer.SetNeedsCullRectUpdate();
CullRectUpdater(starting_layer).UpdateInternal(cull_rect);
}
OverriddenCullRectScope::~OverriddenCullRectScope() {
- if (updated_)
- starting_layer_.SetNeedsCullRectUpdate();
+ g_is_overriding_cull_rects = false;
}
} // namespace blink