Home | History | Annotate | Download | only in layers
      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
      3 // found in the LICENSE file.
      4 
      5 #include "cc/layers/render_surface_impl.h"
      6 
      7 #include "cc/test/layer_test_common.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 namespace cc {
     11 namespace {
     12 
     13 TEST(RenderSurfaceLayerImplTest, Occlusion) {
     14   gfx::Size layer_size(1000, 1000);
     15   gfx::Size viewport_size(1000, 1000);
     16 
     17   LayerTestCommon::LayerImplTest impl;
     18 
     19   LayerImpl* owning_layer_impl = impl.AddChildToRoot<LayerImpl>();
     20   owning_layer_impl->SetBounds(layer_size);
     21   owning_layer_impl->SetContentBounds(layer_size);
     22   owning_layer_impl->SetDrawsContent(true);
     23   owning_layer_impl->SetForceRenderSurface(true);
     24 
     25   impl.CalcDrawProps(viewport_size);
     26 
     27   RenderSurfaceImpl* render_surface_impl = owning_layer_impl->render_surface();
     28   ASSERT_TRUE(render_surface_impl);
     29 
     30   {
     31     SCOPED_TRACE("No occlusion");
     32     gfx::Rect occluded;
     33     impl.AppendSurfaceQuadsWithOcclusion(render_surface_impl, occluded);
     34 
     35     LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
     36                                                  gfx::Rect(layer_size));
     37     EXPECT_EQ(1u, impl.quad_list().size());
     38   }
     39 
     40   {
     41     SCOPED_TRACE("Full occlusion");
     42     gfx::Rect occluded(owning_layer_impl->visible_content_rect());
     43     impl.AppendSurfaceQuadsWithOcclusion(render_surface_impl, occluded);
     44 
     45     LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
     46     EXPECT_EQ(impl.quad_list().size(), 0u);
     47   }
     48 
     49   {
     50     SCOPED_TRACE("Partial occlusion");
     51     gfx::Rect occluded(200, 0, 800, 1000);
     52     impl.AppendSurfaceQuadsWithOcclusion(render_surface_impl, occluded);
     53 
     54     size_t partially_occluded_count = 0;
     55     LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
     56         impl.quad_list(),
     57         gfx::Rect(layer_size),
     58         occluded,
     59         &partially_occluded_count);
     60     // The layer outputs one quad, which is partially occluded.
     61     EXPECT_EQ(1u, impl.quad_list().size());
     62     EXPECT_EQ(1u, partially_occluded_count);
     63   }
     64 }
     65 
     66 }  // namespace
     67 }  // namespace cc
     68