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

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

Issue 1315053004: Mac Overlays: Allow sandwich strategy to emit multiple overlays (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove false dependency Created 5 years, 3 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
« no previous file with comments | « cc/output/overlay_strategy_sandwich.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/scoped_ptr_vector.h" 6 #include "cc/base/scoped_ptr_vector.h"
6 #include "cc/output/compositor_frame_metadata.h" 7 #include "cc/output/compositor_frame_metadata.h"
7 #include "cc/output/gl_renderer.h" 8 #include "cc/output/gl_renderer.h"
8 #include "cc/output/output_surface.h" 9 #include "cc/output/output_surface.h"
9 #include "cc/output/output_surface_client.h" 10 #include "cc/output/output_surface_client.h"
10 #include "cc/output/overlay_candidate_validator.h" 11 #include "cc/output/overlay_candidate_validator.h"
11 #include "cc/output/overlay_processor.h" 12 #include "cc/output/overlay_processor.h"
12 #include "cc/output/overlay_strategy_sandwich.h" 13 #include "cc/output/overlay_strategy_sandwich.h"
13 #include "cc/output/overlay_strategy_single_on_top.h" 14 #include "cc/output/overlay_strategy_single_on_top.h"
14 #include "cc/output/overlay_strategy_underlay.h" 15 #include "cc/output/overlay_strategy_underlay.h"
15 #include "cc/quads/render_pass.h" 16 #include "cc/quads/render_pass.h"
16 #include "cc/quads/solid_color_draw_quad.h" 17 #include "cc/quads/solid_color_draw_quad.h"
17 #include "cc/quads/stream_video_draw_quad.h" 18 #include "cc/quads/stream_video_draw_quad.h"
18 #include "cc/quads/texture_draw_quad.h" 19 #include "cc/quads/texture_draw_quad.h"
19 #include "cc/resources/resource_provider.h" 20 #include "cc/resources/resource_provider.h"
20 #include "cc/resources/texture_mailbox.h" 21 #include "cc/resources/texture_mailbox.h"
21 #include "cc/test/fake_output_surface_client.h" 22 #include "cc/test/fake_output_surface_client.h"
22 #include "cc/test/fake_resource_provider.h" 23 #include "cc/test/fake_resource_provider.h"
23 #include "cc/test/geometry_test_utils.h" 24 #include "cc/test/geometry_test_utils.h"
24 #include "cc/test/test_context_provider.h" 25 #include "cc/test/test_context_provider.h"
25 #include "cc/test/test_shared_bitmap_manager.h" 26 #include "cc/test/test_shared_bitmap_manager.h"
26 #include "testing/gmock/include/gmock/gmock.h" 27 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
29 #include "ui/gfx/geometry/rect_conversions.h"
28 30
29 using testing::_; 31 using testing::_;
30 using testing::Mock; 32 using testing::Mock;
31 33
32 namespace cc { 34 namespace cc {
33 namespace { 35 namespace {
34 36
35 const gfx::Size kDisplaySize(256, 256); 37 const gfx::Size kDisplaySize(256, 256);
36 const gfx::Rect kOverlayRect(0, 0, 128, 128); 38 const gfx::Rect kOverlayRect(0, 0, 128, 128);
37 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); 39 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64);
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 RenderPassList pass_list; 537 RenderPassList pass_list;
536 pass_list.push_back(pass.Pass()); 538 pass_list.push_back(pass.Pass());
537 539
538 OverlayCandidateList candidate_list; 540 OverlayCandidateList candidate_list;
539 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 541 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
540 542
541 ASSERT_EQ(1U, pass_list.size()); 543 ASSERT_EQ(1U, pass_list.size());
542 ASSERT_EQ(0U, candidate_list.size()); 544 ASSERT_EQ(0U, candidate_list.size());
543 } 545 }
544 546
547 TEST_F(SandwichTest, MultiQuadOverlay) {
548 scoped_ptr<RenderPass> pass = CreateRenderPass();
549
550 // Put two non-intersecting quads on top.
551 const gfx::Rect rect1(gfx::Rect(0, 0, 32, 32));
552 const gfx::Rect rect2(gfx::Rect(32, 32, 32, 32));
553 Region covered_region;
554 covered_region.Union(rect1);
555 covered_region.Union(rect2);
556 CreateOpaqueQuadAt(resource_provider_.get(),
557 pass->shared_quad_state_list.back(), pass.get(), rect1);
558 CreateOpaqueQuadAt(resource_provider_.get(),
559 pass->shared_quad_state_list.back(), pass.get(), rect2);
560
561 // Then a candidate that we'll turn into an overlay.
562 unsigned candidate_id =
563 CreateCandidateQuadAt(resource_provider_.get(),
564 pass->shared_quad_state_list.back(), pass.get(),
565 gfx::Rect(0, 0, 64, 64))
566 ->resource_id();
567
568 // Then some opaque background.
569 CreateOpaqueQuadAt(resource_provider_.get(),
570 pass->shared_quad_state_list.back(), pass.get(),
571 gfx::Rect(kDisplaySize));
572
573 RenderPassList pass_list;
574 pass_list.push_back(pass.Pass());
575
576 // Run the overlay strategy on that input.
577 RenderPass* main_pass = pass_list.back();
578 OverlayCandidateList candidate_list;
579 EXPECT_EQ(4U, main_pass->quad_list.size());
580 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
581 ASSERT_EQ(1U, pass_list.size());
582 ASSERT_EQ(4U, candidate_list.size());
583
584 // Check that the candidate quad is gone and that we now have two transparent
585 // quads for the same region that was covered on the overlay.
586 EXPECT_EQ(5U, main_pass->quad_list.size());
587 const QuadList& quad_list = main_pass->quad_list;
588 Region transparent_quad_region;
589 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
590 it != quad_list.BackToFrontEnd(); ++it) {
591 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material);
592 if (it->material == DrawQuad::SOLID_COLOR) {
593 const SolidColorDrawQuad* solid_color_quad =
594 SolidColorDrawQuad::MaterialCast(*it);
595 if (solid_color_quad->color == SK_ColorTRANSPARENT)
596 transparent_quad_region.Union(solid_color_quad->rect);
597 }
598 }
599 DCHECK(covered_region == transparent_quad_region);
600
601 // Check that overlays cover the same region that the quads covered.
602 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource);
603 EXPECT_EQ(candidate_id, candidate_list[1].resource_id);
604 EXPECT_EQ(gfx::Rect(0, 0, 64, 64), candidate_list[1].display_rect);
605 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource);
606 EXPECT_TRUE(candidate_list[3].use_output_surface_for_resource);
607 Region overlay_region;
608 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[2].display_rect));
609 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[3].display_rect));
610 DCHECK(covered_region == overlay_region);
611 }
612
545 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { 613 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
546 scoped_ptr<RenderPass> pass = CreateRenderPass(); 614 scoped_ptr<RenderPass> pass = CreateRenderPass();
547 TextureDrawQuad* original_quad = 615 TextureDrawQuad* original_quad =
548 CreateFullscreenCandidateQuad(resource_provider_.get(), 616 CreateFullscreenCandidateQuad(resource_provider_.get(),
549 pass->shared_quad_state_list.back(), 617 pass->shared_quad_state_list.back(),
550 pass.get()); 618 pass.get());
551 unsigned original_resource_id = original_quad->resource_id(); 619 unsigned original_resource_id = original_quad->resource_id();
552 620
553 // Add something behind it. 621 // Add something behind it.
554 CreateFullscreenOpaqueQuad(resource_provider_.get(), 622 CreateFullscreenOpaqueQuad(resource_provider_.get(),
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 renderer_->BeginDrawingFrame(&frame3); 1433 renderer_->BeginDrawingFrame(&frame3);
1366 renderer_->FinishDrawingFrame(&frame3); 1434 renderer_->FinishDrawingFrame(&frame3);
1367 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); 1435 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
1368 SwapBuffers(); 1436 SwapBuffers();
1369 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); 1437 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
1370 Mock::VerifyAndClearExpectations(&scheduler_); 1438 Mock::VerifyAndClearExpectations(&scheduler_);
1371 } 1439 }
1372 1440
1373 } // namespace 1441 } // namespace
1374 } // namespace cc 1442 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_strategy_sandwich.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698