| Index: cc/output/overlay_unittest.cc
|
| diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
|
| index 684349caf788f64b3a224c06589343aa7c9707f6..fdf51a0afe9a9a8f0c4af9508b5d3a8dc4dbd14b 100644
|
| --- a/cc/output/overlay_unittest.cc
|
| +++ b/cc/output/overlay_unittest.cc
|
| @@ -2,6 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "cc/base/region.h"
|
| #include "cc/base/scoped_ptr_vector.h"
|
| #include "cc/output/compositor_frame_metadata.h"
|
| #include "cc/output/gl_renderer.h"
|
| @@ -25,6 +26,7 @@
|
| #include "cc/test/test_shared_bitmap_manager.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/gfx/geometry/rect_conversions.h"
|
|
|
| using testing::_;
|
| using testing::Mock;
|
| @@ -542,6 +544,72 @@ TEST_F(SandwichTest, MisalignedOverlay) {
|
| ASSERT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| +TEST_F(SandwichTest, MultiQuadOverlay) {
|
| + scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| +
|
| + // Put two non-intersecting quads on top.
|
| + const gfx::Rect rect1(gfx::Rect(0, 0, 32, 32));
|
| + const gfx::Rect rect2(gfx::Rect(32, 32, 32, 32));
|
| + Region covered_region;
|
| + covered_region.Union(rect1);
|
| + covered_region.Union(rect2);
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(), rect1);
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(), rect2);
|
| +
|
| + // Then a candidate that we'll turn into an overlay.
|
| + unsigned candidate_id =
|
| + CreateCandidateQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + gfx::Rect(0, 0, 64, 64))
|
| + ->resource_id();
|
| +
|
| + // Then some opaque background.
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + gfx::Rect(kDisplaySize));
|
| +
|
| + RenderPassList pass_list;
|
| + pass_list.push_back(pass.Pass());
|
| +
|
| + // Run the overlay strategy on that input.
|
| + RenderPass* main_pass = pass_list.back();
|
| + OverlayCandidateList candidate_list;
|
| + EXPECT_EQ(4U, main_pass->quad_list.size());
|
| + overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| + ASSERT_EQ(1U, pass_list.size());
|
| + ASSERT_EQ(4U, candidate_list.size());
|
| +
|
| + // Check that the candidate quad is gone and that we now have two transparent
|
| + // quads for the same region that was covered on the overlay.
|
| + EXPECT_EQ(5U, main_pass->quad_list.size());
|
| + const QuadList& quad_list = main_pass->quad_list;
|
| + Region transparent_quad_region;
|
| + for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
|
| + it != quad_list.BackToFrontEnd(); ++it) {
|
| + EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material);
|
| + if (it->material == DrawQuad::SOLID_COLOR) {
|
| + const SolidColorDrawQuad* solid_color_quad =
|
| + SolidColorDrawQuad::MaterialCast(*it);
|
| + if (solid_color_quad->color == SK_ColorTRANSPARENT)
|
| + transparent_quad_region.Union(solid_color_quad->rect);
|
| + }
|
| + }
|
| + DCHECK(covered_region == transparent_quad_region);
|
| +
|
| + // Check that overlays cover the same region that the quads covered.
|
| + EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource);
|
| + EXPECT_EQ(candidate_id, candidate_list[1].resource_id);
|
| + EXPECT_EQ(gfx::Rect(0, 0, 64, 64), candidate_list[1].display_rect);
|
| + EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource);
|
| + EXPECT_TRUE(candidate_list[3].use_output_surface_for_resource);
|
| + Region overlay_region;
|
| + overlay_region.Union(gfx::ToEnclosingRect(candidate_list[2].display_rect));
|
| + overlay_region.Union(gfx::ToEnclosingRect(candidate_list[3].display_rect));
|
| + DCHECK(covered_region == overlay_region);
|
| +}
|
| +
|
| TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
|
| scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| TextureDrawQuad* original_quad =
|
|
|