| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 11 #include "cc/base/region.h" | 11 #include "cc/base/region.h" |
| 12 #include "cc/output/ca_layer_overlay.h" | 12 #include "cc/output/ca_layer_overlay.h" |
| 13 #include "cc/output/filter_operation.h" | 13 #include "cc/output/filter_operation.h" |
| 14 #include "cc/output/gl_renderer.h" | 14 #include "cc/output/gl_renderer.h" |
| 15 #include "cc/output/output_surface.h" | 15 #include "cc/output/output_surface.h" |
| 16 #include "cc/output/output_surface_client.h" | 16 #include "cc/output/output_surface_client.h" |
| 17 #include "cc/output/output_surface_frame.h" | 17 #include "cc/output/output_surface_frame.h" |
| 18 #include "cc/output/overlay_candidate_validator.h" | 18 #include "cc/output/overlay_candidate_validator.h" |
| 19 #include "cc/output/overlay_processor.h" | 19 #include "cc/output/overlay_processor.h" |
| 20 #include "cc/output/overlay_strategy_fullscreen.h" | 20 #include "cc/output/overlay_strategy_fullscreen.h" |
| 21 #include "cc/output/overlay_strategy_single_on_top.h" | 21 #include "cc/output/overlay_strategy_single_on_top.h" |
| 22 #include "cc/output/overlay_strategy_underlay.h" | 22 #include "cc/output/overlay_strategy_underlay.h" |
| 23 #include "cc/output/overlay_strategy_underlay_cast.h" |
| 23 #include "cc/quads/render_pass.h" | 24 #include "cc/quads/render_pass.h" |
| 24 #include "cc/quads/render_pass_draw_quad.h" | 25 #include "cc/quads/render_pass_draw_quad.h" |
| 25 #include "cc/quads/solid_color_draw_quad.h" | 26 #include "cc/quads/solid_color_draw_quad.h" |
| 26 #include "cc/quads/stream_video_draw_quad.h" | 27 #include "cc/quads/stream_video_draw_quad.h" |
| 27 #include "cc/quads/texture_draw_quad.h" | 28 #include "cc/quads/texture_draw_quad.h" |
| 28 #include "cc/resources/resource_provider.h" | 29 #include "cc/resources/resource_provider.h" |
| 29 #include "cc/resources/texture_mailbox.h" | 30 #include "cc/resources/texture_mailbox.h" |
| 30 #include "cc/test/fake_output_surface_client.h" | 31 #include "cc/test/fake_output_surface_client.h" |
| 31 #include "cc/test/fake_resource_provider.h" | 32 #include "cc/test/fake_resource_provider.h" |
| 32 #include "cc/test/geometry_test_utils.h" | 33 #include "cc/test/geometry_test_utils.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 public: | 71 public: |
| 71 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 72 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 72 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); | 73 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); |
| 73 } | 74 } |
| 74 bool AllowCALayerOverlays() override { return false; } | 75 bool AllowCALayerOverlays() override { return false; } |
| 75 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 76 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
| 76 }; | 77 }; |
| 77 | 78 |
| 78 class SingleOverlayValidator : public OverlayCandidateValidator { | 79 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 79 public: | 80 public: |
| 81 SingleOverlayValidator() : expected_rect_(kOverlayRect) {} |
| 82 |
| 80 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 83 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 81 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); | 84 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); |
| 82 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); | 85 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); |
| 83 } | 86 } |
| 84 bool AllowCALayerOverlays() override { return false; } | 87 bool AllowCALayerOverlays() override { return false; } |
| 85 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 88 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 86 // We may have 1 or 2 surfaces depending on whether this ran through the | 89 // We may have 1 or 2 surfaces depending on whether this ran through the |
| 87 // full renderer and picked up the output surface, or not. | 90 // full renderer and picked up the output surface, or not. |
| 88 ASSERT_LE(1U, surfaces->size()); | 91 ASSERT_LE(1U, surfaces->size()); |
| 89 ASSERT_GE(2U, surfaces->size()); | 92 ASSERT_GE(2U, surfaces->size()); |
| 90 | 93 |
| 91 OverlayCandidate& candidate = surfaces->back(); | 94 OverlayCandidate& candidate = surfaces->back(); |
| 92 EXPECT_TRUE(!candidate.use_output_surface_for_resource); | 95 EXPECT_TRUE(!candidate.use_output_surface_for_resource); |
| 93 if (candidate.display_rect.width() == kOverlayBottomRightRect.width()) { | 96 EXPECT_NEAR(expected_rect_.x(), candidate.display_rect.x(), 0.01f); |
| 94 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); | 97 EXPECT_NEAR(expected_rect_.y(), candidate.display_rect.y(), 0.01f); |
| 95 } else { | 98 EXPECT_NEAR(expected_rect_.width(), candidate.display_rect.width(), 0.01f); |
| 96 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 99 EXPECT_NEAR(expected_rect_.height(), candidate.display_rect.height(), |
| 97 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 100 0.01f); |
| 98 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 101 |
| 99 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | |
| 100 0.01f); | |
| 101 } | |
| 102 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), | 102 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
| 103 candidate.uv_rect); | 103 candidate.uv_rect); |
| 104 if (!candidate.clip_rect.IsEmpty()) { | 104 if (!candidate.clip_rect.IsEmpty()) { |
| 105 EXPECT_EQ(true, candidate.is_clipped); | 105 EXPECT_EQ(true, candidate.is_clipped); |
| 106 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); | 106 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); |
| 107 } | 107 } |
| 108 candidate.overlay_handled = true; | 108 candidate.overlay_handled = true; |
| 109 } | 109 } |
| 110 |
| 111 void SetExpectedRect(const gfx::RectF& rect) { expected_rect_ = rect; } |
| 112 |
| 113 private: |
| 114 gfx::RectF expected_rect_; |
| 110 }; | 115 }; |
| 111 | 116 |
| 112 class CALayerValidator : public OverlayCandidateValidator { | 117 class CALayerValidator : public OverlayCandidateValidator { |
| 113 public: | 118 public: |
| 114 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} | 119 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
| 115 bool AllowCALayerOverlays() override { return true; } | 120 bool AllowCALayerOverlays() override { return true; } |
| 116 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 121 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
| 117 }; | 122 }; |
| 118 | 123 |
| 119 class SingleOnTopOverlayValidator : public SingleOverlayValidator { | 124 class SingleOnTopOverlayValidator : public SingleOverlayValidator { |
| 120 public: | 125 public: |
| 121 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 126 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 122 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); | 127 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); |
| 123 } | 128 } |
| 124 }; | 129 }; |
| 125 | 130 |
| 126 class UnderlayOverlayValidator : public SingleOverlayValidator { | 131 class UnderlayOverlayValidator : public SingleOverlayValidator { |
| 127 public: | 132 public: |
| 128 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 133 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 129 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); | 134 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); |
| 130 } | 135 } |
| 131 }; | 136 }; |
| 132 | 137 |
| 138 class UnderlayCastOverlayValidator : public SingleOverlayValidator { |
| 139 public: |
| 140 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 141 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlayCast>(this)); |
| 142 } |
| 143 }; |
| 144 |
| 133 class DefaultOverlayProcessor : public OverlayProcessor { | 145 class DefaultOverlayProcessor : public OverlayProcessor { |
| 134 public: | 146 public: |
| 135 explicit DefaultOverlayProcessor(OutputSurface* surface); | 147 explicit DefaultOverlayProcessor(OutputSurface* surface); |
| 136 size_t GetStrategyCount(); | 148 size_t GetStrategyCount(); |
| 137 }; | 149 }; |
| 138 | 150 |
| 139 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) | 151 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) |
| 140 : OverlayProcessor(surface) { | 152 : OverlayProcessor(surface) { |
| 141 } | 153 } |
| 142 | 154 |
| 143 size_t DefaultOverlayProcessor::GetStrategyCount() { | 155 size_t DefaultOverlayProcessor::GetStrategyCount() { |
| 144 return strategies_.size(); | 156 return strategies_.size(); |
| 145 } | 157 } |
| 146 | 158 |
| 159 template <typename OverlayCandidateValidatorType> |
| 147 class OverlayOutputSurface : public OutputSurface { | 160 class OverlayOutputSurface : public OutputSurface { |
| 148 public: | 161 public: |
| 149 explicit OverlayOutputSurface( | 162 explicit OverlayOutputSurface( |
| 150 scoped_refptr<TestContextProvider> context_provider) | 163 scoped_refptr<TestContextProvider> context_provider) |
| 151 : OutputSurface(std::move(context_provider)) { | 164 : OutputSurface(std::move(context_provider)) { |
| 152 is_displayed_as_overlay_plane_ = true; | 165 is_displayed_as_overlay_plane_ = true; |
| 153 } | 166 } |
| 154 | 167 |
| 155 // OutputSurface implementation. | 168 // OutputSurface implementation. |
| 156 void BindToClient(OutputSurfaceClient* client) override {} | 169 void BindToClient(OutputSurfaceClient* client) override {} |
| 157 void EnsureBackbuffer() override {} | 170 void EnsureBackbuffer() override {} |
| 158 void DiscardBackbuffer() override {} | 171 void DiscardBackbuffer() override {} |
| 159 void BindFramebuffer() override { | 172 void BindFramebuffer() override { |
| 160 bind_framebuffer_count_ += 1; | 173 bind_framebuffer_count_ += 1; |
| 161 } | 174 } |
| 162 void Reshape(const gfx::Size& size, | 175 void Reshape(const gfx::Size& size, |
| 163 float device_scale_factor, | 176 float device_scale_factor, |
| 164 const gfx::ColorSpace& color_space, | 177 const gfx::ColorSpace& color_space, |
| 165 bool has_alpha, | 178 bool has_alpha, |
| 166 bool use_stencil) override {} | 179 bool use_stencil) override {} |
| 167 void SwapBuffers(OutputSurfaceFrame frame) override {} | 180 void SwapBuffers(OutputSurfaceFrame frame) override {} |
| 168 uint32_t GetFramebufferCopyTextureFormat() override { | 181 uint32_t GetFramebufferCopyTextureFormat() override { |
| 169 // TestContextProvider has no real framebuffer, just use RGB. | 182 // TestContextProvider has no real framebuffer, just use RGB. |
| 170 return GL_RGB; | 183 return GL_RGB; |
| 171 } | 184 } |
| 172 bool HasExternalStencilTest() const override { return false; } | 185 bool HasExternalStencilTest() const override { return false; } |
| 173 void ApplyExternalStencil() override {} | 186 void ApplyExternalStencil() override {} |
| 174 OverlayCandidateValidator* GetOverlayCandidateValidator() const override { | 187 OverlayCandidateValidatorType* GetOverlayCandidateValidator() const override { |
| 175 return overlay_candidate_validator_.get(); | 188 return overlay_candidate_validator_.get(); |
| 176 } | 189 } |
| 177 bool IsDisplayedAsOverlayPlane() const override { | 190 bool IsDisplayedAsOverlayPlane() const override { |
| 178 return is_displayed_as_overlay_plane_; | 191 return is_displayed_as_overlay_plane_; |
| 179 } | 192 } |
| 180 unsigned GetOverlayTextureId() const override { return 10000; } | 193 unsigned GetOverlayTextureId() const override { return 10000; } |
| 181 bool SurfaceIsSuspendForRecycle() const override { return false; } | 194 bool SurfaceIsSuspendForRecycle() const override { return false; } |
| 182 | 195 |
| 183 void set_is_displayed_as_overlay_plane(bool value) { | 196 void set_is_displayed_as_overlay_plane(bool value) { |
| 184 is_displayed_as_overlay_plane_ = value; | 197 is_displayed_as_overlay_plane_ = value; |
| 185 } | 198 } |
| 186 | 199 |
| 187 void SetOverlayCandidateValidator(OverlayCandidateValidator* validator) { | 200 void SetOverlayCandidateValidator(OverlayCandidateValidatorType* validator) { |
| 188 overlay_candidate_validator_.reset(validator); | 201 overlay_candidate_validator_.reset(validator); |
| 189 } | 202 } |
| 190 | 203 |
| 191 unsigned bind_framebuffer_count() const { return bind_framebuffer_count_; } | 204 unsigned bind_framebuffer_count() const { return bind_framebuffer_count_; } |
| 192 | 205 |
| 193 private: | 206 private: |
| 194 std::unique_ptr<OverlayCandidateValidator> overlay_candidate_validator_; | 207 std::unique_ptr<OverlayCandidateValidatorType> overlay_candidate_validator_; |
| 195 bool is_displayed_as_overlay_plane_; | 208 bool is_displayed_as_overlay_plane_; |
| 196 unsigned bind_framebuffer_count_ = 0; | 209 unsigned bind_framebuffer_count_ = 0; |
| 197 }; | 210 }; |
| 198 | 211 |
| 199 std::unique_ptr<RenderPass> CreateRenderPass() { | 212 std::unique_ptr<RenderPass> CreateRenderPass() { |
| 200 int render_pass_id = 1; | 213 int render_pass_id = 1; |
| 201 gfx::Rect output_rect(0, 0, 256, 256); | 214 gfx::Rect output_rect(0, 0, 256, 256); |
| 202 | 215 |
| 203 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 216 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 204 pass->SetNew(render_pass_id, output_rect, output_rect, gfx::Transform()); | 217 pass->SetNew(render_pass_id, output_rect, output_rect, gfx::Transform()); |
| 205 | 218 |
| 206 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 219 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 207 shared_state->opacity = 1.f; | 220 shared_state->opacity = 1.f; |
| 208 return pass; | 221 return pass; |
| 209 } | 222 } |
| 210 | 223 |
| 224 std::unique_ptr<RenderPass> CreateRenderPassWithTransform( |
| 225 const gfx::Transform& transform) { |
| 226 int render_pass_id = 1; |
| 227 gfx::Rect output_rect(0, 0, 256, 256); |
| 228 |
| 229 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 230 pass->SetNew(render_pass_id, output_rect, output_rect, gfx::Transform()); |
| 231 |
| 232 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 233 shared_state->opacity = 1.f; |
| 234 shared_state->quad_to_target_transform = transform; |
| 235 return pass; |
| 236 } |
| 237 |
| 211 ResourceId CreateResource(ResourceProvider* resource_provider, | 238 ResourceId CreateResource(ResourceProvider* resource_provider, |
| 212 const gfx::Size& size, | 239 const gfx::Size& size, |
| 213 bool is_overlay_candidate) { | 240 bool is_overlay_candidate) { |
| 214 TextureMailbox mailbox = | 241 TextureMailbox mailbox = |
| 215 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, | 242 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, |
| 216 size, is_overlay_candidate, false); | 243 size, is_overlay_candidate, false); |
| 217 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = | 244 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = |
| 218 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 245 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 219 | 246 |
| 220 return resource_provider->CreateResourceFromTextureMailbox( | 247 return resource_provider->CreateResourceFromTextureMailbox( |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 | 322 |
| 296 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, | 323 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, |
| 297 const SharedQuadState* shared_quad_state, | 324 const SharedQuadState* shared_quad_state, |
| 298 RenderPass* render_pass, | 325 RenderPass* render_pass, |
| 299 const gfx::Rect& rect) { | 326 const gfx::Rect& rect) { |
| 300 SolidColorDrawQuad* color_quad = | 327 SolidColorDrawQuad* color_quad = |
| 301 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 328 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 302 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); | 329 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); |
| 303 } | 330 } |
| 304 | 331 |
| 332 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, |
| 333 const SharedQuadState* shared_quad_state, |
| 334 RenderPass* render_pass, |
| 335 const gfx::Rect& rect, |
| 336 SkColor color) { |
| 337 DCHECK_EQ(255u, SkColorGetA(color)); |
| 338 SolidColorDrawQuad* color_quad = |
| 339 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 340 color_quad->SetNew(shared_quad_state, rect, rect, color, false); |
| 341 } |
| 342 |
| 305 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider, | 343 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider, |
| 306 const SharedQuadState* shared_quad_state, | 344 const SharedQuadState* shared_quad_state, |
| 307 RenderPass* render_pass) { | 345 RenderPass* render_pass) { |
| 308 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass, | 346 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass, |
| 309 render_pass->output_rect); | 347 render_pass->output_rect); |
| 310 } | 348 } |
| 311 | 349 |
| 312 static void CompareRenderPassLists(const RenderPassList& expected_list, | 350 static void CompareRenderPassLists(const RenderPassList& expected_list, |
| 313 const RenderPassList& actual_list) { | 351 const RenderPassList& actual_list) { |
| 314 EXPECT_EQ(expected_list.size(), actual_list.size()); | 352 EXPECT_EQ(expected_list.size(), actual_list.size()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 334 ++exp_iter, ++act_iter) { | 372 ++exp_iter, ++act_iter) { |
| 335 EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString()); | 373 EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString()); |
| 336 EXPECT_EQ(exp_iter->shared_quad_state->quad_layer_bounds.ToString(), | 374 EXPECT_EQ(exp_iter->shared_quad_state->quad_layer_bounds.ToString(), |
| 337 act_iter->shared_quad_state->quad_layer_bounds.ToString()); | 375 act_iter->shared_quad_state->quad_layer_bounds.ToString()); |
| 338 } | 376 } |
| 339 } | 377 } |
| 340 } | 378 } |
| 341 | 379 |
| 342 template <typename OverlayCandidateValidatorType> | 380 template <typename OverlayCandidateValidatorType> |
| 343 class OverlayTest : public testing::Test { | 381 class OverlayTest : public testing::Test { |
| 382 using OutputSurfaceType = OverlayOutputSurface<OverlayCandidateValidatorType>; |
| 383 |
| 344 protected: | 384 protected: |
| 345 void SetUp() override { | 385 void SetUp() override { |
| 346 provider_ = TestContextProvider::Create(); | 386 provider_ = TestContextProvider::Create(); |
| 347 provider_->BindToCurrentThread(); | 387 provider_->BindToCurrentThread(); |
| 348 output_surface_.reset(new OverlayOutputSurface(provider_)); | 388 output_surface_ = base::MakeUnique<OutputSurfaceType>(provider_); |
| 349 output_surface_->BindToClient(&client_); | 389 output_surface_->BindToClient(&client_); |
| 350 output_surface_->SetOverlayCandidateValidator( | 390 output_surface_->SetOverlayCandidateValidator( |
| 351 new OverlayCandidateValidatorType); | 391 new OverlayCandidateValidatorType); |
| 352 | 392 |
| 353 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); | 393 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); |
| 354 resource_provider_ = FakeResourceProvider::Create( | 394 resource_provider_ = FakeResourceProvider::Create( |
| 355 provider_.get(), shared_bitmap_manager_.get()); | 395 provider_.get(), shared_bitmap_manager_.get()); |
| 356 | 396 |
| 357 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); | 397 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); |
| 358 overlay_processor_->Initialize(); | 398 overlay_processor_->Initialize(); |
| 359 } | 399 } |
| 360 | 400 |
| 361 scoped_refptr<TestContextProvider> provider_; | 401 scoped_refptr<TestContextProvider> provider_; |
| 362 std::unique_ptr<OverlayOutputSurface> output_surface_; | 402 std::unique_ptr<OutputSurfaceType> output_surface_; |
| 363 FakeOutputSurfaceClient client_; | 403 FakeOutputSurfaceClient client_; |
| 364 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; | 404 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 365 std::unique_ptr<ResourceProvider> resource_provider_; | 405 std::unique_ptr<ResourceProvider> resource_provider_; |
| 366 std::unique_ptr<OverlayProcessor> overlay_processor_; | 406 std::unique_ptr<OverlayProcessor> overlay_processor_; |
| 367 gfx::Rect damage_rect_; | 407 gfx::Rect damage_rect_; |
| 408 std::vector<gfx::Rect> content_bounds_; |
| 368 }; | 409 }; |
| 369 | 410 |
| 370 typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest; | 411 using FullscreenOverlayTest = OverlayTest<FullscreenOverlayValidator>; |
| 371 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; | 412 using SingleOverlayOnTopTest = OverlayTest<SingleOnTopOverlayValidator>; |
| 372 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; | 413 using UnderlayTest = OverlayTest<UnderlayOverlayValidator>; |
| 373 typedef OverlayTest<CALayerValidator> CALayerOverlayTest; | 414 using UnderlayCastTest = OverlayTest<UnderlayCastOverlayValidator>; |
| 415 using CALayerOverlayTest = OverlayTest<CALayerValidator>; |
| 374 | 416 |
| 375 TEST(OverlayTest, NoOverlaysByDefault) { | 417 TEST(OverlayTest, NoOverlaysByDefault) { |
| 376 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 418 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
| 377 OverlayOutputSurface output_surface(provider); | 419 OverlayOutputSurface<OverlayCandidateValidator> output_surface(provider); |
| 378 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); | 420 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); |
| 379 | 421 |
| 380 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 422 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 381 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); | 423 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); |
| 382 } | 424 } |
| 383 | 425 |
| 384 TEST(OverlayTest, OverlaysProcessorHasStrategy) { | 426 TEST(OverlayTest, OverlaysProcessorHasStrategy) { |
| 385 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 427 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
| 386 provider->BindToCurrentThread(); | 428 provider->BindToCurrentThread(); |
| 387 OverlayOutputSurface output_surface(provider); | 429 OverlayOutputSurface<OverlayCandidateValidator> output_surface(provider); |
| 388 FakeOutputSurfaceClient client; | 430 FakeOutputSurfaceClient client; |
| 389 output_surface.BindToClient(&client); | 431 output_surface.BindToClient(&client); |
| 390 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 432 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 391 | 433 |
| 392 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( | 434 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 393 new TestSharedBitmapManager()); | 435 new TestSharedBitmapManager()); |
| 394 std::unique_ptr<ResourceProvider> resource_provider = | 436 std::unique_ptr<ResourceProvider> resource_provider = |
| 395 FakeResourceProvider::Create(provider.get(), shared_bitmap_manager.get()); | 437 FakeResourceProvider::Create(provider.get(), shared_bitmap_manager.get()); |
| 396 | 438 |
| 397 std::unique_ptr<DefaultOverlayProcessor> overlay_processor( | 439 std::unique_ptr<DefaultOverlayProcessor> overlay_processor( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 410 // Add something behind it. | 452 // Add something behind it. |
| 411 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 453 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 412 pass->shared_quad_state_list.back(), pass.get()); | 454 pass->shared_quad_state_list.back(), pass.get()); |
| 413 | 455 |
| 414 // Check for potential candidates. | 456 // Check for potential candidates. |
| 415 OverlayCandidateList candidate_list; | 457 OverlayCandidateList candidate_list; |
| 416 RenderPassFilterList render_pass_filters; | 458 RenderPassFilterList render_pass_filters; |
| 417 RenderPassFilterList render_pass_background_filters; | 459 RenderPassFilterList render_pass_background_filters; |
| 418 overlay_processor_->ProcessForOverlays( | 460 overlay_processor_->ProcessForOverlays( |
| 419 resource_provider_.get(), pass.get(), render_pass_filters, | 461 resource_provider_.get(), pass.get(), render_pass_filters, |
| 420 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 462 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 463 &content_bounds_); |
| 421 ASSERT_EQ(1U, candidate_list.size()); | 464 ASSERT_EQ(1U, candidate_list.size()); |
| 422 | 465 |
| 423 RenderPass* main_pass = pass.get(); | 466 RenderPass* main_pass = pass.get(); |
| 424 // Check that all the quads are gone. | 467 // Check that all the quads are gone. |
| 425 EXPECT_EQ(0U, main_pass->quad_list.size()); | 468 EXPECT_EQ(0U, main_pass->quad_list.size()); |
| 426 // Check that we have only one overlay. | 469 // Check that we have only one overlay. |
| 427 EXPECT_EQ(1U, candidate_list.size()); | 470 EXPECT_EQ(1U, candidate_list.size()); |
| 428 // Check that the right resource id got extracted. | 471 // Check that the right resource id got extracted. |
| 429 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); | 472 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); |
| 430 } | 473 } |
| 431 | 474 |
| 432 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { | 475 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { |
| 433 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 476 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 434 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( | 477 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( |
| 435 resource_provider_.get(), pass->shared_quad_state_list.back(), | 478 resource_provider_.get(), pass->shared_quad_state_list.back(), |
| 436 pass.get()); | 479 pass.get()); |
| 437 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); | 480 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); |
| 438 | 481 |
| 439 // Check for potential candidates. | 482 // Check for potential candidates. |
| 440 OverlayCandidateList candidate_list; | 483 OverlayCandidateList candidate_list; |
| 441 RenderPassFilterList render_pass_filters; | 484 RenderPassFilterList render_pass_filters; |
| 442 RenderPassFilterList render_pass_background_filters; | 485 RenderPassFilterList render_pass_background_filters; |
| 443 overlay_processor_->ProcessForOverlays( | 486 overlay_processor_->ProcessForOverlays( |
| 444 resource_provider_.get(), pass.get(), render_pass_filters, | 487 resource_provider_.get(), pass.get(), render_pass_filters, |
| 445 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 488 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 489 &content_bounds_); |
| 446 ASSERT_EQ(0U, candidate_list.size()); | 490 ASSERT_EQ(0U, candidate_list.size()); |
| 447 | 491 |
| 448 RenderPass* main_pass = pass.get(); | 492 RenderPass* main_pass = pass.get(); |
| 449 // Check that the quad is not gone. | 493 // Check that the quad is not gone. |
| 450 EXPECT_EQ(1U, main_pass->quad_list.size()); | 494 EXPECT_EQ(1U, main_pass->quad_list.size()); |
| 451 } | 495 } |
| 452 | 496 |
| 453 TEST_F(FullscreenOverlayTest, OnTopFail) { | 497 TEST_F(FullscreenOverlayTest, OnTopFail) { |
| 454 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 498 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 455 | 499 |
| 456 // Add something in front of it. | 500 // Add something in front of it. |
| 457 CreateOpaqueQuadAt(resource_provider_.get(), | 501 CreateOpaqueQuadAt(resource_provider_.get(), |
| 458 pass->shared_quad_state_list.back(), pass.get(), | 502 pass->shared_quad_state_list.back(), pass.get(), |
| 459 kOverlayTopLeftRect); | 503 kOverlayTopLeftRect); |
| 460 | 504 |
| 461 CreateFullscreenCandidateQuad(resource_provider_.get(), | 505 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 462 pass->shared_quad_state_list.back(), | 506 pass->shared_quad_state_list.back(), |
| 463 pass.get()); | 507 pass.get()); |
| 464 | 508 |
| 465 // Check for potential candidates. | 509 // Check for potential candidates. |
| 466 OverlayCandidateList candidate_list; | 510 OverlayCandidateList candidate_list; |
| 467 RenderPassFilterList render_pass_filters; | 511 RenderPassFilterList render_pass_filters; |
| 468 RenderPassFilterList render_pass_background_filters; | 512 RenderPassFilterList render_pass_background_filters; |
| 469 overlay_processor_->ProcessForOverlays( | 513 overlay_processor_->ProcessForOverlays( |
| 470 resource_provider_.get(), pass.get(), render_pass_filters, | 514 resource_provider_.get(), pass.get(), render_pass_filters, |
| 471 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 515 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 516 &content_bounds_); |
| 472 ASSERT_EQ(0U, candidate_list.size()); | 517 ASSERT_EQ(0U, candidate_list.size()); |
| 473 | 518 |
| 474 RenderPass* main_pass = pass.get(); | 519 RenderPass* main_pass = pass.get(); |
| 475 // Check that the 2 quads are not gone. | 520 // Check that the 2 quads are not gone. |
| 476 EXPECT_EQ(2U, main_pass->quad_list.size()); | 521 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 477 } | 522 } |
| 478 | 523 |
| 479 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { | 524 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { |
| 480 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 525 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 481 gfx::Rect inset_rect = pass->output_rect; | 526 gfx::Rect inset_rect = pass->output_rect; |
| 482 inset_rect.Inset(0, 1, 0, 1); | 527 inset_rect.Inset(0, 1, 0, 1); |
| 483 CreateCandidateQuadAt(resource_provider_.get(), | 528 CreateCandidateQuadAt(resource_provider_.get(), |
| 484 pass->shared_quad_state_list.back(), pass.get(), | 529 pass->shared_quad_state_list.back(), pass.get(), |
| 485 inset_rect); | 530 inset_rect); |
| 486 | 531 |
| 487 // Check for potential candidates. | 532 // Check for potential candidates. |
| 488 OverlayCandidateList candidate_list; | 533 OverlayCandidateList candidate_list; |
| 489 RenderPassFilterList render_pass_filters; | 534 RenderPassFilterList render_pass_filters; |
| 490 RenderPassFilterList render_pass_background_filters; | 535 RenderPassFilterList render_pass_background_filters; |
| 491 overlay_processor_->ProcessForOverlays( | 536 overlay_processor_->ProcessForOverlays( |
| 492 resource_provider_.get(), pass.get(), render_pass_filters, | 537 resource_provider_.get(), pass.get(), render_pass_filters, |
| 493 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 538 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 539 &content_bounds_); |
| 494 ASSERT_EQ(0U, candidate_list.size()); | 540 ASSERT_EQ(0U, candidate_list.size()); |
| 495 | 541 |
| 496 RenderPass* main_pass = pass.get(); | 542 RenderPass* main_pass = pass.get(); |
| 497 // Check that the quad is not gone. | 543 // Check that the quad is not gone. |
| 498 EXPECT_EQ(1U, main_pass->quad_list.size()); | 544 EXPECT_EQ(1U, main_pass->quad_list.size()); |
| 499 } | 545 } |
| 500 | 546 |
| 501 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { | 547 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { |
| 502 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 548 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 503 | 549 |
| 504 // Add something in front of it that is fully transparent. | 550 // Add something in front of it that is fully transparent. |
| 505 pass->shared_quad_state_list.back()->opacity = 0.0f; | 551 pass->shared_quad_state_list.back()->opacity = 0.0f; |
| 506 CreateOpaqueQuadAt(resource_provider_.get(), | 552 CreateOpaqueQuadAt(resource_provider_.get(), |
| 507 pass->shared_quad_state_list.back(), pass.get(), | 553 pass->shared_quad_state_list.back(), pass.get(), |
| 508 kOverlayTopLeftRect); | 554 kOverlayTopLeftRect); |
| 509 | 555 |
| 510 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 556 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 511 shared_state->opacity = 1.f; | 557 shared_state->opacity = 1.f; |
| 512 CreateFullscreenCandidateQuad(resource_provider_.get(), | 558 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 513 pass->shared_quad_state_list.back(), | 559 pass->shared_quad_state_list.back(), |
| 514 pass.get()); | 560 pass.get()); |
| 515 | 561 |
| 516 // Check for potential candidates. | 562 // Check for potential candidates. |
| 517 OverlayCandidateList candidate_list; | 563 OverlayCandidateList candidate_list; |
| 518 RenderPassFilterList render_pass_filters; | 564 RenderPassFilterList render_pass_filters; |
| 519 RenderPassFilterList render_pass_background_filters; | 565 RenderPassFilterList render_pass_background_filters; |
| 520 overlay_processor_->ProcessForOverlays( | 566 overlay_processor_->ProcessForOverlays( |
| 521 resource_provider_.get(), pass.get(), render_pass_filters, | 567 resource_provider_.get(), pass.get(), render_pass_filters, |
| 522 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 568 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 569 &content_bounds_); |
| 523 ASSERT_EQ(1U, candidate_list.size()); | 570 ASSERT_EQ(1U, candidate_list.size()); |
| 524 | 571 |
| 525 // Check that the fullscreen quad is gone. | 572 // Check that the fullscreen quad is gone. |
| 526 for (const DrawQuad* quad : pass->quad_list) { | 573 for (const DrawQuad* quad : pass->quad_list) { |
| 527 EXPECT_NE(pass->output_rect, quad->rect); | 574 EXPECT_NE(pass->output_rect, quad->rect); |
| 528 } | 575 } |
| 529 } | 576 } |
| 530 | 577 |
| 531 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { | 578 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { |
| 532 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 579 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 533 TextureDrawQuad* original_quad = | 580 TextureDrawQuad* original_quad = |
| 534 CreateFullscreenCandidateQuad(resource_provider_.get(), | 581 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 535 pass->shared_quad_state_list.back(), | 582 pass->shared_quad_state_list.back(), |
| 536 pass.get()); | 583 pass.get()); |
| 537 unsigned original_resource_id = original_quad->resource_id(); | 584 unsigned original_resource_id = original_quad->resource_id(); |
| 538 | 585 |
| 539 // Add something behind it. | 586 // Add something behind it. |
| 540 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 587 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 541 pass->shared_quad_state_list.back(), pass.get()); | 588 pass->shared_quad_state_list.back(), pass.get()); |
| 542 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 589 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 543 pass->shared_quad_state_list.back(), pass.get()); | 590 pass->shared_quad_state_list.back(), pass.get()); |
| 544 | 591 |
| 545 // Check for potential candidates. | 592 // Check for potential candidates. |
| 546 OverlayCandidateList candidate_list; | 593 OverlayCandidateList candidate_list; |
| 547 RenderPassFilterList render_pass_filters; | 594 RenderPassFilterList render_pass_filters; |
| 548 RenderPassFilterList render_pass_background_filters; | 595 RenderPassFilterList render_pass_background_filters; |
| 549 overlay_processor_->ProcessForOverlays( | 596 overlay_processor_->ProcessForOverlays( |
| 550 resource_provider_.get(), pass.get(), render_pass_filters, | 597 resource_provider_.get(), pass.get(), render_pass_filters, |
| 551 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 598 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 599 &content_bounds_); |
| 552 ASSERT_EQ(1U, candidate_list.size()); | 600 ASSERT_EQ(1U, candidate_list.size()); |
| 553 | 601 |
| 554 RenderPass* main_pass = pass.get(); | 602 RenderPass* main_pass = pass.get(); |
| 555 // Check that the quad is gone. | 603 // Check that the quad is gone. |
| 556 EXPECT_EQ(2U, main_pass->quad_list.size()); | 604 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 557 const QuadList& quad_list = main_pass->quad_list; | 605 const QuadList& quad_list = main_pass->quad_list; |
| 558 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 606 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 559 it != quad_list.BackToFrontEnd(); | 607 it != quad_list.BackToFrontEnd(); |
| 560 ++it) { | 608 ++it) { |
| 561 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 609 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 586 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); | 634 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); |
| 587 output_surface_plane.quad_rect_in_target_space = kOverlayRect; | 635 output_surface_plane.quad_rect_in_target_space = kOverlayRect; |
| 588 output_surface_plane.use_output_surface_for_resource = true; | 636 output_surface_plane.use_output_surface_for_resource = true; |
| 589 output_surface_plane.overlay_handled = true; | 637 output_surface_plane.overlay_handled = true; |
| 590 candidate_list.push_back(output_surface_plane); | 638 candidate_list.push_back(output_surface_plane); |
| 591 | 639 |
| 592 RenderPassFilterList render_pass_filters; | 640 RenderPassFilterList render_pass_filters; |
| 593 RenderPassFilterList render_pass_background_filters; | 641 RenderPassFilterList render_pass_background_filters; |
| 594 overlay_processor_->ProcessForOverlays( | 642 overlay_processor_->ProcessForOverlays( |
| 595 resource_provider_.get(), pass.get(), render_pass_filters, | 643 resource_provider_.get(), pass.get(), render_pass_filters, |
| 596 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 644 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 645 &content_bounds_); |
| 597 DCHECK(damage_rect_.IsEmpty()); | 646 DCHECK(damage_rect_.IsEmpty()); |
| 598 } | 647 } |
| 599 | 648 |
| 600 TEST_F(SingleOverlayOnTopTest, NoCandidates) { | 649 TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
| 601 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 650 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 602 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 651 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 603 pass->shared_quad_state_list.back(), pass.get()); | 652 pass->shared_quad_state_list.back(), pass.get()); |
| 604 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 653 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 605 pass->shared_quad_state_list.back(), pass.get()); | 654 pass->shared_quad_state_list.back(), pass.get()); |
| 606 | 655 |
| 607 RenderPassList pass_list; | 656 RenderPassList pass_list; |
| 608 pass_list.push_back(std::move(pass)); | 657 pass_list.push_back(std::move(pass)); |
| 609 | 658 |
| 610 RenderPassList original_pass_list; | 659 RenderPassList original_pass_list; |
| 611 RenderPass::CopyAll(pass_list, &original_pass_list); | 660 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 612 | 661 |
| 613 OverlayCandidateList candidate_list; | 662 OverlayCandidateList candidate_list; |
| 614 RenderPassFilterList render_pass_filters; | 663 RenderPassFilterList render_pass_filters; |
| 615 RenderPassFilterList render_pass_background_filters; | 664 RenderPassFilterList render_pass_background_filters; |
| 616 overlay_processor_->ProcessForOverlays( | 665 overlay_processor_->ProcessForOverlays( |
| 617 resource_provider_.get(), pass_list.back().get(), render_pass_filters, | 666 resource_provider_.get(), pass_list.back().get(), render_pass_filters, |
| 618 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 667 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 668 &content_bounds_); |
| 619 EXPECT_EQ(0U, candidate_list.size()); | 669 EXPECT_EQ(0U, candidate_list.size()); |
| 620 // There should be nothing new here. | 670 // There should be nothing new here. |
| 621 CompareRenderPassLists(pass_list, original_pass_list); | 671 CompareRenderPassLists(pass_list, original_pass_list); |
| 622 } | 672 } |
| 623 | 673 |
| 624 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | 674 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
| 625 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 675 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 626 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 676 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 627 pass->shared_quad_state_list.back(), pass.get()); | 677 pass->shared_quad_state_list.back(), pass.get()); |
| 628 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 678 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 629 pass->shared_quad_state_list.back(), pass.get()); | 679 pass->shared_quad_state_list.back(), pass.get()); |
| 630 | 680 |
| 631 CreateFullscreenCandidateQuad(resource_provider_.get(), | 681 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 632 pass->shared_quad_state_list.back(), | 682 pass->shared_quad_state_list.back(), |
| 633 pass.get()); | 683 pass.get()); |
| 634 | 684 |
| 635 RenderPassList pass_list; | 685 RenderPassList pass_list; |
| 636 pass_list.push_back(std::move(pass)); | 686 pass_list.push_back(std::move(pass)); |
| 637 | 687 |
| 638 RenderPassList original_pass_list; | 688 RenderPassList original_pass_list; |
| 639 RenderPass::CopyAll(pass_list, &original_pass_list); | 689 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 640 | 690 |
| 641 OverlayCandidateList candidate_list; | 691 OverlayCandidateList candidate_list; |
| 642 RenderPassFilterList render_pass_filters; | 692 RenderPassFilterList render_pass_filters; |
| 643 RenderPassFilterList render_pass_background_filters; | 693 RenderPassFilterList render_pass_background_filters; |
| 644 overlay_processor_->ProcessForOverlays( | 694 overlay_processor_->ProcessForOverlays( |
| 645 resource_provider_.get(), pass_list.back().get(), render_pass_filters, | 695 resource_provider_.get(), pass_list.back().get(), render_pass_filters, |
| 646 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 696 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 697 &content_bounds_); |
| 647 EXPECT_EQ(0U, candidate_list.size()); | 698 EXPECT_EQ(0U, candidate_list.size()); |
| 648 // There should be nothing new here. | 699 // There should be nothing new here. |
| 649 CompareRenderPassLists(pass_list, original_pass_list); | 700 CompareRenderPassLists(pass_list, original_pass_list); |
| 650 } | 701 } |
| 651 | 702 |
| 652 // Test with multiple render passes. | 703 // Test with multiple render passes. |
| 653 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 704 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
| 654 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 705 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 655 CreateFullscreenCandidateQuad(resource_provider_.get(), | 706 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 656 pass->shared_quad_state_list.back(), | 707 pass->shared_quad_state_list.back(), |
| 657 pass.get()); | 708 pass.get()); |
| 658 | 709 |
| 659 // Add something behind it. | 710 // Add something behind it. |
| 660 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 711 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 661 pass->shared_quad_state_list.back(), pass.get()); | 712 pass->shared_quad_state_list.back(), pass.get()); |
| 662 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 713 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 663 pass->shared_quad_state_list.back(), pass.get()); | 714 pass->shared_quad_state_list.back(), pass.get()); |
| 664 | 715 |
| 665 // Check for potential candidates. | 716 // Check for potential candidates. |
| 666 OverlayCandidateList candidate_list; | 717 OverlayCandidateList candidate_list; |
| 667 RenderPassFilterList render_pass_filters; | 718 RenderPassFilterList render_pass_filters; |
| 668 RenderPassFilterList render_pass_background_filters; | 719 RenderPassFilterList render_pass_background_filters; |
| 669 overlay_processor_->ProcessForOverlays( | 720 overlay_processor_->ProcessForOverlays( |
| 670 resource_provider_.get(), pass.get(), render_pass_filters, | 721 resource_provider_.get(), pass.get(), render_pass_filters, |
| 671 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 722 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 723 &content_bounds_); |
| 672 EXPECT_EQ(1U, candidate_list.size()); | 724 EXPECT_EQ(1U, candidate_list.size()); |
| 673 } | 725 } |
| 674 | 726 |
| 675 TEST_F(SingleOverlayOnTopTest, RejectBlending) { | 727 TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
| 676 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 728 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 677 TextureDrawQuad* quad = | 729 TextureDrawQuad* quad = |
| 678 CreateFullscreenCandidateQuad(resource_provider_.get(), | 730 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 679 pass->shared_quad_state_list.back(), | 731 pass->shared_quad_state_list.back(), |
| 680 pass.get()); | 732 pass.get()); |
| 681 quad->needs_blending = true; | 733 quad->needs_blending = true; |
| 682 | 734 |
| 683 OverlayCandidateList candidate_list; | 735 OverlayCandidateList candidate_list; |
| 684 RenderPassFilterList render_pass_filters; | 736 RenderPassFilterList render_pass_filters; |
| 685 RenderPassFilterList render_pass_background_filters; | 737 RenderPassFilterList render_pass_background_filters; |
| 686 overlay_processor_->ProcessForOverlays( | 738 overlay_processor_->ProcessForOverlays( |
| 687 resource_provider_.get(), pass.get(), render_pass_filters, | 739 resource_provider_.get(), pass.get(), render_pass_filters, |
| 688 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 740 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 741 &content_bounds_); |
| 689 EXPECT_EQ(0U, candidate_list.size()); | 742 EXPECT_EQ(0U, candidate_list.size()); |
| 690 } | 743 } |
| 691 | 744 |
| 692 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { | 745 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
| 693 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 746 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 694 TextureDrawQuad* quad = | 747 TextureDrawQuad* quad = |
| 695 CreateFullscreenCandidateQuad(resource_provider_.get(), | 748 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 696 pass->shared_quad_state_list.back(), | 749 pass->shared_quad_state_list.back(), |
| 697 pass.get()); | 750 pass.get()); |
| 698 quad->background_color = SK_ColorBLACK; | 751 quad->background_color = SK_ColorBLACK; |
| 699 | 752 |
| 700 OverlayCandidateList candidate_list; | 753 OverlayCandidateList candidate_list; |
| 701 RenderPassFilterList render_pass_filters; | 754 RenderPassFilterList render_pass_filters; |
| 702 RenderPassFilterList render_pass_background_filters; | 755 RenderPassFilterList render_pass_background_filters; |
| 703 overlay_processor_->ProcessForOverlays( | 756 overlay_processor_->ProcessForOverlays( |
| 704 resource_provider_.get(), pass.get(), render_pass_filters, | 757 resource_provider_.get(), pass.get(), render_pass_filters, |
| 705 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 758 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 759 &content_bounds_); |
| 706 EXPECT_EQ(0U, candidate_list.size()); | 760 EXPECT_EQ(0U, candidate_list.size()); |
| 707 } | 761 } |
| 708 | 762 |
| 709 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { | 763 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
| 710 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 764 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 711 CreateFullscreenCandidateQuad(resource_provider_.get(), | 765 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 712 pass->shared_quad_state_list.back(), | 766 pass->shared_quad_state_list.back(), |
| 713 pass.get()); | 767 pass.get()); |
| 714 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; | 768 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; |
| 715 | 769 |
| 716 OverlayCandidateList candidate_list; | 770 OverlayCandidateList candidate_list; |
| 717 RenderPassFilterList render_pass_filters; | 771 RenderPassFilterList render_pass_filters; |
| 718 RenderPassFilterList render_pass_background_filters; | 772 RenderPassFilterList render_pass_background_filters; |
| 719 overlay_processor_->ProcessForOverlays( | 773 overlay_processor_->ProcessForOverlays( |
| 720 resource_provider_.get(), pass.get(), render_pass_filters, | 774 resource_provider_.get(), pass.get(), render_pass_filters, |
| 721 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 775 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 776 &content_bounds_); |
| 722 EXPECT_EQ(0U, candidate_list.size()); | 777 EXPECT_EQ(0U, candidate_list.size()); |
| 723 } | 778 } |
| 724 | 779 |
| 725 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { | 780 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
| 726 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 781 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 727 CreateFullscreenCandidateQuad(resource_provider_.get(), | 782 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 728 pass->shared_quad_state_list.back(), | 783 pass->shared_quad_state_list.back(), |
| 729 pass.get()); | 784 pass.get()); |
| 730 pass->shared_quad_state_list.back()->opacity = 0.5f; | 785 pass->shared_quad_state_list.back()->opacity = 0.5f; |
| 731 | 786 |
| 732 OverlayCandidateList candidate_list; | 787 OverlayCandidateList candidate_list; |
| 733 RenderPassFilterList render_pass_filters; | 788 RenderPassFilterList render_pass_filters; |
| 734 RenderPassFilterList render_pass_background_filters; | 789 RenderPassFilterList render_pass_background_filters; |
| 735 overlay_processor_->ProcessForOverlays( | 790 overlay_processor_->ProcessForOverlays( |
| 736 resource_provider_.get(), pass.get(), render_pass_filters, | 791 resource_provider_.get(), pass.get(), render_pass_filters, |
| 737 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 792 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 793 &content_bounds_); |
| 738 EXPECT_EQ(0U, candidate_list.size()); | 794 EXPECT_EQ(0U, candidate_list.size()); |
| 739 } | 795 } |
| 740 | 796 |
| 741 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { | 797 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { |
| 742 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 798 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 743 CreateFullscreenCandidateQuad(resource_provider_.get(), | 799 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 744 pass->shared_quad_state_list.back(), | 800 pass->shared_quad_state_list.back(), |
| 745 pass.get()); | 801 pass.get()); |
| 746 pass->shared_quad_state_list.back() | 802 pass->shared_quad_state_list.back() |
| 747 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 803 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 748 | 804 |
| 749 OverlayCandidateList candidate_list; | 805 OverlayCandidateList candidate_list; |
| 750 RenderPassFilterList render_pass_filters; | 806 RenderPassFilterList render_pass_filters; |
| 751 RenderPassFilterList render_pass_background_filters; | 807 RenderPassFilterList render_pass_background_filters; |
| 752 overlay_processor_->ProcessForOverlays( | 808 overlay_processor_->ProcessForOverlays( |
| 753 resource_provider_.get(), pass.get(), render_pass_filters, | 809 resource_provider_.get(), pass.get(), render_pass_filters, |
| 754 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 810 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 811 &content_bounds_); |
| 755 EXPECT_EQ(0U, candidate_list.size()); | 812 EXPECT_EQ(0U, candidate_list.size()); |
| 756 } | 813 } |
| 757 | 814 |
| 758 TEST_F(SingleOverlayOnTopTest, AllowClipped) { | 815 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 759 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 816 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 760 CreateFullscreenCandidateQuad(resource_provider_.get(), | 817 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 761 pass->shared_quad_state_list.back(), | 818 pass->shared_quad_state_list.back(), |
| 762 pass.get()); | 819 pass.get()); |
| 763 pass->shared_quad_state_list.back()->is_clipped = true; | 820 pass->shared_quad_state_list.back()->is_clipped = true; |
| 764 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 821 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 765 | 822 |
| 766 OverlayCandidateList candidate_list; | 823 OverlayCandidateList candidate_list; |
| 767 RenderPassFilterList render_pass_filters; | 824 RenderPassFilterList render_pass_filters; |
| 768 RenderPassFilterList render_pass_background_filters; | 825 RenderPassFilterList render_pass_background_filters; |
| 769 overlay_processor_->ProcessForOverlays( | 826 overlay_processor_->ProcessForOverlays( |
| 770 resource_provider_.get(), pass.get(), render_pass_filters, | 827 resource_provider_.get(), pass.get(), render_pass_filters, |
| 771 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 828 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 829 &content_bounds_); |
| 772 EXPECT_EQ(1U, candidate_list.size()); | 830 EXPECT_EQ(1U, candidate_list.size()); |
| 773 } | 831 } |
| 774 | 832 |
| 775 TEST_F(UnderlayTest, AllowVerticalFlip) { | 833 TEST_F(UnderlayTest, AllowVerticalFlip) { |
| 776 gfx::Rect rect = kOverlayRect; | 834 gfx::Rect rect = kOverlayRect; |
| 777 rect.set_width(rect.width() / 2); | 835 rect.set_width(rect.width() / 2); |
| 778 rect.Offset(0, -rect.height()); | 836 rect.Offset(0, -rect.height()); |
| 779 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 837 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 780 CreateCandidateQuadAt(resource_provider_.get(), | 838 CreateCandidateQuadAt(resource_provider_.get(), |
| 781 pass->shared_quad_state_list.back(), pass.get(), rect); | 839 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 782 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 840 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 783 -1.0f); | 841 -1.0f); |
| 784 OverlayCandidateList candidate_list; | 842 OverlayCandidateList candidate_list; |
| 785 RenderPassFilterList render_pass_filters; | 843 RenderPassFilterList render_pass_filters; |
| 786 RenderPassFilterList render_pass_background_filters; | 844 RenderPassFilterList render_pass_background_filters; |
| 787 overlay_processor_->ProcessForOverlays( | 845 overlay_processor_->ProcessForOverlays( |
| 788 resource_provider_.get(), pass.get(), render_pass_filters, | 846 resource_provider_.get(), pass.get(), render_pass_filters, |
| 789 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 847 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 848 &content_bounds_); |
| 790 ASSERT_EQ(1U, candidate_list.size()); | 849 ASSERT_EQ(1U, candidate_list.size()); |
| 791 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 850 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
| 792 candidate_list.back().transform); | 851 candidate_list.back().transform); |
| 793 } | 852 } |
| 794 | 853 |
| 795 TEST_F(UnderlayTest, AllowHorizontalFlip) { | 854 TEST_F(UnderlayTest, AllowHorizontalFlip) { |
| 796 gfx::Rect rect = kOverlayRect; | 855 gfx::Rect rect = kOverlayRect; |
| 797 rect.set_height(rect.height() / 2); | 856 rect.set_height(rect.height() / 2); |
| 798 rect.Offset(-rect.width(), 0); | 857 rect.Offset(-rect.width(), 0); |
| 799 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 858 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 800 CreateCandidateQuadAt(resource_provider_.get(), | 859 CreateCandidateQuadAt(resource_provider_.get(), |
| 801 pass->shared_quad_state_list.back(), pass.get(), rect); | 860 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 802 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 861 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
| 803 2.0f); | 862 2.0f); |
| 804 | 863 |
| 805 OverlayCandidateList candidate_list; | 864 OverlayCandidateList candidate_list; |
| 806 RenderPassFilterList render_pass_filters; | 865 RenderPassFilterList render_pass_filters; |
| 807 RenderPassFilterList render_pass_background_filters; | 866 RenderPassFilterList render_pass_background_filters; |
| 808 overlay_processor_->ProcessForOverlays( | 867 overlay_processor_->ProcessForOverlays( |
| 809 resource_provider_.get(), pass.get(), render_pass_filters, | 868 resource_provider_.get(), pass.get(), render_pass_filters, |
| 810 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 869 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 870 &content_bounds_); |
| 811 ASSERT_EQ(1U, candidate_list.size()); | 871 ASSERT_EQ(1U, candidate_list.size()); |
| 812 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 872 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
| 813 candidate_list.back().transform); | 873 candidate_list.back().transform); |
| 814 } | 874 } |
| 815 | 875 |
| 816 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 876 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
| 817 gfx::Rect rect = kOverlayRect; | 877 gfx::Rect rect = kOverlayRect; |
| 818 rect.set_width(rect.width() / 2); | 878 rect.set_width(rect.width() / 2); |
| 819 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 879 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 820 CreateCandidateQuadAt(resource_provider_.get(), | 880 CreateCandidateQuadAt(resource_provider_.get(), |
| 821 pass->shared_quad_state_list.back(), pass.get(), rect); | 881 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 822 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 882 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 823 1.0f); | 883 1.0f); |
| 824 OverlayCandidateList candidate_list; | 884 OverlayCandidateList candidate_list; |
| 825 RenderPassFilterList render_pass_filters; | 885 RenderPassFilterList render_pass_filters; |
| 826 RenderPassFilterList render_pass_background_filters; | 886 RenderPassFilterList render_pass_background_filters; |
| 827 overlay_processor_->ProcessForOverlays( | 887 overlay_processor_->ProcessForOverlays( |
| 828 resource_provider_.get(), pass.get(), render_pass_filters, | 888 resource_provider_.get(), pass.get(), render_pass_filters, |
| 829 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 889 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 890 &content_bounds_); |
| 830 EXPECT_EQ(1U, candidate_list.size()); | 891 EXPECT_EQ(1U, candidate_list.size()); |
| 831 } | 892 } |
| 832 | 893 |
| 833 TEST_F(SingleOverlayOnTopTest, RejectTransform) { | 894 TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
| 834 gfx::Rect rect = kOverlayRect; | 895 gfx::Rect rect = kOverlayRect; |
| 835 rect.Offset(0, -rect.height()); | 896 rect.Offset(0, -rect.height()); |
| 836 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 897 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 837 CreateCandidateQuadAt(resource_provider_.get(), | 898 CreateCandidateQuadAt(resource_provider_.get(), |
| 838 pass->shared_quad_state_list.back(), pass.get(), rect); | 899 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 839 pass->shared_quad_state_list.back() | 900 pass->shared_quad_state_list.back() |
| 840 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 901 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 841 | 902 |
| 842 OverlayCandidateList candidate_list; | 903 OverlayCandidateList candidate_list; |
| 843 RenderPassFilterList render_pass_filters; | 904 RenderPassFilterList render_pass_filters; |
| 844 RenderPassFilterList render_pass_background_filters; | 905 RenderPassFilterList render_pass_background_filters; |
| 845 overlay_processor_->ProcessForOverlays( | 906 overlay_processor_->ProcessForOverlays( |
| 846 resource_provider_.get(), pass.get(), render_pass_filters, | 907 resource_provider_.get(), pass.get(), render_pass_filters, |
| 847 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 908 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 909 &content_bounds_); |
| 848 ASSERT_EQ(0U, candidate_list.size()); | 910 ASSERT_EQ(0U, candidate_list.size()); |
| 849 } | 911 } |
| 850 | 912 |
| 851 TEST_F(UnderlayTest, Allow90DegreeRotation) { | 913 TEST_F(UnderlayTest, Allow90DegreeRotation) { |
| 852 gfx::Rect rect = kOverlayRect; | 914 gfx::Rect rect = kOverlayRect; |
| 853 rect.Offset(0, -rect.height()); | 915 rect.Offset(0, -rect.height()); |
| 854 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 916 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 855 CreateCandidateQuadAt(resource_provider_.get(), | 917 CreateCandidateQuadAt(resource_provider_.get(), |
| 856 pass->shared_quad_state_list.back(), pass.get(), rect); | 918 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 857 pass->shared_quad_state_list.back() | 919 pass->shared_quad_state_list.back() |
| 858 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 920 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 859 | 921 |
| 860 OverlayCandidateList candidate_list; | 922 OverlayCandidateList candidate_list; |
| 861 RenderPassFilterList render_pass_filters; | 923 RenderPassFilterList render_pass_filters; |
| 862 RenderPassFilterList render_pass_background_filters; | 924 RenderPassFilterList render_pass_background_filters; |
| 863 overlay_processor_->ProcessForOverlays( | 925 overlay_processor_->ProcessForOverlays( |
| 864 resource_provider_.get(), pass.get(), render_pass_filters, | 926 resource_provider_.get(), pass.get(), render_pass_filters, |
| 865 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 927 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 928 &content_bounds_); |
| 866 ASSERT_EQ(1U, candidate_list.size()); | 929 ASSERT_EQ(1U, candidate_list.size()); |
| 867 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 930 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
| 868 } | 931 } |
| 869 | 932 |
| 870 TEST_F(UnderlayTest, Allow180DegreeRotation) { | 933 TEST_F(UnderlayTest, Allow180DegreeRotation) { |
| 871 gfx::Rect rect = kOverlayRect; | 934 gfx::Rect rect = kOverlayRect; |
| 872 rect.Offset(-rect.width(), -rect.height()); | 935 rect.Offset(-rect.width(), -rect.height()); |
| 873 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 936 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 874 CreateCandidateQuadAt(resource_provider_.get(), | 937 CreateCandidateQuadAt(resource_provider_.get(), |
| 875 pass->shared_quad_state_list.back(), pass.get(), rect); | 938 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 876 pass->shared_quad_state_list.back() | 939 pass->shared_quad_state_list.back() |
| 877 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 940 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
| 878 | 941 |
| 879 OverlayCandidateList candidate_list; | 942 OverlayCandidateList candidate_list; |
| 880 RenderPassFilterList render_pass_filters; | 943 RenderPassFilterList render_pass_filters; |
| 881 RenderPassFilterList render_pass_background_filters; | 944 RenderPassFilterList render_pass_background_filters; |
| 882 overlay_processor_->ProcessForOverlays( | 945 overlay_processor_->ProcessForOverlays( |
| 883 resource_provider_.get(), pass.get(), render_pass_filters, | 946 resource_provider_.get(), pass.get(), render_pass_filters, |
| 884 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 947 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 948 &content_bounds_); |
| 885 ASSERT_EQ(1U, candidate_list.size()); | 949 ASSERT_EQ(1U, candidate_list.size()); |
| 886 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 950 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
| 887 } | 951 } |
| 888 | 952 |
| 889 TEST_F(UnderlayTest, Allow270DegreeRotation) { | 953 TEST_F(UnderlayTest, Allow270DegreeRotation) { |
| 890 gfx::Rect rect = kOverlayRect; | 954 gfx::Rect rect = kOverlayRect; |
| 891 rect.Offset(-rect.width(), 0); | 955 rect.Offset(-rect.width(), 0); |
| 892 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 956 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 893 CreateCandidateQuadAt(resource_provider_.get(), | 957 CreateCandidateQuadAt(resource_provider_.get(), |
| 894 pass->shared_quad_state_list.back(), pass.get(), rect); | 958 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 895 pass->shared_quad_state_list.back() | 959 pass->shared_quad_state_list.back() |
| 896 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 960 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
| 897 | 961 |
| 898 OverlayCandidateList candidate_list; | 962 OverlayCandidateList candidate_list; |
| 899 RenderPassFilterList render_pass_filters; | 963 RenderPassFilterList render_pass_filters; |
| 900 RenderPassFilterList render_pass_background_filters; | 964 RenderPassFilterList render_pass_background_filters; |
| 901 overlay_processor_->ProcessForOverlays( | 965 overlay_processor_->ProcessForOverlays( |
| 902 resource_provider_.get(), pass.get(), render_pass_filters, | 966 resource_provider_.get(), pass.get(), render_pass_filters, |
| 903 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 967 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 968 &content_bounds_); |
| 904 ASSERT_EQ(1U, candidate_list.size()); | 969 ASSERT_EQ(1U, candidate_list.size()); |
| 905 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 970 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 906 } | 971 } |
| 907 | 972 |
| 908 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 973 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 974 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 975 gfx::RectF(kOverlayBottomRightRect)); |
| 976 |
| 909 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 977 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 910 CreateOpaqueQuadAt(resource_provider_.get(), | 978 CreateOpaqueQuadAt(resource_provider_.get(), |
| 911 pass->shared_quad_state_list.back(), pass.get(), | 979 pass->shared_quad_state_list.back(), pass.get(), |
| 912 kOverlayTopLeftRect); | 980 kOverlayTopLeftRect); |
| 913 CreateCandidateQuadAt(resource_provider_.get(), | 981 CreateCandidateQuadAt(resource_provider_.get(), |
| 914 pass->shared_quad_state_list.back(), | 982 pass->shared_quad_state_list.back(), |
| 915 pass.get(), | 983 pass.get(), |
| 916 kOverlayBottomRightRect); | 984 kOverlayBottomRightRect); |
| 917 | 985 |
| 918 OverlayCandidateList candidate_list; | 986 OverlayCandidateList candidate_list; |
| 919 RenderPassFilterList render_pass_filters; | 987 RenderPassFilterList render_pass_filters; |
| 920 RenderPassFilterList render_pass_background_filters; | 988 RenderPassFilterList render_pass_background_filters; |
| 921 overlay_processor_->ProcessForOverlays( | 989 overlay_processor_->ProcessForOverlays( |
| 922 resource_provider_.get(), pass.get(), render_pass_filters, | 990 resource_provider_.get(), pass.get(), render_pass_filters, |
| 923 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 991 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 992 &content_bounds_); |
| 924 EXPECT_EQ(1U, candidate_list.size()); | 993 EXPECT_EQ(1U, candidate_list.size()); |
| 925 } | 994 } |
| 926 | 995 |
| 927 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 996 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 997 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 998 gfx::RectF(kOverlayBottomRightRect)); |
| 999 |
| 928 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1000 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 929 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1001 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 930 shared_state->opacity = 0.f; | 1002 shared_state->opacity = 0.f; |
| 931 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1003 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 932 kOverlayBottomRightRect); | 1004 kOverlayBottomRightRect); |
| 933 shared_state = pass->CreateAndAppendSharedQuadState(); | 1005 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 934 shared_state->opacity = 1.f; | 1006 shared_state->opacity = 1.f; |
| 935 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1007 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 936 kOverlayBottomRightRect); | 1008 kOverlayBottomRightRect); |
| 937 | 1009 |
| 938 OverlayCandidateList candidate_list; | 1010 OverlayCandidateList candidate_list; |
| 939 RenderPassFilterList render_pass_filters; | 1011 RenderPassFilterList render_pass_filters; |
| 940 RenderPassFilterList render_pass_background_filters; | 1012 RenderPassFilterList render_pass_background_filters; |
| 941 overlay_processor_->ProcessForOverlays( | 1013 overlay_processor_->ProcessForOverlays( |
| 942 resource_provider_.get(), pass.get(), render_pass_filters, | 1014 resource_provider_.get(), pass.get(), render_pass_filters, |
| 943 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1015 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1016 &content_bounds_); |
| 944 EXPECT_EQ(1U, candidate_list.size()); | 1017 EXPECT_EQ(1U, candidate_list.size()); |
| 945 } | 1018 } |
| 946 | 1019 |
| 947 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1020 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 1021 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1022 gfx::RectF(kOverlayBottomRightRect)); |
| 1023 |
| 948 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1024 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 949 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1025 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 950 SK_ColorTRANSPARENT, pass.get(), | 1026 SK_ColorTRANSPARENT, pass.get(), |
| 951 kOverlayBottomRightRect); | 1027 kOverlayBottomRightRect); |
| 952 CreateCandidateQuadAt(resource_provider_.get(), | 1028 CreateCandidateQuadAt(resource_provider_.get(), |
| 953 pass->shared_quad_state_list.back(), pass.get(), | 1029 pass->shared_quad_state_list.back(), pass.get(), |
| 954 kOverlayBottomRightRect); | 1030 kOverlayBottomRightRect); |
| 955 | 1031 |
| 956 OverlayCandidateList candidate_list; | 1032 OverlayCandidateList candidate_list; |
| 957 RenderPassFilterList render_pass_filters; | 1033 RenderPassFilterList render_pass_filters; |
| 958 RenderPassFilterList render_pass_background_filters; | 1034 RenderPassFilterList render_pass_background_filters; |
| 959 overlay_processor_->ProcessForOverlays( | 1035 overlay_processor_->ProcessForOverlays( |
| 960 resource_provider_.get(), pass.get(), render_pass_filters, | 1036 resource_provider_.get(), pass.get(), render_pass_filters, |
| 961 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1037 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1038 &content_bounds_); |
| 962 EXPECT_EQ(1U, candidate_list.size()); | 1039 EXPECT_EQ(1U, candidate_list.size()); |
| 963 } | 1040 } |
| 964 | 1041 |
| 965 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 1042 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 966 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1043 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 967 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1044 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 968 shared_state->opacity = 0.5f; | 1045 shared_state->opacity = 0.5f; |
| 969 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1046 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 970 kOverlayBottomRightRect); | 1047 kOverlayBottomRightRect); |
| 971 shared_state = pass->CreateAndAppendSharedQuadState(); | 1048 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 972 shared_state->opacity = 1.f; | 1049 shared_state->opacity = 1.f; |
| 973 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1050 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 974 kOverlayBottomRightRect); | 1051 kOverlayBottomRightRect); |
| 975 | 1052 |
| 976 OverlayCandidateList candidate_list; | 1053 OverlayCandidateList candidate_list; |
| 977 RenderPassFilterList render_pass_filters; | 1054 RenderPassFilterList render_pass_filters; |
| 978 RenderPassFilterList render_pass_background_filters; | 1055 RenderPassFilterList render_pass_background_filters; |
| 979 overlay_processor_->ProcessForOverlays( | 1056 overlay_processor_->ProcessForOverlays( |
| 980 resource_provider_.get(), pass.get(), render_pass_filters, | 1057 resource_provider_.get(), pass.get(), render_pass_filters, |
| 981 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1058 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1059 &content_bounds_); |
| 982 EXPECT_EQ(0U, candidate_list.size()); | 1060 EXPECT_EQ(0U, candidate_list.size()); |
| 983 } | 1061 } |
| 984 | 1062 |
| 985 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { | 1063 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
| 986 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1064 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 987 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1065 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 988 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), | 1066 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
| 989 kOverlayBottomRightRect)->opaque_rect = | 1067 kOverlayBottomRightRect)->opaque_rect = |
| 990 kOverlayBottomRightRect; | 1068 kOverlayBottomRightRect; |
| 991 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1069 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 992 kOverlayBottomRightRect); | 1070 kOverlayBottomRightRect); |
| 993 | 1071 |
| 994 OverlayCandidateList candidate_list; | 1072 OverlayCandidateList candidate_list; |
| 995 RenderPassFilterList render_pass_filters; | 1073 RenderPassFilterList render_pass_filters; |
| 996 RenderPassFilterList render_pass_background_filters; | 1074 RenderPassFilterList render_pass_background_filters; |
| 997 overlay_processor_->ProcessForOverlays( | 1075 overlay_processor_->ProcessForOverlays( |
| 998 resource_provider_.get(), pass.get(), render_pass_filters, | 1076 resource_provider_.get(), pass.get(), render_pass_filters, |
| 999 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1077 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1078 &content_bounds_); |
| 1000 EXPECT_EQ(0U, candidate_list.size()); | 1079 EXPECT_EQ(0U, candidate_list.size()); |
| 1001 } | 1080 } |
| 1002 | 1081 |
| 1003 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 1082 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
| 1004 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1083 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1005 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1084 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1006 pass->shared_quad_state_list.back(), | 1085 pass->shared_quad_state_list.back(), |
| 1007 pass.get(), kSwapTransform); | 1086 pass.get(), kSwapTransform); |
| 1008 | 1087 |
| 1009 OverlayCandidateList candidate_list; | 1088 OverlayCandidateList candidate_list; |
| 1010 RenderPassFilterList render_pass_filters; | 1089 RenderPassFilterList render_pass_filters; |
| 1011 RenderPassFilterList render_pass_background_filters; | 1090 RenderPassFilterList render_pass_background_filters; |
| 1012 overlay_processor_->ProcessForOverlays( | 1091 overlay_processor_->ProcessForOverlays( |
| 1013 resource_provider_.get(), pass.get(), render_pass_filters, | 1092 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1014 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1093 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1094 &content_bounds_); |
| 1015 EXPECT_EQ(0U, candidate_list.size()); | 1095 EXPECT_EQ(0U, candidate_list.size()); |
| 1016 } | 1096 } |
| 1017 | 1097 |
| 1018 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { | 1098 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { |
| 1019 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1099 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1020 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1100 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1021 pass->shared_quad_state_list.back(), | 1101 pass->shared_quad_state_list.back(), |
| 1022 pass.get(), kXMirrorTransform); | 1102 pass.get(), kXMirrorTransform); |
| 1023 | 1103 |
| 1024 OverlayCandidateList candidate_list; | 1104 OverlayCandidateList candidate_list; |
| 1025 RenderPassFilterList render_pass_filters; | 1105 RenderPassFilterList render_pass_filters; |
| 1026 RenderPassFilterList render_pass_background_filters; | 1106 RenderPassFilterList render_pass_background_filters; |
| 1027 overlay_processor_->ProcessForOverlays( | 1107 overlay_processor_->ProcessForOverlays( |
| 1028 resource_provider_.get(), pass.get(), render_pass_filters, | 1108 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1029 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1109 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1110 &content_bounds_); |
| 1030 EXPECT_EQ(1U, candidate_list.size()); | 1111 EXPECT_EQ(1U, candidate_list.size()); |
| 1031 } | 1112 } |
| 1032 | 1113 |
| 1033 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { | 1114 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { |
| 1034 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1115 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1035 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1116 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1036 pass->shared_quad_state_list.back(), | 1117 pass->shared_quad_state_list.back(), |
| 1037 pass.get(), kBothMirrorTransform); | 1118 pass.get(), kBothMirrorTransform); |
| 1038 | 1119 |
| 1039 OverlayCandidateList candidate_list; | 1120 OverlayCandidateList candidate_list; |
| 1040 RenderPassFilterList render_pass_filters; | 1121 RenderPassFilterList render_pass_filters; |
| 1041 RenderPassFilterList render_pass_background_filters; | 1122 RenderPassFilterList render_pass_background_filters; |
| 1042 overlay_processor_->ProcessForOverlays( | 1123 overlay_processor_->ProcessForOverlays( |
| 1043 resource_provider_.get(), pass.get(), render_pass_filters, | 1124 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1044 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1125 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1126 &content_bounds_); |
| 1045 EXPECT_EQ(1U, candidate_list.size()); | 1127 EXPECT_EQ(1U, candidate_list.size()); |
| 1046 } | 1128 } |
| 1047 | 1129 |
| 1048 TEST_F(UnderlayTest, AllowVideoNormalTransform) { | 1130 TEST_F(UnderlayTest, AllowVideoNormalTransform) { |
| 1049 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1131 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1050 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1132 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1051 pass->shared_quad_state_list.back(), | 1133 pass->shared_quad_state_list.back(), |
| 1052 pass.get(), kNormalTransform); | 1134 pass.get(), kNormalTransform); |
| 1053 | 1135 |
| 1054 OverlayCandidateList candidate_list; | 1136 OverlayCandidateList candidate_list; |
| 1055 RenderPassFilterList render_pass_filters; | 1137 RenderPassFilterList render_pass_filters; |
| 1056 RenderPassFilterList render_pass_background_filters; | 1138 RenderPassFilterList render_pass_background_filters; |
| 1057 overlay_processor_->ProcessForOverlays( | 1139 overlay_processor_->ProcessForOverlays( |
| 1058 resource_provider_.get(), pass.get(), render_pass_filters, | 1140 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1059 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1141 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1142 &content_bounds_); |
| 1060 EXPECT_EQ(1U, candidate_list.size()); | 1143 EXPECT_EQ(1U, candidate_list.size()); |
| 1061 } | 1144 } |
| 1062 | 1145 |
| 1063 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 1146 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
| 1064 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1147 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1065 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1148 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1066 pass->shared_quad_state_list.back(), | 1149 pass->shared_quad_state_list.back(), |
| 1067 pass.get(), kYMirrorTransform); | 1150 pass.get(), kYMirrorTransform); |
| 1068 | 1151 |
| 1069 OverlayCandidateList candidate_list; | 1152 OverlayCandidateList candidate_list; |
| 1070 RenderPassFilterList render_pass_filters; | 1153 RenderPassFilterList render_pass_filters; |
| 1071 RenderPassFilterList render_pass_background_filters; | 1154 RenderPassFilterList render_pass_background_filters; |
| 1072 overlay_processor_->ProcessForOverlays( | 1155 overlay_processor_->ProcessForOverlays( |
| 1073 resource_provider_.get(), pass.get(), render_pass_filters, | 1156 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1074 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1157 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1158 &content_bounds_); |
| 1075 EXPECT_EQ(1U, candidate_list.size()); | 1159 EXPECT_EQ(1U, candidate_list.size()); |
| 1076 } | 1160 } |
| 1077 | 1161 |
| 1078 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1162 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1163 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1164 gfx::RectF(kOverlayBottomRightRect)); |
| 1165 |
| 1079 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1166 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1080 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1167 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1081 pass->shared_quad_state_list.back(), pass.get()); | 1168 pass->shared_quad_state_list.back(), pass.get()); |
| 1082 CreateCandidateQuadAt(resource_provider_.get(), | 1169 CreateCandidateQuadAt(resource_provider_.get(), |
| 1083 pass->shared_quad_state_list.back(), pass.get(), | 1170 pass->shared_quad_state_list.back(), pass.get(), |
| 1084 kOverlayBottomRightRect); | 1171 kOverlayBottomRightRect); |
| 1085 | 1172 |
| 1086 OverlayCandidateList candidate_list; | 1173 OverlayCandidateList candidate_list; |
| 1087 RenderPassFilterList render_pass_filters; | 1174 RenderPassFilterList render_pass_filters; |
| 1088 RenderPassFilterList render_pass_background_filters; | 1175 RenderPassFilterList render_pass_background_filters; |
| 1089 overlay_processor_->ProcessForOverlays( | 1176 overlay_processor_->ProcessForOverlays( |
| 1090 resource_provider_.get(), pass.get(), render_pass_filters, | 1177 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1091 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1178 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1179 &content_bounds_); |
| 1092 ASSERT_EQ(1U, candidate_list.size()); | 1180 ASSERT_EQ(1U, candidate_list.size()); |
| 1093 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1181 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1094 EXPECT_EQ(2U, pass->quad_list.size()); | 1182 EXPECT_EQ(2U, pass->quad_list.size()); |
| 1095 // The overlay quad should have changed to a SOLID_COLOR quad. | 1183 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1096 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 1184 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 1097 } | 1185 } |
| 1098 | 1186 |
| 1099 TEST_F(UnderlayTest, AllowOnTop) { | 1187 TEST_F(UnderlayTest, AllowOnTop) { |
| 1100 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1188 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1101 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1189 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1102 pass->shared_quad_state_list.back(), | 1190 pass->shared_quad_state_list.back(), |
| 1103 pass.get()); | 1191 pass.get()); |
| 1104 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 1192 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 1105 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1193 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1106 pass->shared_quad_state_list.back(), pass.get()); | 1194 pass->shared_quad_state_list.back(), pass.get()); |
| 1107 | 1195 |
| 1108 OverlayCandidateList candidate_list; | 1196 OverlayCandidateList candidate_list; |
| 1109 RenderPassFilterList render_pass_filters; | 1197 RenderPassFilterList render_pass_filters; |
| 1110 RenderPassFilterList render_pass_background_filters; | 1198 RenderPassFilterList render_pass_background_filters; |
| 1111 overlay_processor_->ProcessForOverlays( | 1199 overlay_processor_->ProcessForOverlays( |
| 1112 resource_provider_.get(), pass.get(), render_pass_filters, | 1200 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1113 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1201 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1202 &content_bounds_); |
| 1114 ASSERT_EQ(1U, candidate_list.size()); | 1203 ASSERT_EQ(1U, candidate_list.size()); |
| 1115 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1204 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1116 // The overlay quad should have changed to a SOLID_COLOR quad. | 1205 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1117 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 1206 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
| 1118 } | 1207 } |
| 1119 | 1208 |
| 1120 // The first time an underlay is scheduled its damage must not be subtracted. | 1209 // The first time an underlay is scheduled its damage must not be subtracted. |
| 1121 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { | 1210 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { |
| 1122 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1211 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1123 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1212 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1124 pass->shared_quad_state_list.back(), | 1213 pass->shared_quad_state_list.back(), |
| 1125 pass.get()); | 1214 pass.get()); |
| 1126 | 1215 |
| 1127 damage_rect_ = kOverlayRect; | 1216 damage_rect_ = kOverlayRect; |
| 1128 | 1217 |
| 1129 OverlayCandidateList candidate_list; | 1218 OverlayCandidateList candidate_list; |
| 1130 RenderPassFilterList render_pass_filters; | 1219 RenderPassFilterList render_pass_filters; |
| 1131 RenderPassFilterList render_pass_background_filters; | 1220 RenderPassFilterList render_pass_background_filters; |
| 1132 overlay_processor_->ProcessForOverlays( | 1221 overlay_processor_->ProcessForOverlays( |
| 1133 resource_provider_.get(), pass.get(), render_pass_filters, | 1222 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1134 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1223 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1224 &content_bounds_); |
| 1135 | 1225 |
| 1136 EXPECT_EQ(kOverlayRect, damage_rect_); | 1226 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1137 } | 1227 } |
| 1138 | 1228 |
| 1139 // An identical underlay for two frames in a row means the damage can be | 1229 // An identical underlay for two frames in a row means the damage can be |
| 1140 // subtracted the second time. | 1230 // subtracted the second time. |
| 1141 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { | 1231 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { |
| 1142 for (int i = 0; i < 2; ++i) { | 1232 for (int i = 0; i < 2; ++i) { |
| 1143 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1233 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1144 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1234 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1145 pass->shared_quad_state_list.back(), | 1235 pass->shared_quad_state_list.back(), |
| 1146 pass.get()); | 1236 pass.get()); |
| 1147 | 1237 |
| 1148 damage_rect_ = kOverlayRect; | 1238 damage_rect_ = kOverlayRect; |
| 1149 | 1239 |
| 1150 // Add something behind it. | 1240 // Add something behind it. |
| 1151 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1241 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1152 pass->shared_quad_state_list.back(), pass.get()); | 1242 pass->shared_quad_state_list.back(), pass.get()); |
| 1153 | 1243 |
| 1154 OverlayCandidateList candidate_list; | 1244 OverlayCandidateList candidate_list; |
| 1155 RenderPassFilterList render_pass_filters; | 1245 RenderPassFilterList render_pass_filters; |
| 1156 RenderPassFilterList render_pass_background_filters; | 1246 RenderPassFilterList render_pass_background_filters; |
| 1157 overlay_processor_->ProcessForOverlays( | 1247 overlay_processor_->ProcessForOverlays( |
| 1158 resource_provider_.get(), pass.get(), render_pass_filters, | 1248 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1159 render_pass_background_filters, &candidate_list, nullptr, | 1249 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1160 &damage_rect_); | 1250 &content_bounds_); |
| 1161 } | 1251 } |
| 1162 | 1252 |
| 1163 // The second time the same overlay rect is scheduled it will be subtracted | 1253 // The second time the same overlay rect is scheduled it will be subtracted |
| 1164 // from the damage rect. | 1254 // from the damage rect. |
| 1165 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1255 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 1166 } | 1256 } |
| 1167 | 1257 |
| 1168 // Underlay damage can only be subtracted if the previous frame's underlay | 1258 // Underlay damage can only be subtracted if the previous frame's underlay |
| 1169 // was the same rect. | 1259 // was the same rect. |
| 1170 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { | 1260 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { |
| 1171 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; | 1261 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; |
| 1172 for (int i = 0; i < 2; ++i) { | 1262 for (int i = 0; i < 2; ++i) { |
| 1263 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1264 gfx::RectF(overlay_rects[i])); |
| 1265 |
| 1173 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1266 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1174 | 1267 |
| 1175 CreateCandidateQuadAt(resource_provider_.get(), | 1268 CreateCandidateQuadAt(resource_provider_.get(), |
| 1176 pass->shared_quad_state_list.back(), pass.get(), | 1269 pass->shared_quad_state_list.back(), pass.get(), |
| 1177 overlay_rects[i]); | 1270 overlay_rects[i]); |
| 1178 | 1271 |
| 1179 damage_rect_ = overlay_rects[i]; | 1272 damage_rect_ = overlay_rects[i]; |
| 1180 | 1273 |
| 1181 OverlayCandidateList candidate_list; | 1274 OverlayCandidateList candidate_list; |
| 1182 RenderPassFilterList render_pass_filters; | 1275 RenderPassFilterList render_pass_filters; |
| 1183 RenderPassFilterList render_pass_background_filters; | 1276 RenderPassFilterList render_pass_background_filters; |
| 1184 overlay_processor_->ProcessForOverlays( | 1277 overlay_processor_->ProcessForOverlays( |
| 1185 resource_provider_.get(), pass.get(), render_pass_filters, | 1278 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1186 render_pass_background_filters, &candidate_list, nullptr, | 1279 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1187 &damage_rect_); | 1280 &content_bounds_); |
| 1188 | 1281 |
| 1189 EXPECT_EQ(overlay_rects[i], damage_rect_); | 1282 EXPECT_EQ(overlay_rects[i], damage_rect_); |
| 1190 } | 1283 } |
| 1191 } | 1284 } |
| 1192 | 1285 |
| 1193 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { | 1286 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { |
| 1194 for (int i = 0; i < 2; ++i) { | 1287 for (int i = 0; i < 2; ++i) { |
| 1195 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1288 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1196 // Add an overlapping quad above the candidate. | 1289 // Add an overlapping quad above the candidate. |
| 1197 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1290 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1198 pass->shared_quad_state_list.back(), pass.get()); | 1291 pass->shared_quad_state_list.back(), pass.get()); |
| 1199 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1292 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1200 pass->shared_quad_state_list.back(), | 1293 pass->shared_quad_state_list.back(), |
| 1201 pass.get()); | 1294 pass.get()); |
| 1202 | 1295 |
| 1203 damage_rect_ = kOverlayRect; | 1296 damage_rect_ = kOverlayRect; |
| 1204 | 1297 |
| 1205 OverlayCandidateList candidate_list; | 1298 OverlayCandidateList candidate_list; |
| 1206 RenderPassFilterList render_pass_filters; | 1299 RenderPassFilterList render_pass_filters; |
| 1207 RenderPassFilterList render_pass_background_filters; | 1300 RenderPassFilterList render_pass_background_filters; |
| 1208 overlay_processor_->ProcessForOverlays( | 1301 overlay_processor_->ProcessForOverlays( |
| 1209 resource_provider_.get(), pass.get(), render_pass_filters, | 1302 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1210 render_pass_background_filters, &candidate_list, nullptr, | 1303 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1211 &damage_rect_); | 1304 &content_bounds_); |
| 1212 } | 1305 } |
| 1213 | 1306 |
| 1214 EXPECT_EQ(kOverlayRect, damage_rect_); | 1307 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1215 } | 1308 } |
| 1216 | 1309 |
| 1217 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { | 1310 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { |
| 1311 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1312 gfx::RectF(kOverlayBottomRightRect)); |
| 1313 |
| 1218 for (int i = 0; i < 2; ++i) { | 1314 for (int i = 0; i < 2; ++i) { |
| 1219 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1315 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1220 // Add a non-overlapping quad above the candidate. | 1316 // Add a non-overlapping quad above the candidate. |
| 1221 CreateOpaqueQuadAt(resource_provider_.get(), | 1317 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1222 pass->shared_quad_state_list.back(), pass.get(), | 1318 pass->shared_quad_state_list.back(), pass.get(), |
| 1223 kOverlayTopLeftRect); | 1319 kOverlayTopLeftRect); |
| 1224 CreateCandidateQuadAt(resource_provider_.get(), | 1320 CreateCandidateQuadAt(resource_provider_.get(), |
| 1225 pass->shared_quad_state_list.back(), pass.get(), | 1321 pass->shared_quad_state_list.back(), pass.get(), |
| 1226 kOverlayBottomRightRect); | 1322 kOverlayBottomRightRect); |
| 1227 | 1323 |
| 1228 damage_rect_ = kOverlayBottomRightRect; | 1324 damage_rect_ = kOverlayBottomRightRect; |
| 1229 | 1325 |
| 1230 OverlayCandidateList candidate_list; | 1326 OverlayCandidateList candidate_list; |
| 1231 RenderPassFilterList render_pass_filters; | 1327 RenderPassFilterList render_pass_filters; |
| 1232 RenderPassFilterList render_pass_background_filters; | 1328 RenderPassFilterList render_pass_background_filters; |
| 1233 overlay_processor_->ProcessForOverlays( | 1329 overlay_processor_->ProcessForOverlays( |
| 1234 resource_provider_.get(), pass.get(), render_pass_filters, | 1330 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1235 render_pass_background_filters, &candidate_list, nullptr, | 1331 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1236 &damage_rect_); | 1332 &content_bounds_); |
| 1237 } | 1333 } |
| 1238 | 1334 |
| 1239 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1335 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 1240 } | 1336 } |
| 1241 | 1337 |
| 1338 TEST_F(UnderlayCastTest, NoOverlayContentBounds) { |
| 1339 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1340 |
| 1341 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1342 pass->shared_quad_state_list.back(), pass.get(), |
| 1343 kOverlayTopLeftRect); |
| 1344 |
| 1345 OverlayCandidateList candidate_list; |
| 1346 RenderPassFilterList render_pass_filters; |
| 1347 RenderPassFilterList render_pass_background_filters; |
| 1348 overlay_processor_->ProcessForOverlays( |
| 1349 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1350 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1351 &content_bounds_); |
| 1352 EXPECT_EQ(0U, content_bounds_.size()); |
| 1353 } |
| 1354 |
| 1355 TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) { |
| 1356 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1357 CreateCandidateQuadAt(resource_provider_.get(), |
| 1358 pass->shared_quad_state_list.back(), pass.get(), |
| 1359 kOverlayRect); |
| 1360 |
| 1361 OverlayCandidateList candidate_list; |
| 1362 RenderPassFilterList render_pass_filters; |
| 1363 RenderPassFilterList render_pass_background_filters; |
| 1364 overlay_processor_->ProcessForOverlays( |
| 1365 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1366 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1367 &content_bounds_); |
| 1368 |
| 1369 EXPECT_EQ(1U, content_bounds_.size()); |
| 1370 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1371 } |
| 1372 |
| 1373 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { |
| 1374 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1375 gfx::RectF(kOverlayBottomRightRect)); |
| 1376 |
| 1377 const gfx::Rect kLeftSide(0, 0, 128, 256); |
| 1378 const gfx::Rect kTopRight(128, 0, 128, 128); |
| 1379 |
| 1380 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1381 CreateCandidateQuadAt(resource_provider_.get(), |
| 1382 pass->shared_quad_state_list.back(), pass.get(), |
| 1383 kOverlayBottomRightRect); |
| 1384 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1385 pass->shared_quad_state_list.back(), pass.get(), kLeftSide, |
| 1386 SK_ColorBLACK); |
| 1387 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1388 pass->shared_quad_state_list.back(), pass.get(), kTopRight, |
| 1389 SK_ColorBLACK); |
| 1390 |
| 1391 OverlayCandidateList candidate_list; |
| 1392 RenderPassFilterList render_pass_filters; |
| 1393 RenderPassFilterList render_pass_background_filters; |
| 1394 overlay_processor_->ProcessForOverlays( |
| 1395 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1396 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1397 &content_bounds_); |
| 1398 |
| 1399 EXPECT_EQ(1U, content_bounds_.size()); |
| 1400 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1401 } |
| 1402 |
| 1403 TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) { |
| 1404 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1405 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1406 pass->shared_quad_state_list.back(), pass.get(), |
| 1407 kOverlayTopLeftRect); |
| 1408 CreateCandidateQuadAt(resource_provider_.get(), |
| 1409 pass->shared_quad_state_list.back(), pass.get(), |
| 1410 kOverlayRect); |
| 1411 |
| 1412 OverlayCandidateList candidate_list; |
| 1413 RenderPassFilterList render_pass_filters; |
| 1414 RenderPassFilterList render_pass_background_filters; |
| 1415 overlay_processor_->ProcessForOverlays( |
| 1416 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1417 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1418 &content_bounds_); |
| 1419 |
| 1420 EXPECT_EQ(1U, content_bounds_.size()); |
| 1421 EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]); |
| 1422 } |
| 1423 |
| 1424 TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) { |
| 1425 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1426 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1427 pass->shared_quad_state_list.back(), pass.get(), |
| 1428 kOverlayTopLeftRect); |
| 1429 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1430 pass->shared_quad_state_list.back(), pass.get(), |
| 1431 kOverlayBottomRightRect); |
| 1432 CreateCandidateQuadAt(resource_provider_.get(), |
| 1433 pass->shared_quad_state_list.back(), pass.get(), |
| 1434 kOverlayRect); |
| 1435 |
| 1436 OverlayCandidateList candidate_list; |
| 1437 RenderPassFilterList render_pass_filters; |
| 1438 RenderPassFilterList render_pass_background_filters; |
| 1439 overlay_processor_->ProcessForOverlays( |
| 1440 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1441 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1442 &content_bounds_); |
| 1443 |
| 1444 EXPECT_EQ(1U, content_bounds_.size()); |
| 1445 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1446 } |
| 1447 |
| 1448 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { |
| 1449 // Check rounding behaviour on overlay quads. Be conservative (content |
| 1450 // potentially visible on boundary). |
| 1451 const gfx::Rect overlay_rect(1, 1, 8, 8); |
| 1452 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1453 gfx::RectF(1.5f, 1.5f, 8, 8)); |
| 1454 |
| 1455 gfx::Transform transform; |
| 1456 transform.Translate(0.5f, 0.5f); |
| 1457 |
| 1458 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1459 CreateCandidateQuadAt(resource_provider_.get(), |
| 1460 pass->shared_quad_state_list.back(), pass.get(), |
| 1461 overlay_rect); |
| 1462 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1463 pass->shared_quad_state_list.back(), pass.get(), |
| 1464 gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); |
| 1465 |
| 1466 OverlayCandidateList candidate_list; |
| 1467 RenderPassFilterList render_pass_filters; |
| 1468 RenderPassFilterList render_pass_background_filters; |
| 1469 overlay_processor_->ProcessForOverlays( |
| 1470 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1471 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1472 &content_bounds_); |
| 1473 |
| 1474 EXPECT_EQ(1U, content_bounds_.size()); |
| 1475 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); |
| 1476 } |
| 1477 |
| 1478 TEST_F(UnderlayCastTest, RoundContentBounds) { |
| 1479 // Check rounding behaviour on content quads (bounds should be enclosing |
| 1480 // rect). |
| 1481 gfx::Rect overlay_rect = kOverlayRect; |
| 1482 overlay_rect.Inset(0, 0, 1, 1); |
| 1483 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1484 gfx::RectF(0.5f, 0.5f, 255, 255)); |
| 1485 |
| 1486 gfx::Transform transform; |
| 1487 transform.Translate(0.5f, 0.5f); |
| 1488 |
| 1489 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1490 CreateCandidateQuadAt(resource_provider_.get(), |
| 1491 pass->shared_quad_state_list.back(), pass.get(), |
| 1492 overlay_rect); |
| 1493 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1494 pass->shared_quad_state_list.back(), pass.get(), |
| 1495 gfx::Rect(0, 0, 255, 255), SK_ColorWHITE); |
| 1496 |
| 1497 OverlayCandidateList candidate_list; |
| 1498 RenderPassFilterList render_pass_filters; |
| 1499 RenderPassFilterList render_pass_background_filters; |
| 1500 overlay_processor_->ProcessForOverlays( |
| 1501 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1502 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1503 &content_bounds_); |
| 1504 |
| 1505 EXPECT_EQ(1U, content_bounds_.size()); |
| 1506 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1507 } |
| 1508 |
| 1242 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { | 1509 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { |
| 1243 OverlayCandidateList list; | 1510 OverlayCandidateList list; |
| 1244 OverlayCandidate output_surface_plane; | 1511 OverlayCandidate output_surface_plane; |
| 1245 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); | 1512 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); |
| 1246 output_surface_plane.quad_rect_in_target_space = | 1513 output_surface_plane.quad_rect_in_target_space = |
| 1247 root_render_pass->output_rect; | 1514 root_render_pass->output_rect; |
| 1248 output_surface_plane.use_output_surface_for_resource = true; | 1515 output_surface_plane.use_output_surface_for_resource = true; |
| 1249 output_surface_plane.overlay_handled = true; | 1516 output_surface_plane.overlay_handled = true; |
| 1250 list.push_back(output_surface_plane); | 1517 list.push_back(output_surface_plane); |
| 1251 return list; | 1518 return list; |
| 1252 } | 1519 } |
| 1253 | 1520 |
| 1254 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { | 1521 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { |
| 1255 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1522 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1256 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1523 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1257 pass->shared_quad_state_list.back(), | 1524 pass->shared_quad_state_list.back(), |
| 1258 pass.get()); | 1525 pass.get()); |
| 1259 pass->shared_quad_state_list.back() | 1526 pass->shared_quad_state_list.back() |
| 1260 ->quad_to_target_transform.RotateAboutZAxis(45.f); | 1527 ->quad_to_target_transform.RotateAboutZAxis(45.f); |
| 1261 | 1528 |
| 1262 gfx::Rect damage_rect; | 1529 gfx::Rect damage_rect; |
| 1263 CALayerOverlayList ca_layer_list; | 1530 CALayerOverlayList ca_layer_list; |
| 1264 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1531 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1265 RenderPassFilterList render_pass_filters; | 1532 RenderPassFilterList render_pass_filters; |
| 1266 RenderPassFilterList render_pass_background_filters; | 1533 RenderPassFilterList render_pass_background_filters; |
| 1267 overlay_processor_->ProcessForOverlays( | 1534 overlay_processor_->ProcessForOverlays( |
| 1268 resource_provider_.get(), pass.get(), render_pass_filters, | 1535 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1269 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1536 render_pass_background_filters, &overlay_list, &ca_layer_list, |
| 1270 &damage_rect); | 1537 &damage_rect_, &content_bounds_); |
| 1271 EXPECT_EQ(gfx::Rect(), damage_rect); | 1538 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1272 EXPECT_EQ(0U, overlay_list.size()); | 1539 EXPECT_EQ(0U, overlay_list.size()); |
| 1273 EXPECT_EQ(1U, ca_layer_list.size()); | 1540 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1274 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1541 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1275 } | 1542 } |
| 1276 | 1543 |
| 1277 TEST_F(CALayerOverlayTest, ThreeDTransform) { | 1544 TEST_F(CALayerOverlayTest, ThreeDTransform) { |
| 1278 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1545 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1279 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1546 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1280 pass->shared_quad_state_list.back(), | 1547 pass->shared_quad_state_list.back(), |
| 1281 pass.get()); | 1548 pass.get()); |
| 1282 pass->shared_quad_state_list.back() | 1549 pass->shared_quad_state_list.back() |
| 1283 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 1550 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 1284 | 1551 |
| 1285 gfx::Rect damage_rect; | 1552 gfx::Rect damage_rect; |
| 1286 CALayerOverlayList ca_layer_list; | 1553 CALayerOverlayList ca_layer_list; |
| 1287 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1554 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1288 RenderPassFilterList render_pass_filters; | 1555 RenderPassFilterList render_pass_filters; |
| 1289 RenderPassFilterList render_pass_background_filters; | 1556 RenderPassFilterList render_pass_background_filters; |
| 1290 overlay_processor_->ProcessForOverlays( | 1557 overlay_processor_->ProcessForOverlays( |
| 1291 resource_provider_.get(), pass.get(), render_pass_filters, | 1558 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1292 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1559 render_pass_background_filters, &overlay_list, &ca_layer_list, |
| 1293 &damage_rect); | 1560 &damage_rect_, &content_bounds_); |
| 1294 EXPECT_EQ(0U, overlay_list.size()); | 1561 EXPECT_EQ(0U, overlay_list.size()); |
| 1295 EXPECT_EQ(1U, ca_layer_list.size()); | 1562 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1296 gfx::Transform expected_transform; | 1563 gfx::Transform expected_transform; |
| 1297 expected_transform.RotateAboutXAxis(45.f); | 1564 expected_transform.RotateAboutXAxis(45.f); |
| 1298 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); | 1565 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); |
| 1299 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); | 1566 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); |
| 1300 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1567 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1301 } | 1568 } |
| 1302 | 1569 |
| 1303 TEST_F(CALayerOverlayTest, AllowContainingClip) { | 1570 TEST_F(CALayerOverlayTest, AllowContainingClip) { |
| 1304 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1571 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1305 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1572 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1306 pass->shared_quad_state_list.back(), | 1573 pass->shared_quad_state_list.back(), |
| 1307 pass.get()); | 1574 pass.get()); |
| 1308 pass->shared_quad_state_list.back()->is_clipped = true; | 1575 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1309 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; | 1576 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; |
| 1310 | 1577 |
| 1311 gfx::Rect damage_rect; | 1578 gfx::Rect damage_rect; |
| 1312 CALayerOverlayList ca_layer_list; | 1579 CALayerOverlayList ca_layer_list; |
| 1313 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1580 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1314 RenderPassFilterList render_pass_filters; | 1581 RenderPassFilterList render_pass_filters; |
| 1315 RenderPassFilterList render_pass_background_filters; | 1582 RenderPassFilterList render_pass_background_filters; |
| 1316 overlay_processor_->ProcessForOverlays( | 1583 overlay_processor_->ProcessForOverlays( |
| 1317 resource_provider_.get(), pass.get(), render_pass_filters, | 1584 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1318 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1585 render_pass_background_filters, &overlay_list, &ca_layer_list, |
| 1319 &damage_rect); | 1586 &damage_rect_, &content_bounds_); |
| 1320 EXPECT_EQ(gfx::Rect(), damage_rect); | 1587 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1321 EXPECT_EQ(0U, overlay_list.size()); | 1588 EXPECT_EQ(0U, overlay_list.size()); |
| 1322 EXPECT_EQ(1U, ca_layer_list.size()); | 1589 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1323 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1590 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1324 } | 1591 } |
| 1325 | 1592 |
| 1326 TEST_F(CALayerOverlayTest, NontrivialClip) { | 1593 TEST_F(CALayerOverlayTest, NontrivialClip) { |
| 1327 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1594 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1328 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1595 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1329 pass->shared_quad_state_list.back(), | 1596 pass->shared_quad_state_list.back(), |
| 1330 pass.get()); | 1597 pass.get()); |
| 1331 pass->shared_quad_state_list.back()->is_clipped = true; | 1598 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1332 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); | 1599 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); |
| 1333 | 1600 |
| 1334 gfx::Rect damage_rect; | 1601 gfx::Rect damage_rect; |
| 1335 CALayerOverlayList ca_layer_list; | 1602 CALayerOverlayList ca_layer_list; |
| 1336 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1603 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1337 RenderPassFilterList render_pass_filters; | 1604 RenderPassFilterList render_pass_filters; |
| 1338 RenderPassFilterList render_pass_background_filters; | 1605 RenderPassFilterList render_pass_background_filters; |
| 1339 overlay_processor_->ProcessForOverlays( | 1606 overlay_processor_->ProcessForOverlays( |
| 1340 resource_provider_.get(), pass.get(), render_pass_filters, | 1607 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1341 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1608 render_pass_background_filters, &overlay_list, &ca_layer_list, |
| 1342 &damage_rect); | 1609 &damage_rect_, &content_bounds_); |
| 1343 EXPECT_EQ(gfx::Rect(), damage_rect); | 1610 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1344 EXPECT_EQ(0U, overlay_list.size()); | 1611 EXPECT_EQ(0U, overlay_list.size()); |
| 1345 EXPECT_EQ(1U, ca_layer_list.size()); | 1612 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1346 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); | 1613 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); |
| 1347 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), | 1614 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), |
| 1348 ca_layer_list.back().shared_state->clip_rect); | 1615 ca_layer_list.back().shared_state->clip_rect); |
| 1349 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1616 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1350 } | 1617 } |
| 1351 | 1618 |
| 1352 TEST_F(CALayerOverlayTest, SkipTransparent) { | 1619 TEST_F(CALayerOverlayTest, SkipTransparent) { |
| 1353 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1620 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1354 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1621 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1355 pass->shared_quad_state_list.back(), | 1622 pass->shared_quad_state_list.back(), |
| 1356 pass.get()); | 1623 pass.get()); |
| 1357 pass->shared_quad_state_list.back()->opacity = 0; | 1624 pass->shared_quad_state_list.back()->opacity = 0; |
| 1358 | 1625 |
| 1359 gfx::Rect damage_rect; | 1626 gfx::Rect damage_rect; |
| 1360 CALayerOverlayList ca_layer_list; | 1627 CALayerOverlayList ca_layer_list; |
| 1361 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1628 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1362 RenderPassFilterList render_pass_filters; | 1629 RenderPassFilterList render_pass_filters; |
| 1363 RenderPassFilterList render_pass_background_filters; | 1630 RenderPassFilterList render_pass_background_filters; |
| 1364 overlay_processor_->ProcessForOverlays( | 1631 overlay_processor_->ProcessForOverlays( |
| 1365 resource_provider_.get(), pass.get(), render_pass_filters, | 1632 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1366 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1633 render_pass_background_filters, &overlay_list, &ca_layer_list, |
| 1367 &damage_rect); | 1634 &damage_rect_, &content_bounds_); |
| 1368 EXPECT_EQ(gfx::Rect(), damage_rect); | 1635 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1369 EXPECT_EQ(0U, overlay_list.size()); | 1636 EXPECT_EQ(0U, overlay_list.size()); |
| 1370 EXPECT_EQ(0U, ca_layer_list.size()); | 1637 EXPECT_EQ(0U, ca_layer_list.size()); |
| 1371 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1638 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1372 } | 1639 } |
| 1373 | 1640 |
| 1374 class OverlayInfoRendererGL : public GLRenderer { | 1641 class OverlayInfoRendererGL : public GLRenderer { |
| 1375 public: | 1642 public: |
| 1376 OverlayInfoRendererGL(const RendererSettings* settings, | 1643 OverlayInfoRendererGL(const RendererSettings* settings, |
| 1377 OutputSurface* output_surface, | 1644 OutputSurface* output_surface, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1412 public: | 1679 public: |
| 1413 MOCK_METHOD5(Schedule, | 1680 MOCK_METHOD5(Schedule, |
| 1414 void(int plane_z_order, | 1681 void(int plane_z_order, |
| 1415 gfx::OverlayTransform plane_transform, | 1682 gfx::OverlayTransform plane_transform, |
| 1416 unsigned overlay_texture_id, | 1683 unsigned overlay_texture_id, |
| 1417 const gfx::Rect& display_bounds, | 1684 const gfx::Rect& display_bounds, |
| 1418 const gfx::RectF& uv_rect)); | 1685 const gfx::RectF& uv_rect)); |
| 1419 }; | 1686 }; |
| 1420 | 1687 |
| 1421 class GLRendererWithOverlaysTest : public testing::Test { | 1688 class GLRendererWithOverlaysTest : public testing::Test { |
| 1689 using OutputSurfaceType = OverlayOutputSurface<SingleOverlayValidator>; |
| 1690 |
| 1422 protected: | 1691 protected: |
| 1423 GLRendererWithOverlaysTest() { | 1692 GLRendererWithOverlaysTest() { |
| 1424 provider_ = TestContextProvider::Create(); | 1693 provider_ = TestContextProvider::Create(); |
| 1425 provider_->BindToCurrentThread(); | 1694 provider_->BindToCurrentThread(); |
| 1426 output_surface_.reset(new OverlayOutputSurface(provider_)); | 1695 output_surface_.reset(new OutputSurfaceType(provider_)); |
| 1427 output_surface_->BindToClient(&output_surface_client_); | 1696 output_surface_->BindToClient(&output_surface_client_); |
| 1428 resource_provider_ = FakeResourceProvider::Create(provider_.get(), nullptr); | 1697 resource_provider_ = FakeResourceProvider::Create(provider_.get(), nullptr); |
| 1429 | 1698 |
| 1430 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind( | 1699 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind( |
| 1431 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_))); | 1700 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_))); |
| 1432 } | 1701 } |
| 1433 | 1702 |
| 1434 void Init(bool use_validator) { | 1703 void Init(bool use_validator) { |
| 1435 if (use_validator) | 1704 if (use_validator) |
| 1436 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); | 1705 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1459 gpu::TextureInUseResponse response; | 1728 gpu::TextureInUseResponse response; |
| 1460 response.texture = lock.texture_id(); | 1729 response.texture = lock.texture_id(); |
| 1461 response.in_use = false; | 1730 response.in_use = false; |
| 1462 gpu::TextureInUseResponses responses; | 1731 gpu::TextureInUseResponses responses; |
| 1463 responses.push_back(response); | 1732 responses.push_back(response); |
| 1464 renderer_->DidReceiveTextureInUseResponses(responses); | 1733 renderer_->DidReceiveTextureInUseResponses(responses); |
| 1465 } | 1734 } |
| 1466 | 1735 |
| 1467 RendererSettings settings_; | 1736 RendererSettings settings_; |
| 1468 FakeOutputSurfaceClient output_surface_client_; | 1737 FakeOutputSurfaceClient output_surface_client_; |
| 1469 std::unique_ptr<OverlayOutputSurface> output_surface_; | 1738 std::unique_ptr<OutputSurfaceType> output_surface_; |
| 1470 std::unique_ptr<ResourceProvider> resource_provider_; | 1739 std::unique_ptr<ResourceProvider> resource_provider_; |
| 1471 std::unique_ptr<OverlayInfoRendererGL> renderer_; | 1740 std::unique_ptr<OverlayInfoRendererGL> renderer_; |
| 1472 scoped_refptr<TestContextProvider> provider_; | 1741 scoped_refptr<TestContextProvider> provider_; |
| 1473 MockOverlayScheduler scheduler_; | 1742 MockOverlayScheduler scheduler_; |
| 1474 }; | 1743 }; |
| 1475 | 1744 |
| 1476 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { | 1745 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { |
| 1477 bool use_validator = true; | 1746 bool use_validator = true; |
| 1478 Init(use_validator); | 1747 Init(use_validator); |
| 1479 renderer_->set_expect_overlays(true); | 1748 renderer_->set_expect_overlays(true); |
| 1749 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1750 gfx::RectF(kOverlayBottomRightRect)); |
| 1751 |
| 1480 gfx::Size viewport_size(16, 16); | 1752 gfx::Size viewport_size(16, 16); |
| 1481 | 1753 |
| 1482 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1754 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1483 | 1755 |
| 1484 CreateCandidateQuadAt(resource_provider_.get(), | 1756 CreateCandidateQuadAt(resource_provider_.get(), |
| 1485 pass->shared_quad_state_list.back(), pass.get(), | 1757 pass->shared_quad_state_list.back(), pass.get(), |
| 1486 kOverlayBottomRightRect); | 1758 kOverlayBottomRightRect); |
| 1487 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1759 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1488 pass->shared_quad_state_list.back(), pass.get()); | 1760 pass->shared_quad_state_list.back(), pass.get()); |
| 1489 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1761 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1897 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 2169 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
| 1898 render_pass_id_ = 3; | 2170 render_pass_id_ = 3; |
| 1899 } | 2171 } |
| 1900 | 2172 |
| 1901 void ProcessForOverlays() { | 2173 void ProcessForOverlays() { |
| 1902 gfx::Rect damage_rect; | 2174 gfx::Rect damage_rect; |
| 1903 overlay_list_ = BackbufferOverlayList(pass_.get()); | 2175 overlay_list_ = BackbufferOverlayList(pass_.get()); |
| 1904 overlay_processor_->ProcessForOverlays( | 2176 overlay_processor_->ProcessForOverlays( |
| 1905 resource_provider_.get(), pass_.get(), render_pass_filters_, | 2177 resource_provider_.get(), pass_.get(), render_pass_filters_, |
| 1906 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, | 2178 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, |
| 1907 &damage_rect); | 2179 &damage_rect_, &content_bounds_); |
| 1908 } | 2180 } |
| 1909 std::unique_ptr<RenderPass> pass_; | 2181 std::unique_ptr<RenderPass> pass_; |
| 1910 RenderPassDrawQuad* quad_; | 2182 RenderPassDrawQuad* quad_; |
| 1911 int render_pass_id_; | 2183 int render_pass_id_; |
| 1912 FilterOperations filters_; | 2184 FilterOperations filters_; |
| 1913 FilterOperations background_filters_; | 2185 FilterOperations background_filters_; |
| 1914 RenderPassFilterList render_pass_filters_; | 2186 RenderPassFilterList render_pass_filters_; |
| 1915 RenderPassFilterList render_pass_background_filters_; | 2187 RenderPassFilterList render_pass_background_filters_; |
| 1916 CALayerOverlayList ca_layer_list_; | 2188 CALayerOverlayList ca_layer_list_; |
| 1917 OverlayCandidateList overlay_list_; | 2189 OverlayCandidateList overlay_list_; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2018 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(), | 2290 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(), |
| 2019 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF()); | 2291 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF()); |
| 2020 } | 2292 } |
| 2021 | 2293 |
| 2022 ProcessForOverlays(); | 2294 ProcessForOverlays(); |
| 2023 EXPECT_EQ(0U, ca_layer_list_.size()); | 2295 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 2024 } | 2296 } |
| 2025 | 2297 |
| 2026 } // namespace | 2298 } // namespace |
| 2027 } // namespace cc | 2299 } // namespace cc |
| OLD | NEW |