Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: cc/output/overlay_unittest.cc

Issue 1387283002: cc: Remove redundant is_overlay arguments (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698