| 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 | 8 |
| 9 #include "base/memory/ptr_util.h" |
| 9 #include "cc/base/region.h" | 10 #include "cc/base/region.h" |
| 10 #include "cc/output/compositor_frame_metadata.h" | 11 #include "cc/output/compositor_frame_metadata.h" |
| 11 #include "cc/output/gl_renderer.h" | 12 #include "cc/output/gl_renderer.h" |
| 12 #include "cc/output/output_surface.h" | 13 #include "cc/output/output_surface.h" |
| 13 #include "cc/output/output_surface_client.h" | 14 #include "cc/output/output_surface_client.h" |
| 14 #include "cc/output/overlay_candidate_validator.h" | 15 #include "cc/output/overlay_candidate_validator.h" |
| 15 #include "cc/output/overlay_processor.h" | 16 #include "cc/output/overlay_processor.h" |
| 16 #include "cc/output/overlay_strategy_single_on_top.h" | 17 #include "cc/output/overlay_strategy_single_on_top.h" |
| 17 #include "cc/output/overlay_strategy_underlay.h" | 18 #include "cc/output/overlay_strategy_underlay.h" |
| 18 #include "cc/quads/render_pass.h" | 19 #include "cc/quads/render_pass.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 gfx::Transform(0, 1, 1, 0, 0, 0); // x,y -> y,x. | 57 gfx::Transform(0, 1, 1, 0, 0, 0); // x,y -> y,x. |
| 57 | 58 |
| 58 void MailboxReleased(const gpu::SyncToken& sync_token, | 59 void MailboxReleased(const gpu::SyncToken& sync_token, |
| 59 bool lost_resource, | 60 bool lost_resource, |
| 60 BlockingTaskRunner* main_thread_task_runner) {} | 61 BlockingTaskRunner* main_thread_task_runner) {} |
| 61 | 62 |
| 62 class SingleOverlayValidator : public OverlayCandidateValidator { | 63 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 63 public: | 64 public: |
| 64 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 65 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 65 strategies->push_back( | 66 strategies->push_back( |
| 66 make_scoped_ptr(new OverlayStrategySingleOnTop(this))); | 67 base::WrapUnique(new OverlayStrategySingleOnTop(this))); |
| 67 strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this))); | 68 strategies->push_back(base::WrapUnique(new OverlayStrategyUnderlay(this))); |
| 68 } | 69 } |
| 69 bool AllowCALayerOverlays() override { return false; } | 70 bool AllowCALayerOverlays() override { return false; } |
| 70 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 71 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 71 // We may have 1 or 2 surfaces depending on whether this ran through the | 72 // We may have 1 or 2 surfaces depending on whether this ran through the |
| 72 // full renderer and picked up the output surface, or not. | 73 // full renderer and picked up the output surface, or not. |
| 73 ASSERT_LE(1U, surfaces->size()); | 74 ASSERT_LE(1U, surfaces->size()); |
| 74 ASSERT_GE(2U, surfaces->size()); | 75 ASSERT_GE(2U, surfaces->size()); |
| 75 | 76 |
| 76 OverlayCandidate& candidate = surfaces->back(); | 77 OverlayCandidate& candidate = surfaces->back(); |
| 77 EXPECT_TRUE(!candidate.use_output_surface_for_resource); | 78 EXPECT_TRUE(!candidate.use_output_surface_for_resource); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 98 public: | 99 public: |
| 99 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} | 100 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
| 100 bool AllowCALayerOverlays() override { return true; } | 101 bool AllowCALayerOverlays() override { return true; } |
| 101 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 102 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
| 102 }; | 103 }; |
| 103 | 104 |
| 104 class SingleOnTopOverlayValidator : public SingleOverlayValidator { | 105 class SingleOnTopOverlayValidator : public SingleOverlayValidator { |
| 105 public: | 106 public: |
| 106 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 107 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 107 strategies->push_back( | 108 strategies->push_back( |
| 108 make_scoped_ptr(new OverlayStrategySingleOnTop(this))); | 109 base::WrapUnique(new OverlayStrategySingleOnTop(this))); |
| 109 } | 110 } |
| 110 }; | 111 }; |
| 111 | 112 |
| 112 class UnderlayOverlayValidator : public SingleOverlayValidator { | 113 class UnderlayOverlayValidator : public SingleOverlayValidator { |
| 113 public: | 114 public: |
| 114 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 115 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 115 strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this))); | 116 strategies->push_back(base::WrapUnique(new OverlayStrategyUnderlay(this))); |
| 116 } | 117 } |
| 117 }; | 118 }; |
| 118 | 119 |
| 119 class DefaultOverlayProcessor : public OverlayProcessor { | 120 class DefaultOverlayProcessor : public OverlayProcessor { |
| 120 public: | 121 public: |
| 121 explicit DefaultOverlayProcessor(OutputSurface* surface); | 122 explicit DefaultOverlayProcessor(OutputSurface* surface); |
| 122 size_t GetStrategyCount(); | 123 size_t GetStrategyCount(); |
| 123 }; | 124 }; |
| 124 | 125 |
| 125 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) | 126 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 bool IsDisplayedAsOverlayPlane() const override { | 165 bool IsDisplayedAsOverlayPlane() const override { |
| 165 return is_displayed_as_overlay_plane_; | 166 return is_displayed_as_overlay_plane_; |
| 166 } | 167 } |
| 167 unsigned GetOverlayTextureId() const override { return 10000; } | 168 unsigned GetOverlayTextureId() const override { return 10000; } |
| 168 void set_is_displayed_as_overlay_plane(bool value) { | 169 void set_is_displayed_as_overlay_plane(bool value) { |
| 169 is_displayed_as_overlay_plane_ = value; | 170 is_displayed_as_overlay_plane_ = value; |
| 170 } | 171 } |
| 171 unsigned bind_framebuffer_count() const { return bind_framebuffer_count_; } | 172 unsigned bind_framebuffer_count() const { return bind_framebuffer_count_; } |
| 172 | 173 |
| 173 private: | 174 private: |
| 174 scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_; | 175 std::unique_ptr<OverlayCandidateValidator> overlay_candidate_validator_; |
| 175 bool is_displayed_as_overlay_plane_; | 176 bool is_displayed_as_overlay_plane_; |
| 176 unsigned bind_framebuffer_count_ = 0; | 177 unsigned bind_framebuffer_count_ = 0; |
| 177 }; | 178 }; |
| 178 | 179 |
| 179 scoped_ptr<RenderPass> CreateRenderPass() { | 180 std::unique_ptr<RenderPass> CreateRenderPass() { |
| 180 RenderPassId id(1, 0); | 181 RenderPassId id(1, 0); |
| 181 gfx::Rect output_rect(0, 0, 256, 256); | 182 gfx::Rect output_rect(0, 0, 256, 256); |
| 182 bool has_transparent_background = true; | 183 bool has_transparent_background = true; |
| 183 | 184 |
| 184 scoped_ptr<RenderPass> pass = RenderPass::Create(); | 185 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 185 pass->SetAll(id, | 186 pass->SetAll(id, |
| 186 output_rect, | 187 output_rect, |
| 187 output_rect, | 188 output_rect, |
| 188 gfx::Transform(), | 189 gfx::Transform(), |
| 189 has_transparent_background); | 190 has_transparent_background); |
| 190 | 191 |
| 191 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 192 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 192 shared_state->opacity = 1.f; | 193 shared_state->opacity = 1.f; |
| 193 return pass; | 194 return pass; |
| 194 } | 195 } |
| 195 | 196 |
| 196 ResourceId CreateResource(ResourceProvider* resource_provider, | 197 ResourceId CreateResource(ResourceProvider* resource_provider, |
| 197 const gfx::Size& size, | 198 const gfx::Size& size, |
| 198 bool is_overlay_candidate) { | 199 bool is_overlay_candidate) { |
| 199 TextureMailbox mailbox = | 200 TextureMailbox mailbox = |
| 200 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, | 201 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, |
| 201 size, is_overlay_candidate, false); | 202 size, is_overlay_candidate, false); |
| 202 scoped_ptr<SingleReleaseCallbackImpl> release_callback = | 203 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = |
| 203 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 204 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 204 | 205 |
| 205 return resource_provider->CreateResourceFromTextureMailbox( | 206 return resource_provider->CreateResourceFromTextureMailbox( |
| 206 mailbox, std::move(release_callback)); | 207 mailbox, std::move(release_callback)); |
| 207 } | 208 } |
| 208 | 209 |
| 209 SolidColorDrawQuad* CreateSolidColorQuadAt( | 210 SolidColorDrawQuad* CreateSolidColorQuadAt( |
| 210 const SharedQuadState* shared_quad_state, | 211 const SharedQuadState* shared_quad_state, |
| 211 SkColor color, | 212 SkColor color, |
| 212 RenderPass* render_pass, | 213 RenderPass* render_pass, |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 | 344 |
| 344 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); | 345 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); |
| 345 resource_provider_ = FakeResourceProvider::Create( | 346 resource_provider_ = FakeResourceProvider::Create( |
| 346 output_surface_.get(), shared_bitmap_manager_.get()); | 347 output_surface_.get(), shared_bitmap_manager_.get()); |
| 347 | 348 |
| 348 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); | 349 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); |
| 349 overlay_processor_->Initialize(); | 350 overlay_processor_->Initialize(); |
| 350 } | 351 } |
| 351 | 352 |
| 352 scoped_refptr<TestContextProvider> provider_; | 353 scoped_refptr<TestContextProvider> provider_; |
| 353 scoped_ptr<OverlayOutputSurface> output_surface_; | 354 std::unique_ptr<OverlayOutputSurface> output_surface_; |
| 354 FakeOutputSurfaceClient client_; | 355 FakeOutputSurfaceClient client_; |
| 355 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 356 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 356 scoped_ptr<ResourceProvider> resource_provider_; | 357 std::unique_ptr<ResourceProvider> resource_provider_; |
| 357 scoped_ptr<OverlayProcessor> overlay_processor_; | 358 std::unique_ptr<OverlayProcessor> overlay_processor_; |
| 358 gfx::Rect damage_rect_; | 359 gfx::Rect damage_rect_; |
| 359 }; | 360 }; |
| 360 | 361 |
| 361 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; | 362 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; |
| 362 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; | 363 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; |
| 363 typedef OverlayTest<CALayerValidator> CALayerOverlayTest; | 364 typedef OverlayTest<CALayerValidator> CALayerOverlayTest; |
| 364 | 365 |
| 365 TEST(OverlayTest, NoOverlaysByDefault) { | 366 TEST(OverlayTest, NoOverlaysByDefault) { |
| 366 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 367 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
| 367 OverlayOutputSurface output_surface(provider); | 368 OverlayOutputSurface output_surface(provider); |
| 368 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); | 369 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); |
| 369 | 370 |
| 370 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 371 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 371 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); | 372 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); |
| 372 } | 373 } |
| 373 | 374 |
| 374 TEST(OverlayTest, OverlaysProcessorHasStrategy) { | 375 TEST(OverlayTest, OverlaysProcessorHasStrategy) { |
| 375 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 376 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
| 376 OverlayOutputSurface output_surface(provider); | 377 OverlayOutputSurface output_surface(provider); |
| 377 FakeOutputSurfaceClient client; | 378 FakeOutputSurfaceClient client; |
| 378 EXPECT_TRUE(output_surface.BindToClient(&client)); | 379 EXPECT_TRUE(output_surface.BindToClient(&client)); |
| 379 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 380 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 380 | 381 |
| 381 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 382 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 382 new TestSharedBitmapManager()); | 383 new TestSharedBitmapManager()); |
| 383 scoped_ptr<ResourceProvider> resource_provider = FakeResourceProvider::Create( | 384 std::unique_ptr<ResourceProvider> resource_provider = |
| 384 &output_surface, shared_bitmap_manager.get()); | 385 FakeResourceProvider::Create(&output_surface, |
| 386 shared_bitmap_manager.get()); |
| 385 | 387 |
| 386 scoped_ptr<DefaultOverlayProcessor> overlay_processor( | 388 std::unique_ptr<DefaultOverlayProcessor> overlay_processor( |
| 387 new DefaultOverlayProcessor(&output_surface)); | 389 new DefaultOverlayProcessor(&output_surface)); |
| 388 overlay_processor->Initialize(); | 390 overlay_processor->Initialize(); |
| 389 EXPECT_GE(2U, overlay_processor->GetStrategyCount()); | 391 EXPECT_GE(2U, overlay_processor->GetStrategyCount()); |
| 390 } | 392 } |
| 391 | 393 |
| 392 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { | 394 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { |
| 393 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 395 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 394 TextureDrawQuad* original_quad = | 396 TextureDrawQuad* original_quad = |
| 395 CreateFullscreenCandidateQuad(resource_provider_.get(), | 397 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 396 pass->shared_quad_state_list.back(), | 398 pass->shared_quad_state_list.back(), |
| 397 pass.get()); | 399 pass.get()); |
| 398 unsigned original_resource_id = original_quad->resource_id(); | 400 unsigned original_resource_id = original_quad->resource_id(); |
| 399 | 401 |
| 400 // Add something behind it. | 402 // Add something behind it. |
| 401 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 403 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 402 pass->shared_quad_state_list.back(), pass.get()); | 404 pass->shared_quad_state_list.back(), pass.get()); |
| 403 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 405 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 418 it != quad_list.BackToFrontEnd(); | 420 it != quad_list.BackToFrontEnd(); |
| 419 ++it) { | 421 ++it) { |
| 420 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 422 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 421 } | 423 } |
| 422 | 424 |
| 423 // Check that the right resource id got extracted. | 425 // Check that the right resource id got extracted. |
| 424 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); | 426 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); |
| 425 } | 427 } |
| 426 | 428 |
| 427 TEST_F(SingleOverlayOnTopTest, DamageRect) { | 429 TEST_F(SingleOverlayOnTopTest, DamageRect) { |
| 428 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 430 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 429 CreateFullscreenCandidateQuad(resource_provider_.get(), | 431 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 430 pass->shared_quad_state_list.back(), | 432 pass->shared_quad_state_list.back(), |
| 431 pass.get()); | 433 pass.get()); |
| 432 damage_rect_ = kOverlayRect; | 434 damage_rect_ = kOverlayRect; |
| 433 | 435 |
| 434 // Add something behind it. | 436 // Add something behind it. |
| 435 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 437 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 436 pass->shared_quad_state_list.back(), pass.get()); | 438 pass->shared_quad_state_list.back(), pass.get()); |
| 437 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 439 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 438 pass->shared_quad_state_list.back(), pass.get()); | 440 pass->shared_quad_state_list.back(), pass.get()); |
| 439 | 441 |
| 440 // Check for potential candidates. | 442 // Check for potential candidates. |
| 441 OverlayCandidateList candidate_list; | 443 OverlayCandidateList candidate_list; |
| 442 | 444 |
| 443 // Primary plane. | 445 // Primary plane. |
| 444 OverlayCandidate output_surface_plane; | 446 OverlayCandidate output_surface_plane; |
| 445 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); | 447 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); |
| 446 output_surface_plane.quad_rect_in_target_space = kOverlayRect; | 448 output_surface_plane.quad_rect_in_target_space = kOverlayRect; |
| 447 output_surface_plane.use_output_surface_for_resource = true; | 449 output_surface_plane.use_output_surface_for_resource = true; |
| 448 output_surface_plane.overlay_handled = true; | 450 output_surface_plane.overlay_handled = true; |
| 449 candidate_list.push_back(output_surface_plane); | 451 candidate_list.push_back(output_surface_plane); |
| 450 | 452 |
| 451 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 453 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 452 &candidate_list, nullptr, | 454 &candidate_list, nullptr, |
| 453 &damage_rect_); | 455 &damage_rect_); |
| 454 DCHECK(damage_rect_.IsEmpty()); | 456 DCHECK(damage_rect_.IsEmpty()); |
| 455 } | 457 } |
| 456 | 458 |
| 457 TEST_F(SingleOverlayOnTopTest, NoCandidates) { | 459 TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
| 458 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 460 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 459 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 461 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 460 pass->shared_quad_state_list.back(), pass.get()); | 462 pass->shared_quad_state_list.back(), pass.get()); |
| 461 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 463 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 462 pass->shared_quad_state_list.back(), pass.get()); | 464 pass->shared_quad_state_list.back(), pass.get()); |
| 463 | 465 |
| 464 RenderPassList pass_list; | 466 RenderPassList pass_list; |
| 465 pass_list.push_back(std::move(pass)); | 467 pass_list.push_back(std::move(pass)); |
| 466 | 468 |
| 467 RenderPassList original_pass_list; | 469 RenderPassList original_pass_list; |
| 468 RenderPass::CopyAll(pass_list, &original_pass_list); | 470 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 469 | 471 |
| 470 OverlayCandidateList candidate_list; | 472 OverlayCandidateList candidate_list; |
| 471 overlay_processor_->ProcessForOverlays( | 473 overlay_processor_->ProcessForOverlays( |
| 472 resource_provider_.get(), pass_list.back().get(), &candidate_list, | 474 resource_provider_.get(), pass_list.back().get(), &candidate_list, |
| 473 nullptr, &damage_rect_); | 475 nullptr, &damage_rect_); |
| 474 EXPECT_EQ(0U, candidate_list.size()); | 476 EXPECT_EQ(0U, candidate_list.size()); |
| 475 // There should be nothing new here. | 477 // There should be nothing new here. |
| 476 CompareRenderPassLists(pass_list, original_pass_list); | 478 CompareRenderPassLists(pass_list, original_pass_list); |
| 477 } | 479 } |
| 478 | 480 |
| 479 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | 481 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
| 480 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 482 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 481 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 483 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 482 pass->shared_quad_state_list.back(), pass.get()); | 484 pass->shared_quad_state_list.back(), pass.get()); |
| 483 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 485 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 484 pass->shared_quad_state_list.back(), pass.get()); | 486 pass->shared_quad_state_list.back(), pass.get()); |
| 485 | 487 |
| 486 CreateFullscreenCandidateQuad(resource_provider_.get(), | 488 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 487 pass->shared_quad_state_list.back(), | 489 pass->shared_quad_state_list.back(), |
| 488 pass.get()); | 490 pass.get()); |
| 489 | 491 |
| 490 RenderPassList pass_list; | 492 RenderPassList pass_list; |
| 491 pass_list.push_back(std::move(pass)); | 493 pass_list.push_back(std::move(pass)); |
| 492 | 494 |
| 493 RenderPassList original_pass_list; | 495 RenderPassList original_pass_list; |
| 494 RenderPass::CopyAll(pass_list, &original_pass_list); | 496 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 495 | 497 |
| 496 OverlayCandidateList candidate_list; | 498 OverlayCandidateList candidate_list; |
| 497 overlay_processor_->ProcessForOverlays( | 499 overlay_processor_->ProcessForOverlays( |
| 498 resource_provider_.get(), pass_list.back().get(), &candidate_list, | 500 resource_provider_.get(), pass_list.back().get(), &candidate_list, |
| 499 nullptr, &damage_rect_); | 501 nullptr, &damage_rect_); |
| 500 EXPECT_EQ(0U, candidate_list.size()); | 502 EXPECT_EQ(0U, candidate_list.size()); |
| 501 // There should be nothing new here. | 503 // There should be nothing new here. |
| 502 CompareRenderPassLists(pass_list, original_pass_list); | 504 CompareRenderPassLists(pass_list, original_pass_list); |
| 503 } | 505 } |
| 504 | 506 |
| 505 // Test with multiple render passes. | 507 // Test with multiple render passes. |
| 506 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 508 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
| 507 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 509 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 508 CreateFullscreenCandidateQuad(resource_provider_.get(), | 510 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 509 pass->shared_quad_state_list.back(), | 511 pass->shared_quad_state_list.back(), |
| 510 pass.get()); | 512 pass.get()); |
| 511 | 513 |
| 512 // Add something behind it. | 514 // Add something behind it. |
| 513 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 515 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 514 pass->shared_quad_state_list.back(), pass.get()); | 516 pass->shared_quad_state_list.back(), pass.get()); |
| 515 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 517 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 516 pass->shared_quad_state_list.back(), pass.get()); | 518 pass->shared_quad_state_list.back(), pass.get()); |
| 517 | 519 |
| 518 // Check for potential candidates. | 520 // Check for potential candidates. |
| 519 OverlayCandidateList candidate_list; | 521 OverlayCandidateList candidate_list; |
| 520 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 522 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 521 &candidate_list, nullptr, | 523 &candidate_list, nullptr, |
| 522 &damage_rect_); | 524 &damage_rect_); |
| 523 EXPECT_EQ(1U, candidate_list.size()); | 525 EXPECT_EQ(1U, candidate_list.size()); |
| 524 } | 526 } |
| 525 | 527 |
| 526 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { | 528 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { |
| 527 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 529 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 528 TextureDrawQuad* quad = | 530 TextureDrawQuad* quad = |
| 529 CreateFullscreenCandidateQuad(resource_provider_.get(), | 531 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 530 pass->shared_quad_state_list.back(), | 532 pass->shared_quad_state_list.back(), |
| 531 pass.get()); | 533 pass.get()); |
| 532 quad->premultiplied_alpha = true; | 534 quad->premultiplied_alpha = true; |
| 533 | 535 |
| 534 OverlayCandidateList candidate_list; | 536 OverlayCandidateList candidate_list; |
| 535 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 537 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 536 &candidate_list, nullptr, | 538 &candidate_list, nullptr, |
| 537 &damage_rect_); | 539 &damage_rect_); |
| 538 EXPECT_EQ(0U, candidate_list.size()); | 540 EXPECT_EQ(0U, candidate_list.size()); |
| 539 } | 541 } |
| 540 | 542 |
| 541 TEST_F(SingleOverlayOnTopTest, RejectBlending) { | 543 TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
| 542 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 544 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 543 TextureDrawQuad* quad = | 545 TextureDrawQuad* quad = |
| 544 CreateFullscreenCandidateQuad(resource_provider_.get(), | 546 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 545 pass->shared_quad_state_list.back(), | 547 pass->shared_quad_state_list.back(), |
| 546 pass.get()); | 548 pass.get()); |
| 547 quad->needs_blending = true; | 549 quad->needs_blending = true; |
| 548 | 550 |
| 549 OverlayCandidateList candidate_list; | 551 OverlayCandidateList candidate_list; |
| 550 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 552 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 551 &candidate_list, nullptr, | 553 &candidate_list, nullptr, |
| 552 &damage_rect_); | 554 &damage_rect_); |
| 553 EXPECT_EQ(0U, candidate_list.size()); | 555 EXPECT_EQ(0U, candidate_list.size()); |
| 554 } | 556 } |
| 555 | 557 |
| 556 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { | 558 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
| 557 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 559 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 558 TextureDrawQuad* quad = | 560 TextureDrawQuad* quad = |
| 559 CreateFullscreenCandidateQuad(resource_provider_.get(), | 561 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 560 pass->shared_quad_state_list.back(), | 562 pass->shared_quad_state_list.back(), |
| 561 pass.get()); | 563 pass.get()); |
| 562 quad->background_color = SK_ColorBLACK; | 564 quad->background_color = SK_ColorBLACK; |
| 563 | 565 |
| 564 OverlayCandidateList candidate_list; | 566 OverlayCandidateList candidate_list; |
| 565 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 567 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 566 &candidate_list, nullptr, | 568 &candidate_list, nullptr, |
| 567 &damage_rect_); | 569 &damage_rect_); |
| 568 EXPECT_EQ(0U, candidate_list.size()); | 570 EXPECT_EQ(0U, candidate_list.size()); |
| 569 } | 571 } |
| 570 | 572 |
| 571 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { | 573 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
| 572 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 574 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 573 CreateFullscreenCandidateQuad(resource_provider_.get(), | 575 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 574 pass->shared_quad_state_list.back(), | 576 pass->shared_quad_state_list.back(), |
| 575 pass.get()); | 577 pass.get()); |
| 576 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; | 578 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; |
| 577 | 579 |
| 578 OverlayCandidateList candidate_list; | 580 OverlayCandidateList candidate_list; |
| 579 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 581 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 580 &candidate_list, nullptr, | 582 &candidate_list, nullptr, |
| 581 &damage_rect_); | 583 &damage_rect_); |
| 582 EXPECT_EQ(0U, candidate_list.size()); | 584 EXPECT_EQ(0U, candidate_list.size()); |
| 583 } | 585 } |
| 584 | 586 |
| 585 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { | 587 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
| 586 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 588 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 587 CreateFullscreenCandidateQuad(resource_provider_.get(), | 589 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 588 pass->shared_quad_state_list.back(), | 590 pass->shared_quad_state_list.back(), |
| 589 pass.get()); | 591 pass.get()); |
| 590 pass->shared_quad_state_list.back()->opacity = 0.5f; | 592 pass->shared_quad_state_list.back()->opacity = 0.5f; |
| 591 | 593 |
| 592 OverlayCandidateList candidate_list; | 594 OverlayCandidateList candidate_list; |
| 593 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 595 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 594 &candidate_list, nullptr, | 596 &candidate_list, nullptr, |
| 595 &damage_rect_); | 597 &damage_rect_); |
| 596 EXPECT_EQ(0U, candidate_list.size()); | 598 EXPECT_EQ(0U, candidate_list.size()); |
| 597 } | 599 } |
| 598 | 600 |
| 599 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { | 601 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { |
| 600 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 602 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 601 CreateFullscreenCandidateQuad(resource_provider_.get(), | 603 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 602 pass->shared_quad_state_list.back(), | 604 pass->shared_quad_state_list.back(), |
| 603 pass.get()); | 605 pass.get()); |
| 604 pass->shared_quad_state_list.back() | 606 pass->shared_quad_state_list.back() |
| 605 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 607 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 606 | 608 |
| 607 OverlayCandidateList candidate_list; | 609 OverlayCandidateList candidate_list; |
| 608 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 610 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 609 &candidate_list, nullptr, | 611 &candidate_list, nullptr, |
| 610 &damage_rect_); | 612 &damage_rect_); |
| 611 EXPECT_EQ(0U, candidate_list.size()); | 613 EXPECT_EQ(0U, candidate_list.size()); |
| 612 } | 614 } |
| 613 | 615 |
| 614 TEST_F(SingleOverlayOnTopTest, AllowClipped) { | 616 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 615 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 617 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 616 CreateFullscreenCandidateQuad(resource_provider_.get(), | 618 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 617 pass->shared_quad_state_list.back(), | 619 pass->shared_quad_state_list.back(), |
| 618 pass.get()); | 620 pass.get()); |
| 619 pass->shared_quad_state_list.back()->is_clipped = true; | 621 pass->shared_quad_state_list.back()->is_clipped = true; |
| 620 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 622 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 621 | 623 |
| 622 OverlayCandidateList candidate_list; | 624 OverlayCandidateList candidate_list; |
| 623 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 625 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 624 &candidate_list, nullptr, | 626 &candidate_list, nullptr, |
| 625 &damage_rect_); | 627 &damage_rect_); |
| 626 EXPECT_EQ(1U, candidate_list.size()); | 628 EXPECT_EQ(1U, candidate_list.size()); |
| 627 } | 629 } |
| 628 | 630 |
| 629 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { | 631 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { |
| 630 gfx::Rect rect = kOverlayRect; | 632 gfx::Rect rect = kOverlayRect; |
| 631 rect.set_width(rect.width() / 2); | 633 rect.set_width(rect.width() / 2); |
| 632 rect.Offset(0, -rect.height()); | 634 rect.Offset(0, -rect.height()); |
| 633 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 635 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 634 CreateCandidateQuadAt(resource_provider_.get(), | 636 CreateCandidateQuadAt(resource_provider_.get(), |
| 635 pass->shared_quad_state_list.back(), pass.get(), rect); | 637 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 636 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 638 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 637 -1.0f); | 639 -1.0f); |
| 638 OverlayCandidateList candidate_list; | 640 OverlayCandidateList candidate_list; |
| 639 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 641 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 640 &candidate_list, nullptr, | 642 &candidate_list, nullptr, |
| 641 &damage_rect_); | 643 &damage_rect_); |
| 642 ASSERT_EQ(1U, candidate_list.size()); | 644 ASSERT_EQ(1U, candidate_list.size()); |
| 643 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 645 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
| 644 candidate_list.back().transform); | 646 candidate_list.back().transform); |
| 645 } | 647 } |
| 646 | 648 |
| 647 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { | 649 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { |
| 648 gfx::Rect rect = kOverlayRect; | 650 gfx::Rect rect = kOverlayRect; |
| 649 rect.set_height(rect.height() / 2); | 651 rect.set_height(rect.height() / 2); |
| 650 rect.Offset(-rect.width(), 0); | 652 rect.Offset(-rect.width(), 0); |
| 651 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 653 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 652 CreateCandidateQuadAt(resource_provider_.get(), | 654 CreateCandidateQuadAt(resource_provider_.get(), |
| 653 pass->shared_quad_state_list.back(), pass.get(), rect); | 655 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 654 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 656 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
| 655 2.0f); | 657 2.0f); |
| 656 | 658 |
| 657 OverlayCandidateList candidate_list; | 659 OverlayCandidateList candidate_list; |
| 658 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 660 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 659 &candidate_list, nullptr, | 661 &candidate_list, nullptr, |
| 660 &damage_rect_); | 662 &damage_rect_); |
| 661 ASSERT_EQ(1U, candidate_list.size()); | 663 ASSERT_EQ(1U, candidate_list.size()); |
| 662 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 664 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
| 663 candidate_list.back().transform); | 665 candidate_list.back().transform); |
| 664 } | 666 } |
| 665 | 667 |
| 666 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 668 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
| 667 gfx::Rect rect = kOverlayRect; | 669 gfx::Rect rect = kOverlayRect; |
| 668 rect.set_width(rect.width() / 2); | 670 rect.set_width(rect.width() / 2); |
| 669 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 671 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 670 CreateCandidateQuadAt(resource_provider_.get(), | 672 CreateCandidateQuadAt(resource_provider_.get(), |
| 671 pass->shared_quad_state_list.back(), pass.get(), rect); | 673 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 672 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 674 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 673 1.0f); | 675 1.0f); |
| 674 OverlayCandidateList candidate_list; | 676 OverlayCandidateList candidate_list; |
| 675 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 677 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 676 &candidate_list, nullptr, | 678 &candidate_list, nullptr, |
| 677 &damage_rect_); | 679 &damage_rect_); |
| 678 EXPECT_EQ(1U, candidate_list.size()); | 680 EXPECT_EQ(1U, candidate_list.size()); |
| 679 } | 681 } |
| 680 | 682 |
| 681 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { | 683 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { |
| 682 gfx::Rect rect = kOverlayRect; | 684 gfx::Rect rect = kOverlayRect; |
| 683 rect.Offset(0, -rect.height()); | 685 rect.Offset(0, -rect.height()); |
| 684 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 686 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 685 CreateCandidateQuadAt(resource_provider_.get(), | 687 CreateCandidateQuadAt(resource_provider_.get(), |
| 686 pass->shared_quad_state_list.back(), pass.get(), rect); | 688 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 687 pass->shared_quad_state_list.back() | 689 pass->shared_quad_state_list.back() |
| 688 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 690 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 689 | 691 |
| 690 OverlayCandidateList candidate_list; | 692 OverlayCandidateList candidate_list; |
| 691 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 693 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 692 &candidate_list, nullptr, | 694 &candidate_list, nullptr, |
| 693 &damage_rect_); | 695 &damage_rect_); |
| 694 ASSERT_EQ(1U, candidate_list.size()); | 696 ASSERT_EQ(1U, candidate_list.size()); |
| 695 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 697 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
| 696 } | 698 } |
| 697 | 699 |
| 698 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { | 700 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { |
| 699 gfx::Rect rect = kOverlayRect; | 701 gfx::Rect rect = kOverlayRect; |
| 700 rect.Offset(-rect.width(), -rect.height()); | 702 rect.Offset(-rect.width(), -rect.height()); |
| 701 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 703 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 702 CreateCandidateQuadAt(resource_provider_.get(), | 704 CreateCandidateQuadAt(resource_provider_.get(), |
| 703 pass->shared_quad_state_list.back(), pass.get(), rect); | 705 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 704 pass->shared_quad_state_list.back() | 706 pass->shared_quad_state_list.back() |
| 705 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 707 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
| 706 | 708 |
| 707 OverlayCandidateList candidate_list; | 709 OverlayCandidateList candidate_list; |
| 708 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 710 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 709 &candidate_list, nullptr, | 711 &candidate_list, nullptr, |
| 710 &damage_rect_); | 712 &damage_rect_); |
| 711 ASSERT_EQ(1U, candidate_list.size()); | 713 ASSERT_EQ(1U, candidate_list.size()); |
| 712 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 714 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
| 713 } | 715 } |
| 714 | 716 |
| 715 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { | 717 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { |
| 716 gfx::Rect rect = kOverlayRect; | 718 gfx::Rect rect = kOverlayRect; |
| 717 rect.Offset(-rect.width(), 0); | 719 rect.Offset(-rect.width(), 0); |
| 718 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 720 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 719 CreateCandidateQuadAt(resource_provider_.get(), | 721 CreateCandidateQuadAt(resource_provider_.get(), |
| 720 pass->shared_quad_state_list.back(), pass.get(), rect); | 722 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 721 pass->shared_quad_state_list.back() | 723 pass->shared_quad_state_list.back() |
| 722 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 724 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
| 723 | 725 |
| 724 OverlayCandidateList candidate_list; | 726 OverlayCandidateList candidate_list; |
| 725 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 727 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 726 &candidate_list, nullptr, | 728 &candidate_list, nullptr, |
| 727 &damage_rect_); | 729 &damage_rect_); |
| 728 ASSERT_EQ(1U, candidate_list.size()); | 730 ASSERT_EQ(1U, candidate_list.size()); |
| 729 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 731 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 730 } | 732 } |
| 731 | 733 |
| 732 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 734 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 733 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 735 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 734 CreateOpaqueQuadAt(resource_provider_.get(), | 736 CreateOpaqueQuadAt(resource_provider_.get(), |
| 735 pass->shared_quad_state_list.back(), pass.get(), | 737 pass->shared_quad_state_list.back(), pass.get(), |
| 736 kOverlayTopLeftRect); | 738 kOverlayTopLeftRect); |
| 737 CreateCandidateQuadAt(resource_provider_.get(), | 739 CreateCandidateQuadAt(resource_provider_.get(), |
| 738 pass->shared_quad_state_list.back(), | 740 pass->shared_quad_state_list.back(), |
| 739 pass.get(), | 741 pass.get(), |
| 740 kOverlayBottomRightRect); | 742 kOverlayBottomRightRect); |
| 741 | 743 |
| 742 OverlayCandidateList candidate_list; | 744 OverlayCandidateList candidate_list; |
| 743 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 745 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 744 &candidate_list, nullptr, | 746 &candidate_list, nullptr, |
| 745 &damage_rect_); | 747 &damage_rect_); |
| 746 EXPECT_EQ(1U, candidate_list.size()); | 748 EXPECT_EQ(1U, candidate_list.size()); |
| 747 } | 749 } |
| 748 | 750 |
| 749 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 751 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 750 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 752 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 751 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 753 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 752 shared_state->opacity = 0.f; | 754 shared_state->opacity = 0.f; |
| 753 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 755 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 754 kOverlayBottomRightRect); | 756 kOverlayBottomRightRect); |
| 755 shared_state = pass->CreateAndAppendSharedQuadState(); | 757 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 756 shared_state->opacity = 1.f; | 758 shared_state->opacity = 1.f; |
| 757 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 759 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 758 kOverlayBottomRightRect); | 760 kOverlayBottomRightRect); |
| 759 | 761 |
| 760 OverlayCandidateList candidate_list; | 762 OverlayCandidateList candidate_list; |
| 761 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 763 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 762 &candidate_list, nullptr, | 764 &candidate_list, nullptr, |
| 763 &damage_rect_); | 765 &damage_rect_); |
| 764 EXPECT_EQ(1U, candidate_list.size()); | 766 EXPECT_EQ(1U, candidate_list.size()); |
| 765 } | 767 } |
| 766 | 768 |
| 767 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 769 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 768 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 770 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 769 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 771 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 770 SK_ColorTRANSPARENT, pass.get(), | 772 SK_ColorTRANSPARENT, pass.get(), |
| 771 kOverlayBottomRightRect); | 773 kOverlayBottomRightRect); |
| 772 CreateCandidateQuadAt(resource_provider_.get(), | 774 CreateCandidateQuadAt(resource_provider_.get(), |
| 773 pass->shared_quad_state_list.back(), pass.get(), | 775 pass->shared_quad_state_list.back(), pass.get(), |
| 774 kOverlayBottomRightRect); | 776 kOverlayBottomRightRect); |
| 775 | 777 |
| 776 OverlayCandidateList candidate_list; | 778 OverlayCandidateList candidate_list; |
| 777 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 779 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 778 &candidate_list, nullptr, | 780 &candidate_list, nullptr, |
| 779 &damage_rect_); | 781 &damage_rect_); |
| 780 EXPECT_EQ(1U, candidate_list.size()); | 782 EXPECT_EQ(1U, candidate_list.size()); |
| 781 } | 783 } |
| 782 | 784 |
| 783 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 785 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 784 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 786 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 785 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 787 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 786 shared_state->opacity = 0.5f; | 788 shared_state->opacity = 0.5f; |
| 787 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 789 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 788 kOverlayBottomRightRect); | 790 kOverlayBottomRightRect); |
| 789 shared_state = pass->CreateAndAppendSharedQuadState(); | 791 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 790 shared_state->opacity = 1.f; | 792 shared_state->opacity = 1.f; |
| 791 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 793 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 792 kOverlayBottomRightRect); | 794 kOverlayBottomRightRect); |
| 793 | 795 |
| 794 OverlayCandidateList candidate_list; | 796 OverlayCandidateList candidate_list; |
| 795 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 797 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 796 &candidate_list, nullptr, | 798 &candidate_list, nullptr, |
| 797 &damage_rect_); | 799 &damage_rect_); |
| 798 EXPECT_EQ(0U, candidate_list.size()); | 800 EXPECT_EQ(0U, candidate_list.size()); |
| 799 } | 801 } |
| 800 | 802 |
| 801 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { | 803 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
| 802 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 804 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 803 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 805 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 804 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), | 806 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
| 805 kOverlayBottomRightRect)->opaque_rect = | 807 kOverlayBottomRightRect)->opaque_rect = |
| 806 kOverlayBottomRightRect; | 808 kOverlayBottomRightRect; |
| 807 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 809 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 808 kOverlayBottomRightRect); | 810 kOverlayBottomRightRect); |
| 809 | 811 |
| 810 OverlayCandidateList candidate_list; | 812 OverlayCandidateList candidate_list; |
| 811 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 813 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 812 &candidate_list, nullptr, | 814 &candidate_list, nullptr, |
| 813 &damage_rect_); | 815 &damage_rect_); |
| 814 EXPECT_EQ(0U, candidate_list.size()); | 816 EXPECT_EQ(0U, candidate_list.size()); |
| 815 } | 817 } |
| 816 | 818 |
| 817 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 819 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
| 818 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 820 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 819 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 821 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 820 pass->shared_quad_state_list.back(), | 822 pass->shared_quad_state_list.back(), |
| 821 pass.get(), kSwapTransform); | 823 pass.get(), kSwapTransform); |
| 822 | 824 |
| 823 OverlayCandidateList candidate_list; | 825 OverlayCandidateList candidate_list; |
| 824 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 826 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 825 &candidate_list, nullptr, | 827 &candidate_list, nullptr, |
| 826 &damage_rect_); | 828 &damage_rect_); |
| 827 EXPECT_EQ(0U, candidate_list.size()); | 829 EXPECT_EQ(0U, candidate_list.size()); |
| 828 } | 830 } |
| 829 | 831 |
| 830 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { | 832 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { |
| 831 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 833 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 832 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 834 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 833 pass->shared_quad_state_list.back(), | 835 pass->shared_quad_state_list.back(), |
| 834 pass.get(), kXMirrorTransform); | 836 pass.get(), kXMirrorTransform); |
| 835 | 837 |
| 836 OverlayCandidateList candidate_list; | 838 OverlayCandidateList candidate_list; |
| 837 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 839 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 838 &candidate_list, nullptr, | 840 &candidate_list, nullptr, |
| 839 &damage_rect_); | 841 &damage_rect_); |
| 840 EXPECT_EQ(1U, candidate_list.size()); | 842 EXPECT_EQ(1U, candidate_list.size()); |
| 841 } | 843 } |
| 842 | 844 |
| 843 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { | 845 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { |
| 844 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 846 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 845 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 847 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 846 pass->shared_quad_state_list.back(), | 848 pass->shared_quad_state_list.back(), |
| 847 pass.get(), kBothMirrorTransform); | 849 pass.get(), kBothMirrorTransform); |
| 848 | 850 |
| 849 OverlayCandidateList candidate_list; | 851 OverlayCandidateList candidate_list; |
| 850 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 852 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 851 &candidate_list, nullptr, | 853 &candidate_list, nullptr, |
| 852 &damage_rect_); | 854 &damage_rect_); |
| 853 EXPECT_EQ(1U, candidate_list.size()); | 855 EXPECT_EQ(1U, candidate_list.size()); |
| 854 } | 856 } |
| 855 | 857 |
| 856 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { | 858 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { |
| 857 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 859 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 858 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 860 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 859 pass->shared_quad_state_list.back(), | 861 pass->shared_quad_state_list.back(), |
| 860 pass.get(), kNormalTransform); | 862 pass.get(), kNormalTransform); |
| 861 | 863 |
| 862 OverlayCandidateList candidate_list; | 864 OverlayCandidateList candidate_list; |
| 863 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 865 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 864 &candidate_list, nullptr, | 866 &candidate_list, nullptr, |
| 865 &damage_rect_); | 867 &damage_rect_); |
| 866 EXPECT_EQ(1U, candidate_list.size()); | 868 EXPECT_EQ(1U, candidate_list.size()); |
| 867 } | 869 } |
| 868 | 870 |
| 869 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 871 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
| 870 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 872 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 871 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 873 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 872 pass->shared_quad_state_list.back(), | 874 pass->shared_quad_state_list.back(), |
| 873 pass.get(), kYMirrorTransform); | 875 pass.get(), kYMirrorTransform); |
| 874 | 876 |
| 875 OverlayCandidateList candidate_list; | 877 OverlayCandidateList candidate_list; |
| 876 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 878 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 877 &candidate_list, nullptr, | 879 &candidate_list, nullptr, |
| 878 &damage_rect_); | 880 &damage_rect_); |
| 879 EXPECT_EQ(1U, candidate_list.size()); | 881 EXPECT_EQ(1U, candidate_list.size()); |
| 880 } | 882 } |
| 881 | 883 |
| 882 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 884 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 883 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 885 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 884 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 886 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 885 pass->shared_quad_state_list.back(), pass.get()); | 887 pass->shared_quad_state_list.back(), pass.get()); |
| 886 CreateCandidateQuadAt(resource_provider_.get(), | 888 CreateCandidateQuadAt(resource_provider_.get(), |
| 887 pass->shared_quad_state_list.back(), pass.get(), | 889 pass->shared_quad_state_list.back(), pass.get(), |
| 888 kOverlayBottomRightRect); | 890 kOverlayBottomRightRect); |
| 889 | 891 |
| 890 OverlayCandidateList candidate_list; | 892 OverlayCandidateList candidate_list; |
| 891 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 893 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 892 &candidate_list, nullptr, | 894 &candidate_list, nullptr, |
| 893 &damage_rect_); | 895 &damage_rect_); |
| 894 ASSERT_EQ(1U, candidate_list.size()); | 896 ASSERT_EQ(1U, candidate_list.size()); |
| 895 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 897 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 896 EXPECT_EQ(2U, pass->quad_list.size()); | 898 EXPECT_EQ(2U, pass->quad_list.size()); |
| 897 // The overlay quad should have changed to a SOLID_COLOR quad. | 899 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 898 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 900 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 899 } | 901 } |
| 900 | 902 |
| 901 TEST_F(UnderlayTest, AllowOnTop) { | 903 TEST_F(UnderlayTest, AllowOnTop) { |
| 902 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 904 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 903 CreateFullscreenCandidateQuad(resource_provider_.get(), | 905 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 904 pass->shared_quad_state_list.back(), | 906 pass->shared_quad_state_list.back(), |
| 905 pass.get()); | 907 pass.get()); |
| 906 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 908 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 907 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 909 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 908 pass->shared_quad_state_list.back(), pass.get()); | 910 pass->shared_quad_state_list.back(), pass.get()); |
| 909 | 911 |
| 910 OverlayCandidateList candidate_list; | 912 OverlayCandidateList candidate_list; |
| 911 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 913 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 912 &candidate_list, nullptr, | 914 &candidate_list, nullptr, |
| 913 &damage_rect_); | 915 &damage_rect_); |
| 914 ASSERT_EQ(1U, candidate_list.size()); | 916 ASSERT_EQ(1U, candidate_list.size()); |
| 915 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 917 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 916 // The overlay quad should have changed to a SOLID_COLOR quad. | 918 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 917 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 919 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
| 918 } | 920 } |
| 919 | 921 |
| 920 // The first time an underlay is scheduled its damage must not be subtracted. | 922 // The first time an underlay is scheduled its damage must not be subtracted. |
| 921 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { | 923 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { |
| 922 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 924 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 923 CreateFullscreenCandidateQuad(resource_provider_.get(), | 925 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 924 pass->shared_quad_state_list.back(), | 926 pass->shared_quad_state_list.back(), |
| 925 pass.get()); | 927 pass.get()); |
| 926 | 928 |
| 927 damage_rect_ = kOverlayRect; | 929 damage_rect_ = kOverlayRect; |
| 928 | 930 |
| 929 OverlayCandidateList candidate_list; | 931 OverlayCandidateList candidate_list; |
| 930 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 932 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 931 &candidate_list, nullptr, | 933 &candidate_list, nullptr, |
| 932 &damage_rect_); | 934 &damage_rect_); |
| 933 | 935 |
| 934 EXPECT_EQ(kOverlayRect, damage_rect_); | 936 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 935 } | 937 } |
| 936 | 938 |
| 937 // An identical underlay for two frames in a row means the damage can be | 939 // An identical underlay for two frames in a row means the damage can be |
| 938 // subtracted the second time. | 940 // subtracted the second time. |
| 939 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { | 941 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { |
| 940 for (int i = 0; i < 2; ++i) { | 942 for (int i = 0; i < 2; ++i) { |
| 941 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 943 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 942 CreateFullscreenCandidateQuad(resource_provider_.get(), | 944 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 943 pass->shared_quad_state_list.back(), | 945 pass->shared_quad_state_list.back(), |
| 944 pass.get()); | 946 pass.get()); |
| 945 | 947 |
| 946 damage_rect_ = kOverlayRect; | 948 damage_rect_ = kOverlayRect; |
| 947 | 949 |
| 948 // Add something behind it. | 950 // Add something behind it. |
| 949 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 951 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 950 pass->shared_quad_state_list.back(), pass.get()); | 952 pass->shared_quad_state_list.back(), pass.get()); |
| 951 | 953 |
| 952 OverlayCandidateList candidate_list; | 954 OverlayCandidateList candidate_list; |
| 953 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 955 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 954 &candidate_list, nullptr, | 956 &candidate_list, nullptr, |
| 955 &damage_rect_); | 957 &damage_rect_); |
| 956 } | 958 } |
| 957 | 959 |
| 958 // The second time the same overlay rect is scheduled it will be subtracted | 960 // The second time the same overlay rect is scheduled it will be subtracted |
| 959 // from the damage rect. | 961 // from the damage rect. |
| 960 EXPECT_TRUE(damage_rect_.IsEmpty()); | 962 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 961 } | 963 } |
| 962 | 964 |
| 963 // Underlay damage can only be subtracted if the previous frame's underlay | 965 // Underlay damage can only be subtracted if the previous frame's underlay |
| 964 // was the same rect. | 966 // was the same rect. |
| 965 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { | 967 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { |
| 966 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; | 968 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; |
| 967 for (int i = 0; i < 2; ++i) { | 969 for (int i = 0; i < 2; ++i) { |
| 968 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 970 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 969 | 971 |
| 970 CreateCandidateQuadAt(resource_provider_.get(), | 972 CreateCandidateQuadAt(resource_provider_.get(), |
| 971 pass->shared_quad_state_list.back(), pass.get(), | 973 pass->shared_quad_state_list.back(), pass.get(), |
| 972 overlay_rects[i]); | 974 overlay_rects[i]); |
| 973 | 975 |
| 974 damage_rect_ = overlay_rects[i]; | 976 damage_rect_ = overlay_rects[i]; |
| 975 | 977 |
| 976 OverlayCandidateList candidate_list; | 978 OverlayCandidateList candidate_list; |
| 977 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 979 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 978 &candidate_list, nullptr, | 980 &candidate_list, nullptr, |
| 979 &damage_rect_); | 981 &damage_rect_); |
| 980 | 982 |
| 981 EXPECT_EQ(overlay_rects[i], damage_rect_); | 983 EXPECT_EQ(overlay_rects[i], damage_rect_); |
| 982 } | 984 } |
| 983 } | 985 } |
| 984 | 986 |
| 985 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { | 987 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { |
| 986 for (int i = 0; i < 2; ++i) { | 988 for (int i = 0; i < 2; ++i) { |
| 987 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 989 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 988 // Add an overlapping quad above the candidate. | 990 // Add an overlapping quad above the candidate. |
| 989 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 991 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 990 pass->shared_quad_state_list.back(), pass.get()); | 992 pass->shared_quad_state_list.back(), pass.get()); |
| 991 CreateFullscreenCandidateQuad(resource_provider_.get(), | 993 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 992 pass->shared_quad_state_list.back(), | 994 pass->shared_quad_state_list.back(), |
| 993 pass.get()); | 995 pass.get()); |
| 994 | 996 |
| 995 damage_rect_ = kOverlayRect; | 997 damage_rect_ = kOverlayRect; |
| 996 | 998 |
| 997 OverlayCandidateList candidate_list; | 999 OverlayCandidateList candidate_list; |
| 998 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 1000 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 999 &candidate_list, nullptr, | 1001 &candidate_list, nullptr, |
| 1000 &damage_rect_); | 1002 &damage_rect_); |
| 1001 } | 1003 } |
| 1002 | 1004 |
| 1003 EXPECT_EQ(kOverlayRect, damage_rect_); | 1005 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1004 } | 1006 } |
| 1005 | 1007 |
| 1006 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { | 1008 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { |
| 1007 for (int i = 0; i < 2; ++i) { | 1009 for (int i = 0; i < 2; ++i) { |
| 1008 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1010 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1009 // Add a non-overlapping quad above the candidate. | 1011 // Add a non-overlapping quad above the candidate. |
| 1010 CreateOpaqueQuadAt(resource_provider_.get(), | 1012 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1011 pass->shared_quad_state_list.back(), pass.get(), | 1013 pass->shared_quad_state_list.back(), pass.get(), |
| 1012 kOverlayTopLeftRect); | 1014 kOverlayTopLeftRect); |
| 1013 CreateCandidateQuadAt(resource_provider_.get(), | 1015 CreateCandidateQuadAt(resource_provider_.get(), |
| 1014 pass->shared_quad_state_list.back(), pass.get(), | 1016 pass->shared_quad_state_list.back(), pass.get(), |
| 1015 kOverlayBottomRightRect); | 1017 kOverlayBottomRightRect); |
| 1016 | 1018 |
| 1017 damage_rect_ = kOverlayBottomRightRect; | 1019 damage_rect_ = kOverlayBottomRightRect; |
| 1018 | 1020 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1031 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); | 1033 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); |
| 1032 output_surface_plane.quad_rect_in_target_space = | 1034 output_surface_plane.quad_rect_in_target_space = |
| 1033 root_render_pass->output_rect; | 1035 root_render_pass->output_rect; |
| 1034 output_surface_plane.use_output_surface_for_resource = true; | 1036 output_surface_plane.use_output_surface_for_resource = true; |
| 1035 output_surface_plane.overlay_handled = true; | 1037 output_surface_plane.overlay_handled = true; |
| 1036 list.push_back(output_surface_plane); | 1038 list.push_back(output_surface_plane); |
| 1037 return list; | 1039 return list; |
| 1038 } | 1040 } |
| 1039 | 1041 |
| 1040 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { | 1042 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { |
| 1041 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1043 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1042 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1044 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1043 pass->shared_quad_state_list.back(), | 1045 pass->shared_quad_state_list.back(), |
| 1044 pass.get()); | 1046 pass.get()); |
| 1045 pass->shared_quad_state_list.back() | 1047 pass->shared_quad_state_list.back() |
| 1046 ->quad_to_target_transform.RotateAboutZAxis(45.f); | 1048 ->quad_to_target_transform.RotateAboutZAxis(45.f); |
| 1047 | 1049 |
| 1048 gfx::Rect damage_rect; | 1050 gfx::Rect damage_rect; |
| 1049 CALayerOverlayList ca_layer_list; | 1051 CALayerOverlayList ca_layer_list; |
| 1050 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1052 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1051 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 1053 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 1052 &overlay_list, &ca_layer_list, | 1054 &overlay_list, &ca_layer_list, |
| 1053 &damage_rect); | 1055 &damage_rect); |
| 1054 EXPECT_EQ(0U, pass->quad_list.size()); | 1056 EXPECT_EQ(0U, pass->quad_list.size()); |
| 1055 EXPECT_EQ(0U, overlay_list.size()); | 1057 EXPECT_EQ(0U, overlay_list.size()); |
| 1056 EXPECT_EQ(1U, ca_layer_list.size()); | 1058 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1057 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1059 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1058 } | 1060 } |
| 1059 | 1061 |
| 1060 TEST_F(CALayerOverlayTest, ThreeDTransform) { | 1062 TEST_F(CALayerOverlayTest, ThreeDTransform) { |
| 1061 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1063 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1062 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1064 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1063 pass->shared_quad_state_list.back(), | 1065 pass->shared_quad_state_list.back(), |
| 1064 pass.get()); | 1066 pass.get()); |
| 1065 pass->shared_quad_state_list.back() | 1067 pass->shared_quad_state_list.back() |
| 1066 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 1068 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 1067 | 1069 |
| 1068 gfx::Rect damage_rect; | 1070 gfx::Rect damage_rect; |
| 1069 CALayerOverlayList ca_layer_list; | 1071 CALayerOverlayList ca_layer_list; |
| 1070 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1072 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1071 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 1073 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 1072 &overlay_list, &ca_layer_list, | 1074 &overlay_list, &ca_layer_list, |
| 1073 &damage_rect); | 1075 &damage_rect); |
| 1074 EXPECT_EQ(0U, overlay_list.size()); | 1076 EXPECT_EQ(0U, overlay_list.size()); |
| 1075 EXPECT_EQ(1U, ca_layer_list.size()); | 1077 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1076 gfx::Transform expected_transform; | 1078 gfx::Transform expected_transform; |
| 1077 expected_transform.RotateAboutXAxis(45.f); | 1079 expected_transform.RotateAboutXAxis(45.f); |
| 1078 gfx::Transform actual_transform(ca_layer_list.back().transform); | 1080 gfx::Transform actual_transform(ca_layer_list.back().transform); |
| 1079 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); | 1081 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); |
| 1080 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1082 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1081 } | 1083 } |
| 1082 | 1084 |
| 1083 TEST_F(CALayerOverlayTest, AllowContainingClip) { | 1085 TEST_F(CALayerOverlayTest, AllowContainingClip) { |
| 1084 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1086 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1085 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1087 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1086 pass->shared_quad_state_list.back(), | 1088 pass->shared_quad_state_list.back(), |
| 1087 pass.get()); | 1089 pass.get()); |
| 1088 pass->shared_quad_state_list.back()->is_clipped = true; | 1090 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1089 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; | 1091 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; |
| 1090 | 1092 |
| 1091 gfx::Rect damage_rect; | 1093 gfx::Rect damage_rect; |
| 1092 CALayerOverlayList ca_layer_list; | 1094 CALayerOverlayList ca_layer_list; |
| 1093 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1095 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1094 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 1096 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 1095 &overlay_list, &ca_layer_list, | 1097 &overlay_list, &ca_layer_list, |
| 1096 &damage_rect); | 1098 &damage_rect); |
| 1097 EXPECT_EQ(0U, pass->quad_list.size()); | 1099 EXPECT_EQ(0U, pass->quad_list.size()); |
| 1098 EXPECT_EQ(0U, overlay_list.size()); | 1100 EXPECT_EQ(0U, overlay_list.size()); |
| 1099 EXPECT_EQ(1U, ca_layer_list.size()); | 1101 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1100 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1102 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1101 } | 1103 } |
| 1102 | 1104 |
| 1103 TEST_F(CALayerOverlayTest, NontrivialClip) { | 1105 TEST_F(CALayerOverlayTest, NontrivialClip) { |
| 1104 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1106 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1105 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1107 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1106 pass->shared_quad_state_list.back(), | 1108 pass->shared_quad_state_list.back(), |
| 1107 pass.get()); | 1109 pass.get()); |
| 1108 pass->shared_quad_state_list.back()->is_clipped = true; | 1110 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1109 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); | 1111 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); |
| 1110 | 1112 |
| 1111 gfx::Rect damage_rect; | 1113 gfx::Rect damage_rect; |
| 1112 CALayerOverlayList ca_layer_list; | 1114 CALayerOverlayList ca_layer_list; |
| 1113 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1115 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1114 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 1116 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 1115 &overlay_list, &ca_layer_list, | 1117 &overlay_list, &ca_layer_list, |
| 1116 &damage_rect); | 1118 &damage_rect); |
| 1117 EXPECT_EQ(0U, pass->quad_list.size()); | 1119 EXPECT_EQ(0U, pass->quad_list.size()); |
| 1118 EXPECT_EQ(0U, overlay_list.size()); | 1120 EXPECT_EQ(0U, overlay_list.size()); |
| 1119 EXPECT_EQ(1U, ca_layer_list.size()); | 1121 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1120 EXPECT_TRUE(ca_layer_list.back().is_clipped); | 1122 EXPECT_TRUE(ca_layer_list.back().is_clipped); |
| 1121 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), ca_layer_list.back().clip_rect); | 1123 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), ca_layer_list.back().clip_rect); |
| 1122 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1124 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1123 } | 1125 } |
| 1124 | 1126 |
| 1125 TEST_F(CALayerOverlayTest, SkipTransparent) { | 1127 TEST_F(CALayerOverlayTest, SkipTransparent) { |
| 1126 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1128 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1127 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1129 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1128 pass->shared_quad_state_list.back(), | 1130 pass->shared_quad_state_list.back(), |
| 1129 pass.get()); | 1131 pass.get()); |
| 1130 pass->shared_quad_state_list.back()->opacity = 0; | 1132 pass->shared_quad_state_list.back()->opacity = 0; |
| 1131 | 1133 |
| 1132 gfx::Rect damage_rect; | 1134 gfx::Rect damage_rect; |
| 1133 CALayerOverlayList ca_layer_list; | 1135 CALayerOverlayList ca_layer_list; |
| 1134 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1136 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1135 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), | 1137 overlay_processor_->ProcessForOverlays(resource_provider_.get(), pass.get(), |
| 1136 &overlay_list, &ca_layer_list, | 1138 &overlay_list, &ca_layer_list, |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1208 FakeResourceProvider::Create(output_surface_.get(), nullptr); | 1210 FakeResourceProvider::Create(output_surface_.get(), nullptr); |
| 1209 | 1211 |
| 1210 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind( | 1212 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind( |
| 1211 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_))); | 1213 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_))); |
| 1212 } | 1214 } |
| 1213 | 1215 |
| 1214 void Init(bool use_validator) { | 1216 void Init(bool use_validator) { |
| 1215 if (use_validator) | 1217 if (use_validator) |
| 1216 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); | 1218 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 1217 | 1219 |
| 1218 renderer_ = | 1220 renderer_ = base::WrapUnique(new OverlayInfoRendererGL( |
| 1219 make_scoped_ptr(new OverlayInfoRendererGL(&renderer_client_, | 1221 &renderer_client_, &settings_, output_surface_.get(), |
| 1220 &settings_, | 1222 resource_provider_.get())); |
| 1221 output_surface_.get(), | |
| 1222 resource_provider_.get())); | |
| 1223 } | 1223 } |
| 1224 | 1224 |
| 1225 void SwapBuffers() { | 1225 void SwapBuffers() { |
| 1226 renderer_->SwapBuffers(CompositorFrameMetadata()); | 1226 renderer_->SwapBuffers(CompositorFrameMetadata()); |
| 1227 output_surface_->OnSwapBuffersComplete(); | 1227 output_surface_->OnSwapBuffersComplete(); |
| 1228 renderer_->SwapBuffersComplete(); | 1228 renderer_->SwapBuffersComplete(); |
| 1229 } | 1229 } |
| 1230 void SwapBuffersWithoutComplete() { | 1230 void SwapBuffersWithoutComplete() { |
| 1231 renderer_->SwapBuffers(CompositorFrameMetadata()); | 1231 renderer_->SwapBuffers(CompositorFrameMetadata()); |
| 1232 } | 1232 } |
| 1233 void SwapBuffersComplete() { | 1233 void SwapBuffersComplete() { |
| 1234 output_surface_->OnSwapBuffersComplete(); | 1234 output_surface_->OnSwapBuffersComplete(); |
| 1235 renderer_->SwapBuffersComplete(); | 1235 renderer_->SwapBuffersComplete(); |
| 1236 } | 1236 } |
| 1237 | 1237 |
| 1238 RendererSettings settings_; | 1238 RendererSettings settings_; |
| 1239 FakeOutputSurfaceClient output_surface_client_; | 1239 FakeOutputSurfaceClient output_surface_client_; |
| 1240 scoped_ptr<OverlayOutputSurface> output_surface_; | 1240 std::unique_ptr<OverlayOutputSurface> output_surface_; |
| 1241 FakeRendererClient renderer_client_; | 1241 FakeRendererClient renderer_client_; |
| 1242 scoped_ptr<ResourceProvider> resource_provider_; | 1242 std::unique_ptr<ResourceProvider> resource_provider_; |
| 1243 scoped_ptr<OverlayInfoRendererGL> renderer_; | 1243 std::unique_ptr<OverlayInfoRendererGL> renderer_; |
| 1244 scoped_refptr<TestContextProvider> provider_; | 1244 scoped_refptr<TestContextProvider> provider_; |
| 1245 MockOverlayScheduler scheduler_; | 1245 MockOverlayScheduler scheduler_; |
| 1246 }; | 1246 }; |
| 1247 | 1247 |
| 1248 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { | 1248 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { |
| 1249 bool use_validator = true; | 1249 bool use_validator = true; |
| 1250 Init(use_validator); | 1250 Init(use_validator); |
| 1251 renderer_->set_expect_overlays(true); | 1251 renderer_->set_expect_overlays(true); |
| 1252 gfx::Rect viewport_rect(16, 16); | 1252 gfx::Rect viewport_rect(16, 16); |
| 1253 | 1253 |
| 1254 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1254 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1255 | 1255 |
| 1256 CreateCandidateQuadAt(resource_provider_.get(), | 1256 CreateCandidateQuadAt(resource_provider_.get(), |
| 1257 pass->shared_quad_state_list.back(), pass.get(), | 1257 pass->shared_quad_state_list.back(), pass.get(), |
| 1258 kOverlayBottomRightRect); | 1258 kOverlayBottomRightRect); |
| 1259 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1259 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1260 pass->shared_quad_state_list.back(), pass.get()); | 1260 pass->shared_quad_state_list.back(), pass.get()); |
| 1261 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1261 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1262 pass->shared_quad_state_list.back(), pass.get()); | 1262 pass->shared_quad_state_list.back(), pass.get()); |
| 1263 | 1263 |
| 1264 RenderPassList pass_list; | 1264 RenderPassList pass_list; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1283 Mock::VerifyAndClearExpectations(renderer_.get()); | 1283 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1284 Mock::VerifyAndClearExpectations(&scheduler_); | 1284 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1285 } | 1285 } |
| 1286 | 1286 |
| 1287 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { | 1287 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { |
| 1288 bool use_validator = true; | 1288 bool use_validator = true; |
| 1289 Init(use_validator); | 1289 Init(use_validator); |
| 1290 renderer_->set_expect_overlays(true); | 1290 renderer_->set_expect_overlays(true); |
| 1291 gfx::Rect viewport_rect(16, 16); | 1291 gfx::Rect viewport_rect(16, 16); |
| 1292 | 1292 |
| 1293 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1293 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1294 | 1294 |
| 1295 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1295 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1296 pass->shared_quad_state_list.back(), pass.get()); | 1296 pass->shared_quad_state_list.back(), pass.get()); |
| 1297 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1297 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1298 pass->shared_quad_state_list.back(), pass.get()); | 1298 pass->shared_quad_state_list.back(), pass.get()); |
| 1299 | 1299 |
| 1300 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1300 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1301 pass->shared_quad_state_list.back(), | 1301 pass->shared_quad_state_list.back(), |
| 1302 pass.get()); | 1302 pass.get()); |
| 1303 | 1303 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1323 Mock::VerifyAndClearExpectations(renderer_.get()); | 1323 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1324 Mock::VerifyAndClearExpectations(&scheduler_); | 1324 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1325 } | 1325 } |
| 1326 | 1326 |
| 1327 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { | 1327 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { |
| 1328 bool use_validator = false; | 1328 bool use_validator = false; |
| 1329 Init(use_validator); | 1329 Init(use_validator); |
| 1330 renderer_->set_expect_overlays(false); | 1330 renderer_->set_expect_overlays(false); |
| 1331 gfx::Rect viewport_rect(16, 16); | 1331 gfx::Rect viewport_rect(16, 16); |
| 1332 | 1332 |
| 1333 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1333 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1334 | 1334 |
| 1335 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1335 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1336 pass->shared_quad_state_list.back(), | 1336 pass->shared_quad_state_list.back(), |
| 1337 pass.get()); | 1337 pass.get()); |
| 1338 | 1338 |
| 1339 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1339 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1340 pass->shared_quad_state_list.back(), pass.get()); | 1340 pass->shared_quad_state_list.back(), pass.get()); |
| 1341 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1341 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1342 pass->shared_quad_state_list.back(), pass.get()); | 1342 pass->shared_quad_state_list.back(), pass.get()); |
| 1343 | 1343 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1357 | 1357 |
| 1358 // GLRenderer skips drawing occluded quads when partial swap is enabled. | 1358 // GLRenderer skips drawing occluded quads when partial swap is enabled. |
| 1359 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { | 1359 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { |
| 1360 provider_->TestContext3d()->set_have_post_sub_buffer(true); | 1360 provider_->TestContext3d()->set_have_post_sub_buffer(true); |
| 1361 settings_.partial_swap_enabled = true; | 1361 settings_.partial_swap_enabled = true; |
| 1362 bool use_validator = true; | 1362 bool use_validator = true; |
| 1363 Init(use_validator); | 1363 Init(use_validator); |
| 1364 renderer_->set_expect_overlays(true); | 1364 renderer_->set_expect_overlays(true); |
| 1365 gfx::Rect viewport_rect(16, 16); | 1365 gfx::Rect viewport_rect(16, 16); |
| 1366 | 1366 |
| 1367 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1367 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1368 | 1368 |
| 1369 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1369 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1370 pass->shared_quad_state_list.back(), | 1370 pass->shared_quad_state_list.back(), |
| 1371 pass.get()); | 1371 pass.get()); |
| 1372 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1372 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1373 pass->shared_quad_state_list.back(), pass.get()); | 1373 pass->shared_quad_state_list.back(), pass.get()); |
| 1374 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1374 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1375 pass->shared_quad_state_list.back(), pass.get()); | 1375 pass->shared_quad_state_list.back(), pass.get()); |
| 1376 | 1376 |
| 1377 RenderPassList pass_list; | 1377 RenderPassList pass_list; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1388 } | 1388 } |
| 1389 | 1389 |
| 1390 // GLRenderer skips drawing occluded quads when empty swap is enabled. | 1390 // GLRenderer skips drawing occluded quads when empty swap is enabled. |
| 1391 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { | 1391 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { |
| 1392 provider_->TestContext3d()->set_have_commit_overlay_planes(true); | 1392 provider_->TestContext3d()->set_have_commit_overlay_planes(true); |
| 1393 bool use_validator = true; | 1393 bool use_validator = true; |
| 1394 Init(use_validator); | 1394 Init(use_validator); |
| 1395 renderer_->set_expect_overlays(true); | 1395 renderer_->set_expect_overlays(true); |
| 1396 gfx::Rect viewport_rect(16, 16); | 1396 gfx::Rect viewport_rect(16, 16); |
| 1397 | 1397 |
| 1398 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1398 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1399 | 1399 |
| 1400 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1400 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1401 pass->shared_quad_state_list.back(), | 1401 pass->shared_quad_state_list.back(), |
| 1402 pass.get()); | 1402 pass.get()); |
| 1403 | 1403 |
| 1404 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1404 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1405 pass->shared_quad_state_list.back(), pass.get()); | 1405 pass->shared_quad_state_list.back(), pass.get()); |
| 1406 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1406 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1407 pass->shared_quad_state_list.back(), pass.get()); | 1407 pass->shared_quad_state_list.back(), pass.get()); |
| 1408 | 1408 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1424 Init(use_validator); | 1424 Init(use_validator); |
| 1425 renderer_->set_expect_overlays(true); | 1425 renderer_->set_expect_overlays(true); |
| 1426 | 1426 |
| 1427 ResourceId resource1 = | 1427 ResourceId resource1 = |
| 1428 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); | 1428 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1429 ResourceId resource2 = | 1429 ResourceId resource2 = |
| 1430 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); | 1430 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1431 ResourceId resource3 = | 1431 ResourceId resource3 = |
| 1432 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); | 1432 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1433 | 1433 |
| 1434 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1434 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1435 RenderPassList pass_list; | 1435 RenderPassList pass_list; |
| 1436 pass_list.push_back(std::move(pass)); | 1436 pass_list.push_back(std::move(pass)); |
| 1437 | 1437 |
| 1438 DirectRenderer::DrawingFrame frame1; | 1438 DirectRenderer::DrawingFrame frame1; |
| 1439 frame1.render_passes_in_draw_order = &pass_list; | 1439 frame1.render_passes_in_draw_order = &pass_list; |
| 1440 frame1.overlay_list.resize(2); | 1440 frame1.overlay_list.resize(2); |
| 1441 frame1.overlay_list.front().use_output_surface_for_resource = true; | 1441 frame1.overlay_list.front().use_output_surface_for_resource = true; |
| 1442 OverlayCandidate& overlay1 = frame1.overlay_list.back(); | 1442 OverlayCandidate& overlay1 = frame1.overlay_list.back(); |
| 1443 overlay1.resource_id = resource1; | 1443 overlay1.resource_id = resource1; |
| 1444 overlay1.plane_z_order = 1; | 1444 overlay1.plane_z_order = 1; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1547 Init(use_validator); | 1547 Init(use_validator); |
| 1548 renderer_->set_expect_overlays(true); | 1548 renderer_->set_expect_overlays(true); |
| 1549 | 1549 |
| 1550 ResourceId resource1 = | 1550 ResourceId resource1 = |
| 1551 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); | 1551 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1552 ResourceId resource2 = | 1552 ResourceId resource2 = |
| 1553 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); | 1553 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1554 ResourceId resource3 = | 1554 ResourceId resource3 = |
| 1555 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); | 1555 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1556 | 1556 |
| 1557 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1557 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1558 RenderPassList pass_list; | 1558 RenderPassList pass_list; |
| 1559 pass_list.push_back(std::move(pass)); | 1559 pass_list.push_back(std::move(pass)); |
| 1560 | 1560 |
| 1561 DirectRenderer::DrawingFrame frame1; | 1561 DirectRenderer::DrawingFrame frame1; |
| 1562 frame1.render_passes_in_draw_order = &pass_list; | 1562 frame1.render_passes_in_draw_order = &pass_list; |
| 1563 frame1.overlay_list.resize(2); | 1563 frame1.overlay_list.resize(2); |
| 1564 frame1.overlay_list.front().use_output_surface_for_resource = true; | 1564 frame1.overlay_list.front().use_output_surface_for_resource = true; |
| 1565 OverlayCandidate& overlay1 = frame1.overlay_list.back(); | 1565 OverlayCandidate& overlay1 = frame1.overlay_list.back(); |
| 1566 overlay1.resource_id = resource1; | 1566 overlay1.resource_id = resource1; |
| 1567 overlay1.plane_z_order = 1; | 1567 overlay1.plane_z_order = 1; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1630 | 1630 |
| 1631 // This completion corresponds to the third frame. | 1631 // This completion corresponds to the third frame. |
| 1632 SwapBuffersComplete(); | 1632 SwapBuffersComplete(); |
| 1633 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1633 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1634 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1634 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1635 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource3)); | 1635 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource3)); |
| 1636 } | 1636 } |
| 1637 | 1637 |
| 1638 } // namespace | 1638 } // namespace |
| 1639 } // namespace cc | 1639 } // namespace cc |
| OLD | NEW |