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/surface_layer_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(SurfaceLayerImplTest, Occlusion) {
     14   gfx::Size layer_size(1000, 1000);
     15   gfx::Size viewport_size(1000, 1000);
     16 
     17   LayerTestCommon::LayerImplTest impl;
     18 
     19   SurfaceLayerImpl* surface_layer_impl =
     20       impl.AddChildToRoot<SurfaceLayerImpl>();
     21   surface_layer_impl->SetBounds(layer_size);
     22   surface_layer_impl->SetContentBounds(layer_size);
     23   surface_layer_impl->SetDrawsContent(true);
     24   SurfaceId surface_id(9);
     25   surface_layer_impl->SetSurfaceId(surface_id);
     26 
     27   impl.CalcDrawProps(viewport_size);
     28 
     29   {
     30     SCOPED_TRACE("No occlusion");
     31     gfx::Rect occluded;
     32     impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
     33 
     34     LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
     35                                                  gfx::Rect(layer_size));
     36     EXPECT_EQ(1u, impl.quad_list().size());
     37   }
     38 
     39   {
     40     SCOPED_TRACE("Full occlusion");
     41     gfx::Rect occluded(surface_layer_impl->visible_content_rect());
     42     impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
     43 
     44     LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
     45     EXPECT_EQ(impl.quad_list().size(), 0u);
     46   }
     47 
     48   {
     49     SCOPED_TRACE("Partial occlusion");
     50     gfx::Rect occluded(200, 0, 800, 1000);
     51     impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
     52 
     53     size_t partially_occluded_count = 0;
     54     LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
     55         impl.quad_list(),
     56         gfx::Rect(layer_size),
     57         occluded,
     58         &partially_occluded_count);
     59     // The layer outputs one quad, which is partially occluded.
     60     EXPECT_EQ(1u, impl.quad_list().size());
     61     EXPECT_EQ(1u, partially_occluded_count);
     62   }
     63 }
     64 
     65 }  // namespace
     66 }  // namespace cc
     67