diff options
author | ccameron <ccameron@chromium.org> | 2015-10-30 16:35:31 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-30 23:36:07 +0000 |
commit | f6a13431381bb070228b5af79e6fd537251c647b (patch) | |
tree | e787bf814a287de1d1cd43cad5c7226adc54b527 | |
parent | 21f1f8d15b57b878015869959873e973b4b0ff44 (diff) | |
download | chromium_src-f6a13431381bb070228b5af79e6fd537251c647b.zip chromium_src-f6a13431381bb070228b5af79e6fd537251c647b.tar.gz chromium_src-f6a13431381bb070228b5af79e6fd537251c647b.tar.bz2 |
Revert of Avoid Copying damage rect when using Overlays (patchset #13 id:240001 of https://codereview.chromium.org/1330563004/ )
Reason for revert:
This broke YouTube on Mac, in particular the sandwich overlay strategy.
BUG=549350
Original issue's description:
> Avoid Copying damage rect when using Overlays
>
> When using Overlays, the damage rect can be completely covered by
> the layer being composited by Overlay. We still copy damage rect
> on to the current surface(Primary frame buffer) in BufferQueue. This
> should be un-necessary.
>
> BUG=370522,548452
> CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
>
> Committed: https://crrev.com/2904998edff0cfcaab43eeb3b1db013d6169bd17
> Cr-Commit-Position: refs/heads/master@{#356352}
>
> Committed: https://crrev.com/5ee13b006abdf74d0f6b3fbdde2d936c00ad97e7
> Cr-Commit-Position: refs/heads/master@{#356570}
TBR=alexst@chromium.org,achaulk@chromium.org,danakj@chromium.org,piman@chromium.org,kalyan.kondapally@intel.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=370522,548452
Review URL: https://codereview.chromium.org/1408953005
Cr-Commit-Position: refs/heads/master@{#357224}
-rw-r--r-- | cc/output/direct_renderer.cc | 3 | ||||
-rw-r--r-- | cc/output/overlay_candidate.cc | 3 | ||||
-rw-r--r-- | cc/output/overlay_candidate.h | 2 | ||||
-rw-r--r-- | cc/output/overlay_processor.cc | 23 | ||||
-rw-r--r-- | cc/output/overlay_processor.h | 3 | ||||
-rw-r--r-- | cc/output/overlay_unittest.cc | 109 | ||||
-rw-r--r-- | content/common/gpu/image_transport_surface_overlay_mac.mm | 2 |
7 files changed, 49 insertions, 96 deletions
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc index 7a27efd..0083427 100644 --- a/cc/output/direct_renderer.cc +++ b/cc/output/direct_renderer.cc @@ -240,8 +240,7 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, // otherwise the framebuffer will be missing the overlay contents. if (root_render_pass->copy_requests.empty()) { overlay_processor_->ProcessForOverlays( - resource_provider_, render_passes_in_draw_order, &frame.overlay_list, - &frame.root_damage_rect); + resource_provider_, render_passes_in_draw_order, &frame.overlay_list); } for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { diff --git a/cc/output/overlay_candidate.cc b/cc/output/overlay_candidate.cc index 5931e7d..658f153 100644 --- a/cc/output/overlay_candidate.cc +++ b/cc/output/overlay_candidate.cc @@ -175,7 +175,6 @@ OverlayCandidate::OverlayCandidate() use_output_surface_for_resource(false), resource_id(0), plane_z_order(0), - needs_blending(false), overlay_handled(false) {} OverlayCandidate::~OverlayCandidate() {} @@ -197,8 +196,6 @@ bool OverlayCandidate::FromDrawQuad(ResourceProvider* resource_provider, candidate->format = RGBA_8888; candidate->clip_rect = quad->shared_quad_state->clip_rect; candidate->is_clipped = quad->shared_quad_state->is_clipped; - candidate->needs_blending = - quad->shared_quad_state->opacity < 1.0f || quad->needs_blending; switch (quad->material) { case DrawQuad::TEXTURE_CONTENT: diff --git a/cc/output/overlay_candidate.h b/cc/output/overlay_candidate.h index 8033dca7..aa42ba1 100644 --- a/cc/output/overlay_candidate.h +++ b/cc/output/overlay_candidate.h @@ -66,8 +66,6 @@ class CC_EXPORT OverlayCandidate { // Stacking order of the overlay plane relative to the main surface, // which is 0. Signed to allow for "underlays". int plane_z_order; - // If the overlay needs blending support. - bool needs_blending; // To be modified by the implementer if this candidate can go into // an overlay. diff --git a/cc/output/overlay_processor.cc b/cc/output/overlay_processor.cc index 59434b0..69368a1 100644 --- a/cc/output/overlay_processor.cc +++ b/cc/output/overlay_processor.cc @@ -12,14 +12,6 @@ namespace cc { -namespace { - -bool SortByZOrder(const OverlayCandidate& a, const OverlayCandidate& b) { - return (a.plane_z_order < b.plane_z_order); -} - -} // namespace - OverlayProcessor::OverlayProcessor(OutputSurface* surface) : surface_(surface) { } @@ -35,21 +27,10 @@ OverlayProcessor::~OverlayProcessor() {} void OverlayProcessor::ProcessForOverlays(ResourceProvider* resource_provider, RenderPassList* render_passes, - OverlayCandidateList* candidates, - gfx::Rect* damage_rect) { + OverlayCandidateList* candidates) { for (auto strategy : strategies_) { - if (strategy->Attempt(resource_provider, render_passes, candidates)) { - std::sort(candidates->begin(), candidates->end(), SortByZOrder); - - for (const OverlayCandidate& overlay : *candidates) { - if (overlay.plane_z_order <= 0 || overlay.needs_blending) - continue; - - damage_rect->Subtract(ToEnclosedRect(overlay.display_rect)); - } - + if (strategy->Attempt(resource_provider, render_passes, candidates)) return; - } } } diff --git a/cc/output/overlay_processor.h b/cc/output/overlay_processor.h index b4448d3..48ffe6b 100644 --- a/cc/output/overlay_processor.h +++ b/cc/output/overlay_processor.h @@ -37,8 +37,7 @@ class CC_EXPORT OverlayProcessor { void ProcessForOverlays(ResourceProvider* resource_provider, RenderPassList* render_passes, - OverlayCandidateList* candidates, - gfx::Rect* damage_rect); + OverlayCandidateList* candidates); protected: StrategyList strategies_; diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc index f15f13f4..722002e 100644 --- a/cc/output/overlay_unittest.cc +++ b/cc/output/overlay_unittest.cc @@ -366,7 +366,6 @@ 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; @@ -420,7 +419,7 @@ TEST_F(SandwichTest, SuccessfulSingleOverlay) { // Check for potential candidates. OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); @@ -462,7 +461,7 @@ TEST_F(SandwichTest, CroppedSingleOverlay) { // Check for potential candidates. OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); // Ensure that the display and uv rects have cropping applied to them. ASSERT_EQ(1U, pass_list.size()); @@ -491,7 +490,7 @@ TEST_F(SandwichTest, SuccessfulTwoOverlays) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); // Both candidates should become overlays. EXPECT_EQ(1u, pass_list.size()); @@ -525,7 +524,7 @@ TEST_F(SandwichTest, OverlappingOverlays) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); // Only one of the candidates should become an overlay. EXPECT_EQ(1u, pass_list.size()); @@ -560,7 +559,8 @@ TEST_F(SandwichTest, SuccessfulSandwichOverlay) { // Check for potential candidates. OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); + 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, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(3U, candidate_list.size()); @@ -667,7 +667,7 @@ TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { // Check for potential candidates. OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); @@ -686,29 +686,6 @@ 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; - 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(), @@ -724,7 +701,7 @@ TEST_F(SingleOverlayOnTopTest, NoCandidates) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(0U, candidate_list.size()); // There should be nothing new here. CompareRenderPassLists(pass_list, original_pass_list); @@ -749,7 +726,7 @@ TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(0U, candidate_list.size()); // There should be nothing new here. CompareRenderPassLists(pass_list, original_pass_list); @@ -779,7 +756,7 @@ TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { // Check for potential candidates. OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, candidate_list.size()); // This should be the same. @@ -798,7 +775,7 @@ TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -815,7 +792,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBlending) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -832,7 +809,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -848,7 +825,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -864,7 +841,7 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -881,7 +858,7 @@ TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -898,7 +875,7 @@ TEST_F(SingleOverlayOnTopTest, AllowClipped) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -917,7 +894,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, @@ -938,7 +915,7 @@ TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, @@ -958,7 +935,7 @@ TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -976,7 +953,7 @@ TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); @@ -995,7 +972,7 @@ TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); @@ -1014,7 +991,7 @@ TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); @@ -1038,7 +1015,7 @@ TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1062,7 +1039,7 @@ TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1084,7 +1061,7 @@ TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1108,7 +1085,7 @@ TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -1130,7 +1107,7 @@ TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -1145,7 +1122,7 @@ TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(0U, candidate_list.size()); } @@ -1160,7 +1137,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1175,7 +1152,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1190,7 +1167,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1205,7 +1182,7 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); ASSERT_EQ(1U, pass_list.size()); EXPECT_EQ(1U, candidate_list.size()); } @@ -1223,7 +1200,7 @@ TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(-1, candidate_list[0].plane_z_order); @@ -1246,7 +1223,7 @@ TEST_F(UnderlayTest, AllowOnTop) { OverlayCandidateList candidate_list; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidate_list, &damage_rect_); + &candidate_list); EXPECT_EQ(1U, pass_list.size()); ASSERT_EQ(1U, candidate_list.size()); EXPECT_EQ(-1, candidate_list[0].plane_z_order); @@ -1269,14 +1246,14 @@ TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidates; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidates, &damage_rect_); + &candidates); // Both quads should become overlays. EXPECT_EQ(2u, candidates.size()); - EXPECT_EQ(-2, candidates[0].plane_z_order); - EXPECT_EQ(-1, candidates[1].plane_z_order); - EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[1].display_rect); - EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[0].display_rect); + EXPECT_EQ(-1, candidates[0].plane_z_order); + EXPECT_EQ(-2, candidates[1].plane_z_order); + EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect); + EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect); // All quads should be gone. EXPECT_TRUE(pass_list.back()->quad_list.empty()); @@ -1300,7 +1277,7 @@ TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) { pass_list.push_back(pass.Pass()); OverlayCandidateList candidates; overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, - &candidates, &damage_rect_); + &candidates); // No quads should become overlays. EXPECT_EQ(0u, candidates.size()); @@ -1337,7 +1314,7 @@ class OverlayInfoRendererGL : public GLRenderer { } ASSERT_EQ(2U, frame->overlay_list.size()); - EXPECT_GE(frame->overlay_list.back().resource_id, 0U); + EXPECT_NE(0U, frame->overlay_list.back().resource_id); } void set_expect_overlays(bool expect_overlays) { diff --git a/content/common/gpu/image_transport_surface_overlay_mac.mm b/content/common/gpu/image_transport_surface_overlay_mac.mm index 298baa3..c7639cb 100644 --- a/content/common/gpu/image_transport_surface_overlay_mac.mm +++ b/content/common/gpu/image_transport_surface_overlay_mac.mm @@ -374,6 +374,8 @@ void ImageTransportSurfaceOverlayMac::DisplayFirstPendingSwapImmediately() { swap->scale_factor, swap->pixel_damage_rect); std::sort(swap->overlay_planes.begin(), swap->overlay_planes.end(), OverlayPlane::Compare); + for (auto& plane : swap->overlay_planes) + dip_damage_rect.Subtract(plane->dip_frame_rect); ScopedCAActionDisabler disabler; UpdateRootAndPartialDamagePlanes(swap->root_plane, dip_damage_rect); |