| Index: cc/output/overlay_unittest.cc
|
| diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
|
| index 722002e5580e203359fbbd4a954afac2844179c7..9b69b9a5e56ddef7dc5f16683588c78ae5e0ef0a 100644
|
| --- a/cc/output/overlay_unittest.cc
|
| +++ b/cc/output/overlay_unittest.cc
|
| @@ -366,6 +366,7 @@ class OverlayTest : public testing::Test {
|
| scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
|
| scoped_ptr<ResourceProvider> resource_provider_;
|
| scoped_ptr<OverlayProcessor> overlay_processor_;
|
| + gfx::Rect damage_rect_;
|
| };
|
|
|
| typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest;
|
| @@ -419,7 +420,7 @@ TEST_F(SandwichTest, SuccessfulSingleOverlay) {
|
| // Check for potential candidates.
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
|
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| @@ -461,7 +462,7 @@ TEST_F(SandwichTest, CroppedSingleOverlay) {
|
| // Check for potential candidates.
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
|
|
| // Ensure that the display and uv rects have cropping applied to them.
|
| ASSERT_EQ(1U, pass_list.size());
|
| @@ -490,7 +491,7 @@ TEST_F(SandwichTest, SuccessfulTwoOverlays) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
|
|
| // Both candidates should become overlays.
|
| EXPECT_EQ(1u, pass_list.size());
|
| @@ -524,7 +525,7 @@ TEST_F(SandwichTest, OverlappingOverlays) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
|
|
| // Only one of the candidates should become an overlay.
|
| EXPECT_EQ(1u, pass_list.size());
|
| @@ -559,8 +560,7 @@ TEST_F(SandwichTest, SuccessfulSandwichOverlay) {
|
| // Check for potential candidates.
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| -
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(2U, candidate_list.size());
|
|
|
| @@ -615,7 +615,7 @@ TEST_F(SandwichTest, MultiQuadOverlay) {
|
| OverlayCandidateList candidate_list;
|
| EXPECT_EQ(4U, main_pass->quad_list.size());
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(3U, candidate_list.size());
|
|
|
| @@ -647,6 +647,39 @@ TEST_F(SandwichTest, MultiQuadOverlay) {
|
| DCHECK(covered_region == overlay_region);
|
| }
|
|
|
| +TEST_F(SandwichTest, DamageRect) {
|
| + scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| + 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());
|
| + CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get());
|
| +
|
| + RenderPassList pass_list;
|
| + pass_list.push_back(pass.Pass());
|
| +
|
| + // Check for potential candidates.
|
| + OverlayCandidateList candidate_list;
|
| +
|
| + // Primary plane.
|
| + OverlayCandidate output_surface_plane;
|
| + output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
|
| + output_surface_plane.quad_rect_in_target_space = kOverlayRect;
|
| + output_surface_plane.use_output_surface_for_resource = true;
|
| + output_surface_plane.overlay_handled = true;
|
| + candidate_list.push_back(output_surface_plane);
|
| +
|
| + overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| + &candidate_list, &damage_rect_);
|
| + DCHECK(!damage_rect_.IsEmpty());
|
| +}
|
| +
|
| TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
|
| scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| TextureDrawQuad* original_quad =
|
| @@ -667,7 +700,7 @@ TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
|
| // Check for potential candidates.
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
|
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| @@ -686,6 +719,38 @@ TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
|
| EXPECT_EQ(original_resource_id, candidate_list.back().resource_id);
|
| }
|
|
|
| +TEST_F(SingleOverlayOnTopTest, DamageRect) {
|
| + scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| + 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());
|
| + CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get());
|
| +
|
| + RenderPassList pass_list;
|
| + pass_list.push_back(pass.Pass());
|
| +
|
| + // Check for potential candidates.
|
| + OverlayCandidateList candidate_list;
|
| +
|
| + // Primary plane.
|
| + OverlayCandidate output_surface_plane;
|
| + output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
|
| + output_surface_plane.quad_rect_in_target_space = kOverlayRect;
|
| + output_surface_plane.use_output_surface_for_resource = true;
|
| + output_surface_plane.overlay_handled = true;
|
| + candidate_list.push_back(output_surface_plane);
|
| +
|
| + overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| + &candidate_list, &damage_rect_);
|
| + DCHECK(damage_rect_.IsEmpty());
|
| +}
|
| +
|
| TEST_F(SingleOverlayOnTopTest, NoCandidates) {
|
| scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| @@ -701,7 +766,7 @@ TEST_F(SingleOverlayOnTopTest, NoCandidates) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| // There should be nothing new here.
|
| CompareRenderPassLists(pass_list, original_pass_list);
|
| @@ -726,7 +791,7 @@ TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| // There should be nothing new here.
|
| CompareRenderPassLists(pass_list, original_pass_list);
|
| @@ -756,7 +821,7 @@ TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
|
| // Check for potential candidates.
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
|
|
| // This should be the same.
|
| @@ -775,7 +840,7 @@ TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -792,7 +857,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBlending) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -809,7 +874,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -825,7 +890,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -841,7 +906,7 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -858,7 +923,7 @@ TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -875,7 +940,7 @@ TEST_F(SingleOverlayOnTopTest, AllowClipped) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -894,7 +959,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL,
|
| @@ -915,7 +980,7 @@ TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL,
|
| @@ -935,7 +1000,7 @@ TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -953,7 +1018,7 @@ TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform);
|
| @@ -972,7 +1037,7 @@ TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform);
|
| @@ -991,7 +1056,7 @@ TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform);
|
| @@ -1015,7 +1080,7 @@ TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1039,7 +1104,7 @@ TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1061,7 +1126,7 @@ TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1085,7 +1150,7 @@ TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -1107,7 +1172,7 @@ TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -1122,7 +1187,7 @@ TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
| @@ -1137,7 +1202,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1152,7 +1217,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1167,7 +1232,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1182,7 +1247,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| ASSERT_EQ(1U, pass_list.size());
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
| @@ -1200,7 +1265,7 @@ TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(-1, candidate_list[0].plane_z_order);
|
| @@ -1223,7 +1288,7 @@ TEST_F(UnderlayTest, AllowOnTop) {
|
|
|
| OverlayCandidateList candidate_list;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidate_list);
|
| + &candidate_list, &damage_rect_);
|
| EXPECT_EQ(1U, pass_list.size());
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(-1, candidate_list[0].plane_z_order);
|
| @@ -1231,6 +1296,39 @@ TEST_F(UnderlayTest, AllowOnTop) {
|
| EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR);
|
| }
|
|
|
| +TEST_F(UnderlayTest, DamageRect) {
|
| + scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| + 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());
|
| + CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get());
|
| +
|
| + RenderPassList pass_list;
|
| + pass_list.push_back(pass.Pass());
|
| +
|
| + // Check for potential candidates.
|
| + OverlayCandidateList candidate_list;
|
| +
|
| + // Primary plane.
|
| + OverlayCandidate output_surface_plane;
|
| + output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
|
| + output_surface_plane.quad_rect_in_target_space = kOverlayRect;
|
| + output_surface_plane.use_output_surface_for_resource = true;
|
| + output_surface_plane.overlay_handled = true;
|
| + candidate_list.push_back(output_surface_plane);
|
| +
|
| + overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| + &candidate_list, &damage_rect_);
|
| + DCHECK(!damage_rect_.IsEmpty());
|
| +}
|
| +
|
| TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) {
|
| scoped_ptr<RenderPass> pass = CreateRenderPass();
|
|
|
| @@ -1246,7 +1344,7 @@ TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidates;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidates);
|
| + &candidates, &damage_rect_);
|
|
|
| // Both quads should become overlays.
|
| EXPECT_EQ(2u, candidates.size());
|
| @@ -1277,13 +1375,46 @@ TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) {
|
| pass_list.push_back(pass.Pass());
|
| OverlayCandidateList candidates;
|
| overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| - &candidates);
|
| + &candidates, &damage_rect_);
|
|
|
| // No quads should become overlays.
|
| EXPECT_EQ(0u, candidates.size());
|
| EXPECT_EQ(2u, pass_list.back()->quad_list.size());
|
| }
|
|
|
| +TEST_F(AllOrNothingOverlayTest, DamageRect) {
|
| + scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| + 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());
|
| + CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get());
|
| +
|
| + RenderPassList pass_list;
|
| + pass_list.push_back(pass.Pass());
|
| +
|
| + // Check for potential candidates.
|
| + OverlayCandidateList candidate_list;
|
| +
|
| + // Primary plane.
|
| + OverlayCandidate output_surface_plane;
|
| + output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
|
| + output_surface_plane.quad_rect_in_target_space = kOverlayRect;
|
| + output_surface_plane.use_output_surface_for_resource = true;
|
| + output_surface_plane.overlay_handled = true;
|
| + candidate_list.push_back(output_surface_plane);
|
| +
|
| + overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
|
| + &candidate_list, &damage_rect_);
|
| + DCHECK(!damage_rect_.IsEmpty());
|
| +}
|
| +
|
| class OverlayInfoRendererGL : public GLRenderer {
|
| public:
|
| OverlayInfoRendererGL(RendererClient* client,
|
| @@ -1314,7 +1445,7 @@ class OverlayInfoRendererGL : public GLRenderer {
|
| }
|
|
|
| ASSERT_EQ(2U, frame->overlay_list.size());
|
| - EXPECT_NE(0U, frame->overlay_list.back().resource_id);
|
| + EXPECT_GE(frame->overlay_list.back().resource_id, 0U);
|
| }
|
|
|
| void set_expect_overlays(bool expect_overlays) {
|
| @@ -1385,10 +1516,9 @@ TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) {
|
|
|
| scoped_ptr<RenderPass> pass = CreateRenderPass();
|
|
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| + CreateCandidateQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayBottomRightRect);
|
| CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| pass->shared_quad_state_list.back(), pass.get());
|
| CreateFullscreenOpaqueQuad(resource_provider_.get(),
|
| @@ -1404,9 +1534,9 @@ TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) {
|
| Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _,
|
| gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1)))
|
| .Times(1);
|
| - EXPECT_CALL(scheduler_,
|
| - Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect,
|
| - BoundingRect(kUVTopLeft, kUVBottomRight)))
|
| + EXPECT_CALL(scheduler_, Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _,
|
| + kOverlayBottomRightRect,
|
| + BoundingRect(kUVTopLeft, kUVBottomRight)))
|
| .Times(1);
|
| renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
|
|
|
|
|