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 |