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

Unified Diff: ui/compositor/layer.cc

Issue 1080633009: ui: Clean up damaged rects and clear them after painting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
Index: ui/compositor/layer.cc
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index 3e61d40b95a2c02151bf44dd5418c2d74cc655c8..377e29e919ad2e7671b35d0204a001de283ca7c8 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -657,11 +657,7 @@ bool Layer::SchedulePaint(const gfx::Rect& invalid_rect) {
type_ == LAYER_NINE_PATCH || (!delegate_ && !mailbox_.IsValid()))
return false;
- damaged_region_.op(invalid_rect.x(),
- invalid_rect.y(),
- invalid_rect.right(),
- invalid_rect.bottom(),
- SkRegion::kUnion_Op);
+ damaged_region_.Union(invalid_rect);
ScheduleDraw();
return true;
}
@@ -673,20 +669,17 @@ void Layer::ScheduleDraw() {
}
void Layer::SendDamagedRects() {
- if ((delegate_ || mailbox_.IsValid()) && !damaged_region_.isEmpty()) {
- for (SkRegion::Iterator iter(damaged_region_); !iter.done(); iter.next()) {
- const SkIRect& sk_damaged = iter.rect();
- gfx::Rect damaged(
- sk_damaged.x(),
- sk_damaged.y(),
- sk_damaged.width(),
- sk_damaged.height());
- cc_layer_->SetNeedsDisplayRect(damaged);
- }
- damaged_region_.setEmpty();
- }
- for (size_t i = 0; i < children_.size(); ++i)
- children_[i]->SendDamagedRects();
+ if (damaged_region_.IsEmpty())
+ return;
+ if (!delegate_ && !mailbox_.IsValid())
+ return;
+
+ for (cc::Region::Iterator iter(damaged_region_); iter.has_rect(); iter.next())
+ cc_layer_->SetNeedsDisplayRect(iter.rect());
+}
+
+void Layer::ClearDamagedRects() {
+ damaged_region_.Clear();
}
void Layer::CompleteAllAnimations() {
@@ -749,6 +742,7 @@ void Layer::PaintContents(
sk_canvas, device_scale_factor_));
if (delegate_)
delegate_->OnPaintLayer(PaintContext(canvas.get(), clip));
+ ClearDamagedRects();
sky 2015/04/21 23:56:54 What happens if as part of painting something gets
piman 2015/04/22 03:32:13 Conversely, what happens if damage to the layer is
danakj 2015/04/22 16:32:21 It's possible, I wanted to think of that as a bug,
}
void Layer::PaintContentsToDisplayList(
@@ -765,6 +759,7 @@ void Layer::PaintContentsToDisplayList(
delegate_->OnPaintLayer(
PaintContext(display_list, device_scale_factor_, clip, invalidation));
}
+ ClearDamagedRects();
}
bool Layer::FillsBoundsCompletely() const { return fills_bounds_completely_; }
« content/browser/compositor/reflector_impl_unittest.cc ('K') | « ui/compositor/layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698