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

Unified Diff: cc/output/dc_layer_overlay.cc

Issue 2754663003: DCLayerOverlay should damage entire frame on resize. (Closed)
Patch Set: update test Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/dc_layer_overlay.h ('k') | cc/output/overlay_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/dc_layer_overlay.cc
diff --git a/cc/output/dc_layer_overlay.cc b/cc/output/dc_layer_overlay.cc
index 3523c4519ac489361cf0f0a03a1df4dbd11b45c1..44baeeb62e74c6c2a7d481d45ea56c556877814b 100644
--- a/cc/output/dc_layer_overlay.cc
+++ b/cc/output/dc_layer_overlay.cc
@@ -113,6 +113,7 @@ void DCLayerOverlayProcessor::Process(ResourceProvider* resource_provider,
gfx::Rect* damage_rect,
DCLayerOverlayList* ca_layer_overlays) {
gfx::Rect this_frame_underlay_rect;
+ bool display_rect_changed = (display_rect != previous_display_rect_);
for (auto it = quad_list->begin(); it != quad_list->end(); ++it) {
DCLayerOverlay ca_layer;
DCLayerResult result = FromDrawQuad(resource_provider, display_rect,
@@ -123,14 +124,15 @@ void DCLayerOverlayProcessor::Process(ResourceProvider* resource_provider,
it->shared_quad_state->quad_to_target_transform, it->rect);
gfx::RectF occlusion_bounding_box =
GetOcclusionBounds(gfx::RectF(quad_rectangle), quad_list->begin(), it);
+ overlay_damage_rect->Union(quad_rectangle);
if (occlusion_bounding_box.IsEmpty()) {
// The quad is on top, so promote it to an overlay and remove all damage
// underneath it.
if (it->shared_quad_state->quad_to_target_transform
- .Preserves2dAxisAlignment()) {
+ .Preserves2dAxisAlignment() &&
+ !display_rect_changed) {
damage_rect->Subtract(quad_rectangle);
- overlay_damage_rect->Union(quad_rectangle);
}
quad_list->EraseAndInvalidateAllPointers(it);
} else {
@@ -154,7 +156,8 @@ void DCLayerOverlayProcessor::Process(ResourceProvider* resource_provider,
// already cleared last frame. Add back the damage from the occluded
// area for this and last frame, as that may have changed.
if (it->shared_quad_state->quad_to_target_transform
- .Preserves2dAxisAlignment()) {
+ .Preserves2dAxisAlignment() &&
+ !display_rect_changed) {
gfx::Rect occluding_damage_rect = *damage_rect;
occluding_damage_rect.Intersect(quad_rectangle);
damage_rect->Subtract(quad_rectangle);
@@ -164,7 +167,6 @@ void DCLayerOverlayProcessor::Process(ResourceProvider* resource_provider,
occluding_damage_rect.Intersect(new_occlusion_bounding_box);
damage_rect->Union(occluding_damage_rect);
- overlay_damage_rect->Union(quad_rectangle);
}
} else {
// Entire replacement quad must be redrawn.
@@ -178,7 +180,9 @@ void DCLayerOverlayProcessor::Process(ResourceProvider* resource_provider,
// Only allow one overlay for now.
break;
}
+ damage_rect->Intersect(gfx::ToEnclosingRect(display_rect));
previous_frame_underlay_rect_ = this_frame_underlay_rect;
+ previous_display_rect_ = display_rect;
}
} // namespace cc
« no previous file with comments | « cc/output/dc_layer_overlay.h ('k') | cc/output/overlay_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698