Index: cc/output/overlay_unittest.cc |
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
index 70d81f6fc6b5b91cad316212a151b30d23c6c814..6d5f36205742d7cd30d3778665578c5c49122e49 100644 |
--- a/cc/output/overlay_unittest.cc |
+++ b/cc/output/overlay_unittest.cc |
@@ -1398,6 +1398,38 @@ TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { |
} |
} |
+// Underlay damage can only be subtracted if the previous frame's underlay |
+// exists. |
+TEST_F(UnderlayTest, DamageNotSubtractedForNonConsecutiveIdenticalUnderlays) { |
+ bool has_fullscreen_candidate[] = {true, false, true}; |
+ |
+ for (int i = 0; i < 3; ++i) { |
+ std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
+ |
+ if (has_fullscreen_candidate[i]) { |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ } |
+ |
+ damage_rect_ = kOverlayRect; |
+ |
+ // Add something behind it. |
+ CreateFullscreenOpaqueQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), pass.get()); |
+ |
+ OverlayCandidateList candidate_list; |
+ base::flat_map<int, FilterOperations*> render_pass_filters; |
+ base::flat_map<int, FilterOperations*> render_pass_background_filters; |
+ overlay_processor_->ProcessForOverlays( |
+ resource_provider_.get(), pass.get(), render_pass_filters, |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
+ } |
+ |
+ EXPECT_EQ(kOverlayRect, damage_rect_); |
+} |
+ |
TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { |
for (int i = 0; i < 2; ++i) { |
std::unique_ptr<RenderPass> pass = CreateRenderPass(); |