| 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 "cc/base/region.h" | 5 #include "cc/base/region.h" |
| 6 #include "cc/base/scoped_ptr_vector.h" | 6 #include "cc/base/scoped_ptr_vector.h" |
| 7 #include "cc/output/compositor_frame_metadata.h" | 7 #include "cc/output/compositor_frame_metadata.h" |
| 8 #include "cc/output/gl_renderer.h" | 8 #include "cc/output/gl_renderer.h" |
| 9 #include "cc/output/output_surface.h" | 9 #include "cc/output/output_surface.h" |
| 10 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 output_rect, | 196 output_rect, |
| 197 output_rect, | 197 output_rect, |
| 198 gfx::Transform(), | 198 gfx::Transform(), |
| 199 has_transparent_background); | 199 has_transparent_background); |
| 200 | 200 |
| 201 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 201 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 202 shared_state->opacity = 1.f; | 202 shared_state->opacity = 1.f; |
| 203 return pass.Pass(); | 203 return pass.Pass(); |
| 204 } | 204 } |
| 205 | 205 |
| 206 ResourceId CreateResource(ResourceProvider* resource_provider) { | 206 ResourceId CreateResource(ResourceProvider* resource_provider, |
| 207 const gfx::Size& size, |
| 208 bool bound_to_gl_image) { |
| 207 unsigned sync_point = 0; | 209 unsigned sync_point = 0; |
| 208 TextureMailbox mailbox = | 210 TextureMailbox mailbox = |
| 209 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); | 211 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point, size, |
| 212 bound_to_gl_image); |
| 210 scoped_ptr<SingleReleaseCallbackImpl> release_callback = | 213 scoped_ptr<SingleReleaseCallbackImpl> release_callback = |
| 211 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 214 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 212 | 215 |
| 213 return resource_provider->CreateResourceFromTextureMailbox( | 216 return resource_provider->CreateResourceFromTextureMailbox( |
| 214 mailbox, release_callback.Pass()); | 217 mailbox, release_callback.Pass()); |
| 215 } | 218 } |
| 216 | 219 |
| 217 SolidColorDrawQuad* CreateSolidColorQuadAt( | 220 SolidColorDrawQuad* CreateSolidColorQuadAt( |
| 218 const SharedQuadState* shared_quad_state, | 221 const SharedQuadState* shared_quad_state, |
| 219 SkColor color, | 222 SkColor color, |
| 220 RenderPass* render_pass, | 223 RenderPass* render_pass, |
| 221 const gfx::Rect& rect) { | 224 const gfx::Rect& rect) { |
| 222 SolidColorDrawQuad* quad = | 225 SolidColorDrawQuad* quad = |
| 223 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 226 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 224 quad->SetNew(shared_quad_state, rect, rect, color, false); | 227 quad->SetNew(shared_quad_state, rect, rect, color, false); |
| 225 return quad; | 228 return quad; |
| 226 } | 229 } |
| 227 | 230 |
| 228 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, | 231 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, |
| 229 const SharedQuadState* shared_quad_state, | 232 const SharedQuadState* shared_quad_state, |
| 230 RenderPass* render_pass, | 233 RenderPass* render_pass, |
| 231 const gfx::Rect& rect) { | 234 const gfx::Rect& rect) { |
| 232 ResourceId resource_id = CreateResource(resource_provider); | |
| 233 bool premultiplied_alpha = false; | 235 bool premultiplied_alpha = false; |
| 234 bool flipped = false; | 236 bool flipped = false; |
| 235 bool nearest_neighbor = false; | 237 bool nearest_neighbor = false; |
| 236 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 238 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 237 gfx::Size resource_size_in_pixels = gfx::Size(64, 64); | 239 gfx::Size resource_size_in_pixels = gfx::Size(64, 64); |
| 238 bool allow_overlay = true; | 240 bool allow_overlay = true; |
| 241 ResourceId resource_id = |
| 242 CreateResource(resource_provider, resource_size_in_pixels, allow_overlay); |
| 239 | 243 |
| 240 TextureDrawQuad* overlay_quad = | 244 TextureDrawQuad* overlay_quad = |
| 241 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 245 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 242 overlay_quad->SetNew(shared_quad_state, | 246 overlay_quad->SetNew(shared_quad_state, |
| 243 rect, | 247 rect, |
| 244 rect, | 248 rect, |
| 245 rect, | 249 rect, |
| 246 resource_id, | 250 resource_id, |
| 247 premultiplied_alpha, | 251 premultiplied_alpha, |
| 248 kUVTopLeft, | 252 kUVTopLeft, |
| 249 kUVBottomRight, | 253 kUVBottomRight, |
| 250 SK_ColorTRANSPARENT, | 254 SK_ColorTRANSPARENT, |
| 251 vertex_opacity, | 255 vertex_opacity, |
| 252 flipped, | 256 flipped, |
| 253 nearest_neighbor); | 257 nearest_neighbor); |
| 254 overlay_quad->set_allow_overlay(allow_overlay); | |
| 255 overlay_quad->set_resource_size_in_pixels(resource_size_in_pixels); | 258 overlay_quad->set_resource_size_in_pixels(resource_size_in_pixels); |
| 256 | 259 |
| 257 return overlay_quad; | 260 return overlay_quad; |
| 258 } | 261 } |
| 259 | 262 |
| 260 StreamVideoDrawQuad* CreateCandidateVideoQuadAt( | 263 StreamVideoDrawQuad* CreateCandidateVideoQuadAt( |
| 261 ResourceProvider* resource_provider, | 264 ResourceProvider* resource_provider, |
| 262 const SharedQuadState* shared_quad_state, | 265 const SharedQuadState* shared_quad_state, |
| 263 RenderPass* render_pass, | 266 RenderPass* render_pass, |
| 264 const gfx::Rect& rect, | 267 const gfx::Rect& rect, |
| 265 const gfx::Transform& transform) { | 268 const gfx::Transform& transform) { |
| 266 ResourceId resource_id = CreateResource(resource_provider); | |
| 267 gfx::Size resource_size_in_pixels = gfx::Size(64, 64); | 269 gfx::Size resource_size_in_pixels = gfx::Size(64, 64); |
| 268 bool allow_overlay = true; | 270 bool allow_overlay = true; |
| 271 ResourceId resource_id = |
| 272 CreateResource(resource_provider, resource_size_in_pixels, allow_overlay); |
| 269 | 273 |
| 270 StreamVideoDrawQuad* overlay_quad = | 274 StreamVideoDrawQuad* overlay_quad = |
| 271 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); | 275 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); |
| 272 overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id, | 276 overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id, |
| 273 resource_size_in_pixels, allow_overlay, transform); | 277 resource_size_in_pixels, transform); |
| 274 | 278 |
| 275 return overlay_quad; | 279 return overlay_quad; |
| 276 } | 280 } |
| 277 | 281 |
| 278 TextureDrawQuad* CreateFullscreenCandidateQuad( | 282 TextureDrawQuad* CreateFullscreenCandidateQuad( |
| 279 ResourceProvider* resource_provider, | 283 ResourceProvider* resource_provider, |
| 280 const SharedQuadState* shared_quad_state, | 284 const SharedQuadState* shared_quad_state, |
| 281 RenderPass* render_pass) { | 285 RenderPass* render_pass) { |
| 282 return CreateCandidateQuadAt( | 286 return CreateCandidateQuadAt( |
| 283 resource_provider, shared_quad_state, render_pass, kOverlayRect); | 287 resource_provider, shared_quad_state, render_pass, kOverlayRect); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 411 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 408 pass->shared_quad_state_list.back(), pass.get()); | 412 pass->shared_quad_state_list.back(), pass.get()); |
| 409 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 413 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 410 pass->shared_quad_state_list.back(), pass.get()); | 414 pass->shared_quad_state_list.back(), pass.get()); |
| 411 | 415 |
| 412 RenderPassList pass_list; | 416 RenderPassList pass_list; |
| 413 pass_list.push_back(pass.Pass()); | 417 pass_list.push_back(pass.Pass()); |
| 414 | 418 |
| 415 // Check for potential candidates. | 419 // Check for potential candidates. |
| 416 OverlayCandidateList candidate_list; | 420 OverlayCandidateList candidate_list; |
| 417 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 421 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 422 &candidate_list); |
| 418 | 423 |
| 419 ASSERT_EQ(1U, pass_list.size()); | 424 ASSERT_EQ(1U, pass_list.size()); |
| 420 ASSERT_EQ(1U, candidate_list.size()); | 425 ASSERT_EQ(1U, candidate_list.size()); |
| 421 | 426 |
| 422 RenderPass* main_pass = pass_list.back(); | 427 RenderPass* main_pass = pass_list.back(); |
| 423 // Check that the quad is gone. | 428 // Check that the quad is gone. |
| 424 EXPECT_EQ(2U, main_pass->quad_list.size()); | 429 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 425 const QuadList& quad_list = main_pass->quad_list; | 430 const QuadList& quad_list = main_pass->quad_list; |
| 426 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 431 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 427 it != quad_list.BackToFrontEnd(); ++it) { | 432 it != quad_list.BackToFrontEnd(); ++it) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 448 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 453 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 449 pass->shared_quad_state_list.back(), pass.get()); | 454 pass->shared_quad_state_list.back(), pass.get()); |
| 450 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 455 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 451 pass->shared_quad_state_list.back(), pass.get()); | 456 pass->shared_quad_state_list.back(), pass.get()); |
| 452 | 457 |
| 453 RenderPassList pass_list; | 458 RenderPassList pass_list; |
| 454 pass_list.push_back(pass.Pass()); | 459 pass_list.push_back(pass.Pass()); |
| 455 | 460 |
| 456 // Check for potential candidates. | 461 // Check for potential candidates. |
| 457 OverlayCandidateList candidate_list; | 462 OverlayCandidateList candidate_list; |
| 458 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 463 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 464 &candidate_list); |
| 459 | 465 |
| 460 // Ensure that the display and uv rects have cropping applied to them. | 466 // Ensure that the display and uv rects have cropping applied to them. |
| 461 ASSERT_EQ(1U, pass_list.size()); | 467 ASSERT_EQ(1U, pass_list.size()); |
| 462 ASSERT_EQ(1U, candidate_list.size()); | 468 ASSERT_EQ(1U, candidate_list.size()); |
| 463 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); | 469 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); |
| 464 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect); | 470 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect); |
| 465 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect); | 471 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect); |
| 466 } | 472 } |
| 467 | 473 |
| 468 TEST_F(SandwichTest, SuccessfulTwoOverlays) { | 474 TEST_F(SandwichTest, SuccessfulTwoOverlays) { |
| 469 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 475 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 470 | 476 |
| 471 // Add two non-overlapping candidates. | 477 // Add two non-overlapping candidates. |
| 472 CreateCandidateQuadAt(resource_provider_.get(), | 478 CreateCandidateQuadAt(resource_provider_.get(), |
| 473 pass->shared_quad_state_list.back(), pass.get(), | 479 pass->shared_quad_state_list.back(), pass.get(), |
| 474 kOverlayTopLeftRect); | 480 kOverlayTopLeftRect); |
| 475 CreateCandidateQuadAt(resource_provider_.get(), | 481 CreateCandidateQuadAt(resource_provider_.get(), |
| 476 pass->shared_quad_state_list.back(), pass.get(), | 482 pass->shared_quad_state_list.back(), pass.get(), |
| 477 kOverlayBottomRightRect); | 483 kOverlayBottomRightRect); |
| 478 | 484 |
| 479 // Add something behind it. | 485 // Add something behind it. |
| 480 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 486 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 481 pass->shared_quad_state_list.back(), pass.get()); | 487 pass->shared_quad_state_list.back(), pass.get()); |
| 482 | 488 |
| 483 RenderPassList pass_list; | 489 RenderPassList pass_list; |
| 484 pass_list.push_back(pass.Pass()); | 490 pass_list.push_back(pass.Pass()); |
| 485 OverlayCandidateList candidate_list; | 491 OverlayCandidateList candidate_list; |
| 486 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 492 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 493 &candidate_list); |
| 487 | 494 |
| 488 // Both candidates should become overlays. | 495 // Both candidates should become overlays. |
| 489 EXPECT_EQ(1u, pass_list.size()); | 496 EXPECT_EQ(1u, pass_list.size()); |
| 490 EXPECT_EQ(2u, candidate_list.size()); | 497 EXPECT_EQ(2u, candidate_list.size()); |
| 491 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); | 498 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); |
| 492 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), | 499 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), |
| 493 candidate_list[1].display_rect); | 500 candidate_list[1].display_rect); |
| 494 | 501 |
| 495 // The overlay quads should be gone. | 502 // The overlay quads should be gone. |
| 496 const QuadList& quad_list = pass_list.back()->quad_list; | 503 const QuadList& quad_list = pass_list.back()->quad_list; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 509 pass->shared_quad_state_list.back(), pass.get(), | 516 pass->shared_quad_state_list.back(), pass.get(), |
| 510 kOverlayRect); | 517 kOverlayRect); |
| 511 | 518 |
| 512 // Add something behind it. | 519 // Add something behind it. |
| 513 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 520 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 514 pass->shared_quad_state_list.back(), pass.get()); | 521 pass->shared_quad_state_list.back(), pass.get()); |
| 515 | 522 |
| 516 RenderPassList pass_list; | 523 RenderPassList pass_list; |
| 517 pass_list.push_back(pass.Pass()); | 524 pass_list.push_back(pass.Pass()); |
| 518 OverlayCandidateList candidate_list; | 525 OverlayCandidateList candidate_list; |
| 519 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 526 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 527 &candidate_list); |
| 520 | 528 |
| 521 // Only one of the candidates should become an overlay. | 529 // Only one of the candidates should become an overlay. |
| 522 EXPECT_EQ(1u, pass_list.size()); | 530 EXPECT_EQ(1u, pass_list.size()); |
| 523 EXPECT_EQ(1u, candidate_list.size()); | 531 EXPECT_EQ(1u, candidate_list.size()); |
| 524 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); | 532 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); |
| 525 | 533 |
| 526 // One of the overlay quads should be gone. | 534 // One of the overlay quads should be gone. |
| 527 const QuadList& quad_list = pass_list.back()->quad_list; | 535 const QuadList& quad_list = pass_list.back()->quad_list; |
| 528 EXPECT_EQ(2u, quad_list.size()); | 536 EXPECT_EQ(2u, quad_list.size()); |
| 529 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); | 537 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 543 ->resource_id(); | 551 ->resource_id(); |
| 544 CreateOpaqueQuadAt(resource_provider_.get(), | 552 CreateOpaqueQuadAt(resource_provider_.get(), |
| 545 pass->shared_quad_state_list.back(), pass.get(), | 553 pass->shared_quad_state_list.back(), pass.get(), |
| 546 gfx::Rect(kDisplaySize)); | 554 gfx::Rect(kDisplaySize)); |
| 547 | 555 |
| 548 RenderPassList pass_list; | 556 RenderPassList pass_list; |
| 549 pass_list.push_back(pass.Pass()); | 557 pass_list.push_back(pass.Pass()); |
| 550 | 558 |
| 551 // Check for potential candidates. | 559 // Check for potential candidates. |
| 552 OverlayCandidateList candidate_list; | 560 OverlayCandidateList candidate_list; |
| 553 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 561 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 562 &candidate_list); |
| 554 | 563 |
| 555 ASSERT_EQ(1U, pass_list.size()); | 564 ASSERT_EQ(1U, pass_list.size()); |
| 556 ASSERT_EQ(2U, candidate_list.size()); | 565 ASSERT_EQ(2U, candidate_list.size()); |
| 557 | 566 |
| 558 RenderPass* main_pass = pass_list.back(); | 567 RenderPass* main_pass = pass_list.back(); |
| 559 // Check that the quad is gone. | 568 // Check that the quad is gone. |
| 560 EXPECT_EQ(3U, main_pass->quad_list.size()); | 569 EXPECT_EQ(3U, main_pass->quad_list.size()); |
| 561 const QuadList& quad_list = main_pass->quad_list; | 570 const QuadList& quad_list = main_pass->quad_list; |
| 562 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 571 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 563 it != quad_list.BackToFrontEnd(); ++it) { | 572 it != quad_list.BackToFrontEnd(); ++it) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 pass->shared_quad_state_list.back(), pass.get(), | 607 pass->shared_quad_state_list.back(), pass.get(), |
| 599 gfx::Rect(kDisplaySize)); | 608 gfx::Rect(kDisplaySize)); |
| 600 | 609 |
| 601 RenderPassList pass_list; | 610 RenderPassList pass_list; |
| 602 pass_list.push_back(pass.Pass()); | 611 pass_list.push_back(pass.Pass()); |
| 603 | 612 |
| 604 // Run the overlay strategy on that input. | 613 // Run the overlay strategy on that input. |
| 605 RenderPass* main_pass = pass_list.back(); | 614 RenderPass* main_pass = pass_list.back(); |
| 606 OverlayCandidateList candidate_list; | 615 OverlayCandidateList candidate_list; |
| 607 EXPECT_EQ(4U, main_pass->quad_list.size()); | 616 EXPECT_EQ(4U, main_pass->quad_list.size()); |
| 608 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 617 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 618 &candidate_list); |
| 609 ASSERT_EQ(1U, pass_list.size()); | 619 ASSERT_EQ(1U, pass_list.size()); |
| 610 ASSERT_EQ(3U, candidate_list.size()); | 620 ASSERT_EQ(3U, candidate_list.size()); |
| 611 | 621 |
| 612 // Check that the candidate quad is gone and that we now have two transparent | 622 // Check that the candidate quad is gone and that we now have two transparent |
| 613 // quads for the same region that was covered on the overlay. | 623 // quads for the same region that was covered on the overlay. |
| 614 EXPECT_EQ(5U, main_pass->quad_list.size()); | 624 EXPECT_EQ(5U, main_pass->quad_list.size()); |
| 615 const QuadList& quad_list = main_pass->quad_list; | 625 const QuadList& quad_list = main_pass->quad_list; |
| 616 Region transparent_quad_region; | 626 Region transparent_quad_region; |
| 617 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 627 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 618 it != quad_list.BackToFrontEnd(); ++it) { | 628 it != quad_list.BackToFrontEnd(); ++it) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 649 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 659 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 650 pass->shared_quad_state_list.back(), pass.get()); | 660 pass->shared_quad_state_list.back(), pass.get()); |
| 651 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 661 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 652 pass->shared_quad_state_list.back(), pass.get()); | 662 pass->shared_quad_state_list.back(), pass.get()); |
| 653 | 663 |
| 654 RenderPassList pass_list; | 664 RenderPassList pass_list; |
| 655 pass_list.push_back(pass.Pass()); | 665 pass_list.push_back(pass.Pass()); |
| 656 | 666 |
| 657 // Check for potential candidates. | 667 // Check for potential candidates. |
| 658 OverlayCandidateList candidate_list; | 668 OverlayCandidateList candidate_list; |
| 659 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 669 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 670 &candidate_list); |
| 660 | 671 |
| 661 ASSERT_EQ(1U, pass_list.size()); | 672 ASSERT_EQ(1U, pass_list.size()); |
| 662 ASSERT_EQ(1U, candidate_list.size()); | 673 ASSERT_EQ(1U, candidate_list.size()); |
| 663 | 674 |
| 664 RenderPass* main_pass = pass_list.back(); | 675 RenderPass* main_pass = pass_list.back(); |
| 665 // Check that the quad is gone. | 676 // Check that the quad is gone. |
| 666 EXPECT_EQ(2U, main_pass->quad_list.size()); | 677 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 667 const QuadList& quad_list = main_pass->quad_list; | 678 const QuadList& quad_list = main_pass->quad_list; |
| 668 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 679 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 669 it != quad_list.BackToFrontEnd(); | 680 it != quad_list.BackToFrontEnd(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 682 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 693 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 683 pass->shared_quad_state_list.back(), pass.get()); | 694 pass->shared_quad_state_list.back(), pass.get()); |
| 684 | 695 |
| 685 RenderPassList pass_list; | 696 RenderPassList pass_list; |
| 686 pass_list.push_back(pass.Pass()); | 697 pass_list.push_back(pass.Pass()); |
| 687 | 698 |
| 688 RenderPassList original_pass_list; | 699 RenderPassList original_pass_list; |
| 689 RenderPass::CopyAll(pass_list, &original_pass_list); | 700 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 690 | 701 |
| 691 OverlayCandidateList candidate_list; | 702 OverlayCandidateList candidate_list; |
| 692 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 703 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 704 &candidate_list); |
| 693 EXPECT_EQ(0U, candidate_list.size()); | 705 EXPECT_EQ(0U, candidate_list.size()); |
| 694 // There should be nothing new here. | 706 // There should be nothing new here. |
| 695 CompareRenderPassLists(pass_list, original_pass_list); | 707 CompareRenderPassLists(pass_list, original_pass_list); |
| 696 } | 708 } |
| 697 | 709 |
| 698 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | 710 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
| 699 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 711 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 700 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 712 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 701 pass->shared_quad_state_list.back(), pass.get()); | 713 pass->shared_quad_state_list.back(), pass.get()); |
| 702 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 714 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 703 pass->shared_quad_state_list.back(), pass.get()); | 715 pass->shared_quad_state_list.back(), pass.get()); |
| 704 | 716 |
| 705 CreateFullscreenCandidateQuad(resource_provider_.get(), | 717 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 706 pass->shared_quad_state_list.back(), | 718 pass->shared_quad_state_list.back(), |
| 707 pass.get()); | 719 pass.get()); |
| 708 | 720 |
| 709 RenderPassList pass_list; | 721 RenderPassList pass_list; |
| 710 pass_list.push_back(pass.Pass()); | 722 pass_list.push_back(pass.Pass()); |
| 711 | 723 |
| 712 RenderPassList original_pass_list; | 724 RenderPassList original_pass_list; |
| 713 RenderPass::CopyAll(pass_list, &original_pass_list); | 725 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 714 | 726 |
| 715 OverlayCandidateList candidate_list; | 727 OverlayCandidateList candidate_list; |
| 716 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 728 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 729 &candidate_list); |
| 717 EXPECT_EQ(0U, candidate_list.size()); | 730 EXPECT_EQ(0U, candidate_list.size()); |
| 718 // There should be nothing new here. | 731 // There should be nothing new here. |
| 719 CompareRenderPassLists(pass_list, original_pass_list); | 732 CompareRenderPassLists(pass_list, original_pass_list); |
| 720 } | 733 } |
| 721 | 734 |
| 722 // Test with multiple render passes. | 735 // Test with multiple render passes. |
| 723 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 736 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
| 724 RenderPassList pass_list; | 737 RenderPassList pass_list; |
| 725 pass_list.push_back(CreateRenderPass()); | 738 pass_list.push_back(CreateRenderPass()); |
| 726 | 739 |
| 727 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 740 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 728 CreateFullscreenCandidateQuad(resource_provider_.get(), | 741 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 729 pass->shared_quad_state_list.back(), | 742 pass->shared_quad_state_list.back(), |
| 730 pass.get()); | 743 pass.get()); |
| 731 | 744 |
| 732 // Add something behind it. | 745 // Add something behind it. |
| 733 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 746 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 734 pass->shared_quad_state_list.back(), pass.get()); | 747 pass->shared_quad_state_list.back(), pass.get()); |
| 735 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 748 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 736 pass->shared_quad_state_list.back(), pass.get()); | 749 pass->shared_quad_state_list.back(), pass.get()); |
| 737 | 750 |
| 738 pass_list.push_back(pass.Pass()); | 751 pass_list.push_back(pass.Pass()); |
| 739 | 752 |
| 740 RenderPassList original_pass_list; | 753 RenderPassList original_pass_list; |
| 741 RenderPass::CopyAll(pass_list, &original_pass_list); | 754 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 742 | 755 |
| 743 // Check for potential candidates. | 756 // Check for potential candidates. |
| 744 OverlayCandidateList candidate_list; | 757 OverlayCandidateList candidate_list; |
| 745 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 758 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 759 &candidate_list); |
| 746 EXPECT_EQ(1U, candidate_list.size()); | 760 EXPECT_EQ(1U, candidate_list.size()); |
| 747 | 761 |
| 748 // This should be the same. | 762 // This should be the same. |
| 749 ASSERT_EQ(2U, pass_list.size()); | 763 ASSERT_EQ(2U, pass_list.size()); |
| 750 } | 764 } |
| 751 | 765 |
| 752 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { | 766 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { |
| 753 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 767 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 754 TextureDrawQuad* quad = | 768 TextureDrawQuad* quad = |
| 755 CreateFullscreenCandidateQuad(resource_provider_.get(), | 769 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 756 pass->shared_quad_state_list.back(), | 770 pass->shared_quad_state_list.back(), |
| 757 pass.get()); | 771 pass.get()); |
| 758 quad->premultiplied_alpha = true; | 772 quad->premultiplied_alpha = true; |
| 759 | 773 |
| 760 RenderPassList pass_list; | 774 RenderPassList pass_list; |
| 761 pass_list.push_back(pass.Pass()); | 775 pass_list.push_back(pass.Pass()); |
| 762 OverlayCandidateList candidate_list; | 776 OverlayCandidateList candidate_list; |
| 763 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 777 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 778 &candidate_list); |
| 764 EXPECT_EQ(1U, pass_list.size()); | 779 EXPECT_EQ(1U, pass_list.size()); |
| 765 EXPECT_EQ(0U, candidate_list.size()); | 780 EXPECT_EQ(0U, candidate_list.size()); |
| 766 } | 781 } |
| 767 | 782 |
| 768 TEST_F(SingleOverlayOnTopTest, RejectBlending) { | 783 TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
| 769 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 784 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 770 TextureDrawQuad* quad = | 785 TextureDrawQuad* quad = |
| 771 CreateFullscreenCandidateQuad(resource_provider_.get(), | 786 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 772 pass->shared_quad_state_list.back(), | 787 pass->shared_quad_state_list.back(), |
| 773 pass.get()); | 788 pass.get()); |
| 774 quad->needs_blending = true; | 789 quad->needs_blending = true; |
| 775 | 790 |
| 776 RenderPassList pass_list; | 791 RenderPassList pass_list; |
| 777 pass_list.push_back(pass.Pass()); | 792 pass_list.push_back(pass.Pass()); |
| 778 OverlayCandidateList candidate_list; | 793 OverlayCandidateList candidate_list; |
| 779 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 794 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 795 &candidate_list); |
| 780 ASSERT_EQ(1U, pass_list.size()); | 796 ASSERT_EQ(1U, pass_list.size()); |
| 781 EXPECT_EQ(0U, candidate_list.size()); | 797 EXPECT_EQ(0U, candidate_list.size()); |
| 782 } | 798 } |
| 783 | 799 |
| 784 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { | 800 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
| 785 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 801 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 786 TextureDrawQuad* quad = | 802 TextureDrawQuad* quad = |
| 787 CreateFullscreenCandidateQuad(resource_provider_.get(), | 803 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 788 pass->shared_quad_state_list.back(), | 804 pass->shared_quad_state_list.back(), |
| 789 pass.get()); | 805 pass.get()); |
| 790 quad->background_color = SK_ColorBLACK; | 806 quad->background_color = SK_ColorBLACK; |
| 791 | 807 |
| 792 RenderPassList pass_list; | 808 RenderPassList pass_list; |
| 793 pass_list.push_back(pass.Pass()); | 809 pass_list.push_back(pass.Pass()); |
| 794 OverlayCandidateList candidate_list; | 810 OverlayCandidateList candidate_list; |
| 795 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 811 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 812 &candidate_list); |
| 796 ASSERT_EQ(1U, pass_list.size()); | 813 ASSERT_EQ(1U, pass_list.size()); |
| 797 EXPECT_EQ(0U, candidate_list.size()); | 814 EXPECT_EQ(0U, candidate_list.size()); |
| 798 } | 815 } |
| 799 | 816 |
| 800 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { | 817 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
| 801 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 818 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 802 CreateFullscreenCandidateQuad(resource_provider_.get(), | 819 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 803 pass->shared_quad_state_list.back(), | 820 pass->shared_quad_state_list.back(), |
| 804 pass.get()); | 821 pass.get()); |
| 805 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; | 822 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; |
| 806 | 823 |
| 807 RenderPassList pass_list; | 824 RenderPassList pass_list; |
| 808 pass_list.push_back(pass.Pass()); | 825 pass_list.push_back(pass.Pass()); |
| 809 OverlayCandidateList candidate_list; | 826 OverlayCandidateList candidate_list; |
| 810 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 827 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 828 &candidate_list); |
| 811 ASSERT_EQ(1U, pass_list.size()); | 829 ASSERT_EQ(1U, pass_list.size()); |
| 812 EXPECT_EQ(0U, candidate_list.size()); | 830 EXPECT_EQ(0U, candidate_list.size()); |
| 813 } | 831 } |
| 814 | 832 |
| 815 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { | 833 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
| 816 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 834 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 817 CreateFullscreenCandidateQuad(resource_provider_.get(), | 835 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 818 pass->shared_quad_state_list.back(), | 836 pass->shared_quad_state_list.back(), |
| 819 pass.get()); | 837 pass.get()); |
| 820 pass->shared_quad_state_list.back()->opacity = 0.5f; | 838 pass->shared_quad_state_list.back()->opacity = 0.5f; |
| 821 | 839 |
| 822 RenderPassList pass_list; | 840 RenderPassList pass_list; |
| 823 pass_list.push_back(pass.Pass()); | 841 pass_list.push_back(pass.Pass()); |
| 824 OverlayCandidateList candidate_list; | 842 OverlayCandidateList candidate_list; |
| 825 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 843 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 844 &candidate_list); |
| 826 ASSERT_EQ(1U, pass_list.size()); | 845 ASSERT_EQ(1U, pass_list.size()); |
| 827 EXPECT_EQ(0U, candidate_list.size()); | 846 EXPECT_EQ(0U, candidate_list.size()); |
| 828 } | 847 } |
| 829 | 848 |
| 830 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { | 849 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { |
| 831 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 850 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 832 CreateFullscreenCandidateQuad(resource_provider_.get(), | 851 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 833 pass->shared_quad_state_list.back(), | 852 pass->shared_quad_state_list.back(), |
| 834 pass.get()); | 853 pass.get()); |
| 835 pass->shared_quad_state_list.back() | 854 pass->shared_quad_state_list.back() |
| 836 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 855 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 837 | 856 |
| 838 RenderPassList pass_list; | 857 RenderPassList pass_list; |
| 839 pass_list.push_back(pass.Pass()); | 858 pass_list.push_back(pass.Pass()); |
| 840 OverlayCandidateList candidate_list; | 859 OverlayCandidateList candidate_list; |
| 841 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 860 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 861 &candidate_list); |
| 842 ASSERT_EQ(1U, pass_list.size()); | 862 ASSERT_EQ(1U, pass_list.size()); |
| 843 EXPECT_EQ(0U, candidate_list.size()); | 863 EXPECT_EQ(0U, candidate_list.size()); |
| 844 } | 864 } |
| 845 | 865 |
| 846 TEST_F(SingleOverlayOnTopTest, AllowClipped) { | 866 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 847 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 867 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 848 CreateFullscreenCandidateQuad(resource_provider_.get(), | 868 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 849 pass->shared_quad_state_list.back(), | 869 pass->shared_quad_state_list.back(), |
| 850 pass.get()); | 870 pass.get()); |
| 851 pass->shared_quad_state_list.back()->is_clipped = true; | 871 pass->shared_quad_state_list.back()->is_clipped = true; |
| 852 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 872 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 853 | 873 |
| 854 RenderPassList pass_list; | 874 RenderPassList pass_list; |
| 855 pass_list.push_back(pass.Pass()); | 875 pass_list.push_back(pass.Pass()); |
| 856 OverlayCandidateList candidate_list; | 876 OverlayCandidateList candidate_list; |
| 857 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 877 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 878 &candidate_list); |
| 858 ASSERT_EQ(1U, pass_list.size()); | 879 ASSERT_EQ(1U, pass_list.size()); |
| 859 EXPECT_EQ(1U, candidate_list.size()); | 880 EXPECT_EQ(1U, candidate_list.size()); |
| 860 } | 881 } |
| 861 | 882 |
| 862 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { | 883 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { |
| 863 gfx::Rect rect = kOverlayRect; | 884 gfx::Rect rect = kOverlayRect; |
| 864 rect.set_width(rect.width() / 2); | 885 rect.set_width(rect.width() / 2); |
| 865 rect.Offset(0, -rect.height()); | 886 rect.Offset(0, -rect.height()); |
| 866 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 887 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 867 CreateCandidateQuadAt(resource_provider_.get(), | 888 CreateCandidateQuadAt(resource_provider_.get(), |
| 868 pass->shared_quad_state_list.back(), pass.get(), rect); | 889 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 869 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 890 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 870 -1.0f); | 891 -1.0f); |
| 871 | 892 |
| 872 RenderPassList pass_list; | 893 RenderPassList pass_list; |
| 873 pass_list.push_back(pass.Pass()); | 894 pass_list.push_back(pass.Pass()); |
| 874 OverlayCandidateList candidate_list; | 895 OverlayCandidateList candidate_list; |
| 875 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 896 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 897 &candidate_list); |
| 876 ASSERT_EQ(1U, pass_list.size()); | 898 ASSERT_EQ(1U, pass_list.size()); |
| 877 ASSERT_EQ(1U, candidate_list.size()); | 899 ASSERT_EQ(1U, candidate_list.size()); |
| 878 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 900 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
| 879 candidate_list.back().transform); | 901 candidate_list.back().transform); |
| 880 } | 902 } |
| 881 | 903 |
| 882 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { | 904 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { |
| 883 gfx::Rect rect = kOverlayRect; | 905 gfx::Rect rect = kOverlayRect; |
| 884 rect.set_height(rect.height() / 2); | 906 rect.set_height(rect.height() / 2); |
| 885 rect.Offset(-rect.width(), 0); | 907 rect.Offset(-rect.width(), 0); |
| 886 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 908 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 887 CreateCandidateQuadAt(resource_provider_.get(), | 909 CreateCandidateQuadAt(resource_provider_.get(), |
| 888 pass->shared_quad_state_list.back(), pass.get(), rect); | 910 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 889 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 911 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
| 890 2.0f); | 912 2.0f); |
| 891 | 913 |
| 892 RenderPassList pass_list; | 914 RenderPassList pass_list; |
| 893 pass_list.push_back(pass.Pass()); | 915 pass_list.push_back(pass.Pass()); |
| 894 OverlayCandidateList candidate_list; | 916 OverlayCandidateList candidate_list; |
| 895 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 917 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 918 &candidate_list); |
| 896 ASSERT_EQ(1U, pass_list.size()); | 919 ASSERT_EQ(1U, pass_list.size()); |
| 897 ASSERT_EQ(1U, candidate_list.size()); | 920 ASSERT_EQ(1U, candidate_list.size()); |
| 898 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 921 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
| 899 candidate_list.back().transform); | 922 candidate_list.back().transform); |
| 900 } | 923 } |
| 901 | 924 |
| 902 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 925 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
| 903 gfx::Rect rect = kOverlayRect; | 926 gfx::Rect rect = kOverlayRect; |
| 904 rect.set_width(rect.width() / 2); | 927 rect.set_width(rect.width() / 2); |
| 905 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 928 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 906 CreateCandidateQuadAt(resource_provider_.get(), | 929 CreateCandidateQuadAt(resource_provider_.get(), |
| 907 pass->shared_quad_state_list.back(), pass.get(), rect); | 930 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 908 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 931 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 909 1.0f); | 932 1.0f); |
| 910 | 933 |
| 911 RenderPassList pass_list; | 934 RenderPassList pass_list; |
| 912 pass_list.push_back(pass.Pass()); | 935 pass_list.push_back(pass.Pass()); |
| 913 OverlayCandidateList candidate_list; | 936 OverlayCandidateList candidate_list; |
| 914 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 937 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 938 &candidate_list); |
| 915 ASSERT_EQ(1U, pass_list.size()); | 939 ASSERT_EQ(1U, pass_list.size()); |
| 916 EXPECT_EQ(1U, candidate_list.size()); | 940 EXPECT_EQ(1U, candidate_list.size()); |
| 917 } | 941 } |
| 918 | 942 |
| 919 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { | 943 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { |
| 920 gfx::Rect rect = kOverlayRect; | 944 gfx::Rect rect = kOverlayRect; |
| 921 rect.Offset(0, -rect.height()); | 945 rect.Offset(0, -rect.height()); |
| 922 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 946 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 923 CreateCandidateQuadAt(resource_provider_.get(), | 947 CreateCandidateQuadAt(resource_provider_.get(), |
| 924 pass->shared_quad_state_list.back(), pass.get(), rect); | 948 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 925 pass->shared_quad_state_list.back() | 949 pass->shared_quad_state_list.back() |
| 926 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 950 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 927 | 951 |
| 928 RenderPassList pass_list; | 952 RenderPassList pass_list; |
| 929 pass_list.push_back(pass.Pass()); | 953 pass_list.push_back(pass.Pass()); |
| 930 OverlayCandidateList candidate_list; | 954 OverlayCandidateList candidate_list; |
| 931 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 955 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 956 &candidate_list); |
| 932 ASSERT_EQ(1U, pass_list.size()); | 957 ASSERT_EQ(1U, pass_list.size()); |
| 933 ASSERT_EQ(1U, candidate_list.size()); | 958 ASSERT_EQ(1U, candidate_list.size()); |
| 934 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 959 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
| 935 } | 960 } |
| 936 | 961 |
| 937 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { | 962 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { |
| 938 gfx::Rect rect = kOverlayRect; | 963 gfx::Rect rect = kOverlayRect; |
| 939 rect.Offset(-rect.width(), -rect.height()); | 964 rect.Offset(-rect.width(), -rect.height()); |
| 940 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 965 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 941 CreateCandidateQuadAt(resource_provider_.get(), | 966 CreateCandidateQuadAt(resource_provider_.get(), |
| 942 pass->shared_quad_state_list.back(), pass.get(), rect); | 967 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 943 pass->shared_quad_state_list.back() | 968 pass->shared_quad_state_list.back() |
| 944 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 969 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
| 945 | 970 |
| 946 RenderPassList pass_list; | 971 RenderPassList pass_list; |
| 947 pass_list.push_back(pass.Pass()); | 972 pass_list.push_back(pass.Pass()); |
| 948 OverlayCandidateList candidate_list; | 973 OverlayCandidateList candidate_list; |
| 949 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 974 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 975 &candidate_list); |
| 950 ASSERT_EQ(1U, pass_list.size()); | 976 ASSERT_EQ(1U, pass_list.size()); |
| 951 ASSERT_EQ(1U, candidate_list.size()); | 977 ASSERT_EQ(1U, candidate_list.size()); |
| 952 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 978 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
| 953 } | 979 } |
| 954 | 980 |
| 955 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { | 981 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { |
| 956 gfx::Rect rect = kOverlayRect; | 982 gfx::Rect rect = kOverlayRect; |
| 957 rect.Offset(-rect.width(), 0); | 983 rect.Offset(-rect.width(), 0); |
| 958 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 984 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 959 CreateCandidateQuadAt(resource_provider_.get(), | 985 CreateCandidateQuadAt(resource_provider_.get(), |
| 960 pass->shared_quad_state_list.back(), pass.get(), rect); | 986 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 961 pass->shared_quad_state_list.back() | 987 pass->shared_quad_state_list.back() |
| 962 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 988 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
| 963 | 989 |
| 964 RenderPassList pass_list; | 990 RenderPassList pass_list; |
| 965 pass_list.push_back(pass.Pass()); | 991 pass_list.push_back(pass.Pass()); |
| 966 OverlayCandidateList candidate_list; | 992 OverlayCandidateList candidate_list; |
| 967 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 993 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 994 &candidate_list); |
| 968 ASSERT_EQ(1U, pass_list.size()); | 995 ASSERT_EQ(1U, pass_list.size()); |
| 969 ASSERT_EQ(1U, candidate_list.size()); | 996 ASSERT_EQ(1U, candidate_list.size()); |
| 970 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 997 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 971 } | 998 } |
| 972 | 999 |
| 973 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 1000 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 974 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1001 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 975 CreateOpaqueQuadAt(resource_provider_.get(), | 1002 CreateOpaqueQuadAt(resource_provider_.get(), |
| 976 pass->shared_quad_state_list.back(), pass.get(), | 1003 pass->shared_quad_state_list.back(), pass.get(), |
| 977 kOverlayTopLeftRect); | 1004 kOverlayTopLeftRect); |
| 978 CreateCandidateQuadAt(resource_provider_.get(), | 1005 CreateCandidateQuadAt(resource_provider_.get(), |
| 979 pass->shared_quad_state_list.back(), | 1006 pass->shared_quad_state_list.back(), |
| 980 pass.get(), | 1007 pass.get(), |
| 981 kOverlayBottomRightRect); | 1008 kOverlayBottomRightRect); |
| 982 | 1009 |
| 983 RenderPassList pass_list; | 1010 RenderPassList pass_list; |
| 984 pass_list.push_back(pass.Pass()); | 1011 pass_list.push_back(pass.Pass()); |
| 985 | 1012 |
| 986 RenderPassList original_pass_list; | 1013 RenderPassList original_pass_list; |
| 987 RenderPass::CopyAll(pass_list, &original_pass_list); | 1014 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 988 | 1015 |
| 989 OverlayCandidateList candidate_list; | 1016 OverlayCandidateList candidate_list; |
| 990 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1017 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1018 &candidate_list); |
| 991 EXPECT_EQ(1U, pass_list.size()); | 1019 EXPECT_EQ(1U, pass_list.size()); |
| 992 EXPECT_EQ(1U, candidate_list.size()); | 1020 EXPECT_EQ(1U, candidate_list.size()); |
| 993 } | 1021 } |
| 994 | 1022 |
| 995 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 1023 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 996 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1024 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 997 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1025 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 998 shared_state->opacity = 0.f; | 1026 shared_state->opacity = 0.f; |
| 999 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1027 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1000 kOverlayBottomRightRect); | 1028 kOverlayBottomRightRect); |
| 1001 shared_state = pass->CreateAndAppendSharedQuadState(); | 1029 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1002 shared_state->opacity = 1.f; | 1030 shared_state->opacity = 1.f; |
| 1003 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1031 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1004 kOverlayBottomRightRect); | 1032 kOverlayBottomRightRect); |
| 1005 | 1033 |
| 1006 RenderPassList pass_list; | 1034 RenderPassList pass_list; |
| 1007 pass_list.push_back(pass.Pass()); | 1035 pass_list.push_back(pass.Pass()); |
| 1008 | 1036 |
| 1009 RenderPassList original_pass_list; | 1037 RenderPassList original_pass_list; |
| 1010 RenderPass::CopyAll(pass_list, &original_pass_list); | 1038 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1011 | 1039 |
| 1012 OverlayCandidateList candidate_list; | 1040 OverlayCandidateList candidate_list; |
| 1013 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1041 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1042 &candidate_list); |
| 1014 EXPECT_EQ(1U, pass_list.size()); | 1043 EXPECT_EQ(1U, pass_list.size()); |
| 1015 EXPECT_EQ(1U, candidate_list.size()); | 1044 EXPECT_EQ(1U, candidate_list.size()); |
| 1016 } | 1045 } |
| 1017 | 1046 |
| 1018 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1047 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 1019 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1048 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1020 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1049 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 1021 SK_ColorTRANSPARENT, pass.get(), | 1050 SK_ColorTRANSPARENT, pass.get(), |
| 1022 kOverlayBottomRightRect); | 1051 kOverlayBottomRightRect); |
| 1023 CreateCandidateQuadAt(resource_provider_.get(), | 1052 CreateCandidateQuadAt(resource_provider_.get(), |
| 1024 pass->shared_quad_state_list.back(), pass.get(), | 1053 pass->shared_quad_state_list.back(), pass.get(), |
| 1025 kOverlayBottomRightRect); | 1054 kOverlayBottomRightRect); |
| 1026 | 1055 |
| 1027 RenderPassList pass_list; | 1056 RenderPassList pass_list; |
| 1028 pass_list.push_back(pass.Pass()); | 1057 pass_list.push_back(pass.Pass()); |
| 1029 | 1058 |
| 1030 RenderPassList original_pass_list; | 1059 RenderPassList original_pass_list; |
| 1031 RenderPass::CopyAll(pass_list, &original_pass_list); | 1060 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1032 | 1061 |
| 1033 OverlayCandidateList candidate_list; | 1062 OverlayCandidateList candidate_list; |
| 1034 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1063 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1064 &candidate_list); |
| 1035 EXPECT_EQ(1U, pass_list.size()); | 1065 EXPECT_EQ(1U, pass_list.size()); |
| 1036 EXPECT_EQ(1U, candidate_list.size()); | 1066 EXPECT_EQ(1U, candidate_list.size()); |
| 1037 } | 1067 } |
| 1038 | 1068 |
| 1039 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 1069 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 1040 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1070 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1041 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1071 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1042 shared_state->opacity = 0.5f; | 1072 shared_state->opacity = 0.5f; |
| 1043 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1073 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1044 kOverlayBottomRightRect); | 1074 kOverlayBottomRightRect); |
| 1045 shared_state = pass->CreateAndAppendSharedQuadState(); | 1075 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1046 shared_state->opacity = 1.f; | 1076 shared_state->opacity = 1.f; |
| 1047 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1077 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1048 kOverlayBottomRightRect); | 1078 kOverlayBottomRightRect); |
| 1049 | 1079 |
| 1050 RenderPassList pass_list; | 1080 RenderPassList pass_list; |
| 1051 pass_list.push_back(pass.Pass()); | 1081 pass_list.push_back(pass.Pass()); |
| 1052 | 1082 |
| 1053 RenderPassList original_pass_list; | 1083 RenderPassList original_pass_list; |
| 1054 RenderPass::CopyAll(pass_list, &original_pass_list); | 1084 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1055 | 1085 |
| 1056 OverlayCandidateList candidate_list; | 1086 OverlayCandidateList candidate_list; |
| 1057 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1087 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1088 &candidate_list); |
| 1058 EXPECT_EQ(1U, pass_list.size()); | 1089 EXPECT_EQ(1U, pass_list.size()); |
| 1059 EXPECT_EQ(0U, candidate_list.size()); | 1090 EXPECT_EQ(0U, candidate_list.size()); |
| 1060 } | 1091 } |
| 1061 | 1092 |
| 1062 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { | 1093 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
| 1063 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1094 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1064 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1095 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1065 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), | 1096 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
| 1066 kOverlayBottomRightRect)->opaque_rect = | 1097 kOverlayBottomRightRect)->opaque_rect = |
| 1067 kOverlayBottomRightRect; | 1098 kOverlayBottomRightRect; |
| 1068 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1099 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1069 kOverlayBottomRightRect); | 1100 kOverlayBottomRightRect); |
| 1070 | 1101 |
| 1071 RenderPassList pass_list; | 1102 RenderPassList pass_list; |
| 1072 pass_list.push_back(pass.Pass()); | 1103 pass_list.push_back(pass.Pass()); |
| 1073 | 1104 |
| 1074 RenderPassList original_pass_list; | 1105 RenderPassList original_pass_list; |
| 1075 RenderPass::CopyAll(pass_list, &original_pass_list); | 1106 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1076 | 1107 |
| 1077 OverlayCandidateList candidate_list; | 1108 OverlayCandidateList candidate_list; |
| 1078 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1109 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1110 &candidate_list); |
| 1079 EXPECT_EQ(1U, pass_list.size()); | 1111 EXPECT_EQ(1U, pass_list.size()); |
| 1080 EXPECT_EQ(0U, candidate_list.size()); | 1112 EXPECT_EQ(0U, candidate_list.size()); |
| 1081 } | 1113 } |
| 1082 | 1114 |
| 1083 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 1115 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
| 1084 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1116 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1085 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1117 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1086 pass->shared_quad_state_list.back(), | 1118 pass->shared_quad_state_list.back(), |
| 1087 pass.get(), kSwapTransform); | 1119 pass.get(), kSwapTransform); |
| 1088 | 1120 |
| 1089 RenderPassList pass_list; | 1121 RenderPassList pass_list; |
| 1090 pass_list.push_back(pass.Pass()); | 1122 pass_list.push_back(pass.Pass()); |
| 1091 OverlayCandidateList candidate_list; | 1123 OverlayCandidateList candidate_list; |
| 1092 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1124 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1125 &candidate_list); |
| 1093 ASSERT_EQ(1U, pass_list.size()); | 1126 ASSERT_EQ(1U, pass_list.size()); |
| 1094 EXPECT_EQ(0U, candidate_list.size()); | 1127 EXPECT_EQ(0U, candidate_list.size()); |
| 1095 } | 1128 } |
| 1096 | 1129 |
| 1097 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { | 1130 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { |
| 1098 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1131 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1099 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1132 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1100 pass->shared_quad_state_list.back(), | 1133 pass->shared_quad_state_list.back(), |
| 1101 pass.get(), kXMirrorTransform); | 1134 pass.get(), kXMirrorTransform); |
| 1102 | 1135 |
| 1103 RenderPassList pass_list; | 1136 RenderPassList pass_list; |
| 1104 pass_list.push_back(pass.Pass()); | 1137 pass_list.push_back(pass.Pass()); |
| 1105 OverlayCandidateList candidate_list; | 1138 OverlayCandidateList candidate_list; |
| 1106 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1139 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1140 &candidate_list); |
| 1107 ASSERT_EQ(1U, pass_list.size()); | 1141 ASSERT_EQ(1U, pass_list.size()); |
| 1108 EXPECT_EQ(1U, candidate_list.size()); | 1142 EXPECT_EQ(1U, candidate_list.size()); |
| 1109 } | 1143 } |
| 1110 | 1144 |
| 1111 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { | 1145 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { |
| 1112 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1146 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1113 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1147 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1114 pass->shared_quad_state_list.back(), | 1148 pass->shared_quad_state_list.back(), |
| 1115 pass.get(), kBothMirrorTransform); | 1149 pass.get(), kBothMirrorTransform); |
| 1116 | 1150 |
| 1117 RenderPassList pass_list; | 1151 RenderPassList pass_list; |
| 1118 pass_list.push_back(pass.Pass()); | 1152 pass_list.push_back(pass.Pass()); |
| 1119 OverlayCandidateList candidate_list; | 1153 OverlayCandidateList candidate_list; |
| 1120 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1154 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1155 &candidate_list); |
| 1121 ASSERT_EQ(1U, pass_list.size()); | 1156 ASSERT_EQ(1U, pass_list.size()); |
| 1122 EXPECT_EQ(1U, candidate_list.size()); | 1157 EXPECT_EQ(1U, candidate_list.size()); |
| 1123 } | 1158 } |
| 1124 | 1159 |
| 1125 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { | 1160 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { |
| 1126 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1161 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1127 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1162 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1128 pass->shared_quad_state_list.back(), | 1163 pass->shared_quad_state_list.back(), |
| 1129 pass.get(), kNormalTransform); | 1164 pass.get(), kNormalTransform); |
| 1130 | 1165 |
| 1131 RenderPassList pass_list; | 1166 RenderPassList pass_list; |
| 1132 pass_list.push_back(pass.Pass()); | 1167 pass_list.push_back(pass.Pass()); |
| 1133 OverlayCandidateList candidate_list; | 1168 OverlayCandidateList candidate_list; |
| 1134 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1169 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1170 &candidate_list); |
| 1135 ASSERT_EQ(1U, pass_list.size()); | 1171 ASSERT_EQ(1U, pass_list.size()); |
| 1136 EXPECT_EQ(1U, candidate_list.size()); | 1172 EXPECT_EQ(1U, candidate_list.size()); |
| 1137 } | 1173 } |
| 1138 | 1174 |
| 1139 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 1175 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
| 1140 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1176 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1141 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1177 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1142 pass->shared_quad_state_list.back(), | 1178 pass->shared_quad_state_list.back(), |
| 1143 pass.get(), kYMirrorTransform); | 1179 pass.get(), kYMirrorTransform); |
| 1144 | 1180 |
| 1145 RenderPassList pass_list; | 1181 RenderPassList pass_list; |
| 1146 pass_list.push_back(pass.Pass()); | 1182 pass_list.push_back(pass.Pass()); |
| 1147 OverlayCandidateList candidate_list; | 1183 OverlayCandidateList candidate_list; |
| 1148 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1184 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1185 &candidate_list); |
| 1149 ASSERT_EQ(1U, pass_list.size()); | 1186 ASSERT_EQ(1U, pass_list.size()); |
| 1150 EXPECT_EQ(1U, candidate_list.size()); | 1187 EXPECT_EQ(1U, candidate_list.size()); |
| 1151 } | 1188 } |
| 1152 | 1189 |
| 1153 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1190 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1154 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1191 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1155 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1192 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1156 pass->shared_quad_state_list.back(), pass.get()); | 1193 pass->shared_quad_state_list.back(), pass.get()); |
| 1157 CreateCandidateQuadAt(resource_provider_.get(), | 1194 CreateCandidateQuadAt(resource_provider_.get(), |
| 1158 pass->shared_quad_state_list.back(), pass.get(), | 1195 pass->shared_quad_state_list.back(), pass.get(), |
| 1159 kOverlayBottomRightRect); | 1196 kOverlayBottomRightRect); |
| 1160 | 1197 |
| 1161 RenderPassList pass_list; | 1198 RenderPassList pass_list; |
| 1162 pass_list.push_back(pass.Pass()); | 1199 pass_list.push_back(pass.Pass()); |
| 1163 | 1200 |
| 1164 OverlayCandidateList candidate_list; | 1201 OverlayCandidateList candidate_list; |
| 1165 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1202 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1203 &candidate_list); |
| 1166 EXPECT_EQ(1U, pass_list.size()); | 1204 EXPECT_EQ(1U, pass_list.size()); |
| 1167 ASSERT_EQ(1U, candidate_list.size()); | 1205 ASSERT_EQ(1U, candidate_list.size()); |
| 1168 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1206 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1169 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); | 1207 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); |
| 1170 // The overlay quad should have changed to a SOLID_COLOR quad. | 1208 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1171 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 1209 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 1172 } | 1210 } |
| 1173 | 1211 |
| 1174 TEST_F(UnderlayTest, AllowOnTop) { | 1212 TEST_F(UnderlayTest, AllowOnTop) { |
| 1175 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1213 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1176 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1214 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1177 pass->shared_quad_state_list.back(), | 1215 pass->shared_quad_state_list.back(), |
| 1178 pass.get()); | 1216 pass.get()); |
| 1179 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 1217 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 1180 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1218 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1181 pass->shared_quad_state_list.back(), pass.get()); | 1219 pass->shared_quad_state_list.back(), pass.get()); |
| 1182 | 1220 |
| 1183 RenderPassList pass_list; | 1221 RenderPassList pass_list; |
| 1184 pass_list.push_back(pass.Pass()); | 1222 pass_list.push_back(pass.Pass()); |
| 1185 | 1223 |
| 1186 OverlayCandidateList candidate_list; | 1224 OverlayCandidateList candidate_list; |
| 1187 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1225 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1226 &candidate_list); |
| 1188 EXPECT_EQ(1U, pass_list.size()); | 1227 EXPECT_EQ(1U, pass_list.size()); |
| 1189 ASSERT_EQ(1U, candidate_list.size()); | 1228 ASSERT_EQ(1U, candidate_list.size()); |
| 1190 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1229 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1191 // The overlay quad should have changed to a SOLID_COLOR quad. | 1230 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1192 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 1231 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
| 1193 } | 1232 } |
| 1194 | 1233 |
| 1195 TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) { | 1234 TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) { |
| 1196 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1235 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1197 | 1236 |
| 1198 // Add two overlapping candidates. | 1237 // Add two overlapping candidates. |
| 1199 CreateCandidateQuadAt(resource_provider_.get(), | 1238 CreateCandidateQuadAt(resource_provider_.get(), |
| 1200 pass->shared_quad_state_list.back(), pass.get(), | 1239 pass->shared_quad_state_list.back(), pass.get(), |
| 1201 kOverlayTopLeftRect); | 1240 kOverlayTopLeftRect); |
| 1202 CreateCandidateQuadAt(resource_provider_.get(), | 1241 CreateCandidateQuadAt(resource_provider_.get(), |
| 1203 pass->shared_quad_state_list.back(), pass.get(), | 1242 pass->shared_quad_state_list.back(), pass.get(), |
| 1204 kOverlayRect); | 1243 kOverlayRect); |
| 1205 | 1244 |
| 1206 RenderPassList pass_list; | 1245 RenderPassList pass_list; |
| 1207 pass_list.push_back(pass.Pass()); | 1246 pass_list.push_back(pass.Pass()); |
| 1208 OverlayCandidateList candidates; | 1247 OverlayCandidateList candidates; |
| 1209 overlay_processor_->ProcessForOverlays(&pass_list, &candidates); | 1248 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1249 &candidates); |
| 1210 | 1250 |
| 1211 // Both quads should become overlays. | 1251 // Both quads should become overlays. |
| 1212 EXPECT_EQ(2u, candidates.size()); | 1252 EXPECT_EQ(2u, candidates.size()); |
| 1213 EXPECT_EQ(-1, candidates[0].plane_z_order); | 1253 EXPECT_EQ(-1, candidates[0].plane_z_order); |
| 1214 EXPECT_EQ(-2, candidates[1].plane_z_order); | 1254 EXPECT_EQ(-2, candidates[1].plane_z_order); |
| 1215 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect); | 1255 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect); |
| 1216 EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect); | 1256 EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect); |
| 1217 | 1257 |
| 1218 // All quads should be gone. | 1258 // All quads should be gone. |
| 1219 EXPECT_TRUE(pass_list.back()->quad_list.empty()); | 1259 EXPECT_TRUE(pass_list.back()->quad_list.empty()); |
| 1220 } | 1260 } |
| 1221 | 1261 |
| 1222 TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) { | 1262 TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) { |
| 1223 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1263 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1224 | 1264 |
| 1225 CreateCandidateQuadAt(resource_provider_.get(), | 1265 CreateCandidateQuadAt(resource_provider_.get(), |
| 1226 pass->shared_quad_state_list.back(), pass.get(), | 1266 pass->shared_quad_state_list.back(), pass.get(), |
| 1227 kOverlayTopLeftRect); | 1267 kOverlayTopLeftRect); |
| 1228 | 1268 |
| 1229 // Add a rotated quad that can't be promoted into overlay. | 1269 // Add a rotated quad that can't be promoted into overlay. |
| 1230 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1270 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1231 shared_state->opacity = 1.f; | 1271 shared_state->opacity = 1.f; |
| 1232 shared_state->quad_to_target_transform.Rotate(90); | 1272 shared_state->quad_to_target_transform.Rotate(90); |
| 1233 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1273 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1234 kOverlayBottomRightRect); | 1274 kOverlayBottomRightRect); |
| 1235 | 1275 |
| 1236 RenderPassList pass_list; | 1276 RenderPassList pass_list; |
| 1237 pass_list.push_back(pass.Pass()); | 1277 pass_list.push_back(pass.Pass()); |
| 1238 OverlayCandidateList candidates; | 1278 OverlayCandidateList candidates; |
| 1239 overlay_processor_->ProcessForOverlays(&pass_list, &candidates); | 1279 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1280 &candidates); |
| 1240 | 1281 |
| 1241 // No quads should become overlays. | 1282 // No quads should become overlays. |
| 1242 EXPECT_EQ(0u, candidates.size()); | 1283 EXPECT_EQ(0u, candidates.size()); |
| 1243 EXPECT_EQ(2u, pass_list.back()->quad_list.size()); | 1284 EXPECT_EQ(2u, pass_list.back()->quad_list.size()); |
| 1244 } | 1285 } |
| 1245 | 1286 |
| 1246 class OverlayInfoRendererGL : public GLRenderer { | 1287 class OverlayInfoRendererGL : public GLRenderer { |
| 1247 public: | 1288 public: |
| 1248 OverlayInfoRendererGL(RendererClient* client, | 1289 OverlayInfoRendererGL(RendererClient* client, |
| 1249 const RendererSettings* settings, | 1290 const RendererSettings* settings, |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1442 SwapBuffers(); | 1483 SwapBuffers(); |
| 1443 Mock::VerifyAndClearExpectations(renderer_.get()); | 1484 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1444 Mock::VerifyAndClearExpectations(&scheduler_); | 1485 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1445 } | 1486 } |
| 1446 | 1487 |
| 1447 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithDelay) { | 1488 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithDelay) { |
| 1448 bool use_validator = true; | 1489 bool use_validator = true; |
| 1449 Init(use_validator); | 1490 Init(use_validator); |
| 1450 renderer_->set_expect_overlays(true); | 1491 renderer_->set_expect_overlays(true); |
| 1451 | 1492 |
| 1452 ResourceId resource1 = CreateResource(resource_provider_.get()); | 1493 ResourceId resource1 = |
| 1453 ResourceId resource2 = CreateResource(resource_provider_.get()); | 1494 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1454 ResourceId resource3 = CreateResource(resource_provider_.get()); | 1495 ResourceId resource2 = |
| 1496 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1497 ResourceId resource3 = |
| 1498 CreateResource(resource_provider_.get(), gfx::Size(32, 32), true); |
| 1455 | 1499 |
| 1456 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1500 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1457 RenderPassList pass_list; | 1501 RenderPassList pass_list; |
| 1458 pass_list.push_back(pass.Pass()); | 1502 pass_list.push_back(pass.Pass()); |
| 1459 | 1503 |
| 1460 DirectRenderer::DrawingFrame frame1; | 1504 DirectRenderer::DrawingFrame frame1; |
| 1461 frame1.render_passes_in_draw_order = &pass_list; | 1505 frame1.render_passes_in_draw_order = &pass_list; |
| 1462 frame1.overlay_list.resize(2); | 1506 frame1.overlay_list.resize(2); |
| 1463 frame1.overlay_list.front().use_output_surface_for_resource = true; | 1507 frame1.overlay_list.front().use_output_surface_for_resource = true; |
| 1464 OverlayCandidate& overlay1 = frame1.overlay_list.back(); | 1508 OverlayCandidate& overlay1 = frame1.overlay_list.back(); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1558 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1602 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1559 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1603 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1560 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1604 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1561 SwapBuffers(); | 1605 SwapBuffers(); |
| 1562 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1606 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1563 Mock::VerifyAndClearExpectations(&scheduler_); | 1607 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1564 } | 1608 } |
| 1565 | 1609 |
| 1566 } // namespace | 1610 } // namespace |
| 1567 } // namespace cc | 1611 } // namespace cc |
| OLD | NEW |