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
10namespace cc {
11namespace {
12
13TEST(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::VerifyQuadsAreOccluded(
55        impl.quad_list(), occluded, &partially_occluded_count);
56    // The layer outputs one quad, which is partially occluded.
57    EXPECT_EQ(1u, impl.quad_list().size());
58    EXPECT_EQ(1u, partially_occluded_count);
59  }
60}
61
62}  // namespace
63}  // namespace cc
64