OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/quad_culler.h" | 5 #include "cc/quad_culler.h" |
6 | 6 |
7 #include "cc/append_quads_data.h" | 7 #include "cc/append_quads_data.h" |
8 #include "cc/layer_tiling_data.h" | 8 #include "cc/layer_tiling_data.h" |
9 #include "cc/math_util.h" | 9 #include "cc/math_util.h" |
10 #include "cc/occlusion_tracker.h" | 10 #include "cc/occlusion_tracker.h" |
11 #include "cc/overdraw_metrics.h" | 11 #include "cc/overdraw_metrics.h" |
12 #include "cc/single_thread_proxy.h" | 12 #include "cc/single_thread_proxy.h" |
| 13 #include "cc/test/fake_impl_proxy.h" |
| 14 #include "cc/test/fake_layer_tree_host_impl.h" |
13 #include "cc/tile_draw_quad.h" | 15 #include "cc/tile_draw_quad.h" |
14 #include "cc/tiled_layer_impl.h" | 16 #include "cc/tiled_layer_impl.h" |
15 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
17 #include "ui/gfx/transform.h" | 19 #include "ui/gfx/transform.h" |
18 | 20 |
19 namespace cc { | 21 namespace cc { |
20 namespace { | 22 namespace { |
21 | 23 |
22 class TestOcclusionTrackerImpl : public OcclusionTrackerImpl { | 24 class TestOcclusionTrackerImpl : public OcclusionTrackerImpl { |
23 public: | 25 public: |
24 TestOcclusionTrackerImpl(const gfx::Rect& scissorRectInScreen, bool recordMe
tricsForFrame = true) | 26 TestOcclusionTrackerImpl(const gfx::Rect& scissorRectInScreen, bool recordMe
tricsForFrame = true) |
25 : OcclusionTrackerImpl(scissorRectInScreen, recordMetricsForFrame) | 27 : OcclusionTrackerImpl(scissorRectInScreen, recordMetricsForFrame) |
26 , m_scissorRectInScreen(scissorRectInScreen) | 28 , m_scissorRectInScreen(scissorRectInScreen) |
27 { | 29 { |
28 } | 30 } |
29 | 31 |
30 protected: | 32 protected: |
31 virtual gfx::Rect layerScissorRectInTargetSurface(const LayerImpl* layer) co
nst { return m_scissorRectInScreen; } | 33 virtual gfx::Rect layerScissorRectInTargetSurface(const LayerImpl* layer) co
nst { return m_scissorRectInScreen; } |
32 | 34 |
33 private: | 35 private: |
34 gfx::Rect m_scissorRectInScreen; | 36 gfx::Rect m_scissorRectInScreen; |
35 }; | 37 }; |
36 | 38 |
37 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl, Lay
erIteratorActions::FrontToBack> LayerIteratorType; | 39 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl, Lay
erIteratorActions::FrontToBack> LayerIteratorType; |
38 | 40 |
39 static scoped_ptr<TiledLayerImpl> makeLayer(TiledLayerImpl* parent, const gfx::T
ransform& drawTransform, const gfx::Rect& layerRect, float opacity, bool opaque,
const gfx::Rect& layerOpaqueRect, std::vector<LayerImpl*>& surfaceLayerList) | 41 class QuadCullerTest : public testing::Test |
40 { | 42 { |
41 scoped_ptr<TiledLayerImpl> layer = TiledLayerImpl::create(1); | 43 public: |
42 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(gfx::Size(100, 1
00), LayerTilingData::NoBorderTexels); | 44 QuadCullerTest() |
43 tiler->setBounds(layerRect.size()); | 45 : m_hostImpl(&m_proxy) |
44 layer->setTilingData(*tiler); | 46 { |
45 layer->setSkipsDraw(false); | 47 } |
46 layer->drawProperties().target_space_transform = drawTransform; | |
47 layer->drawProperties().screen_space_transform = drawTransform; | |
48 layer->drawProperties().visible_content_rect = layerRect; | |
49 layer->drawProperties().opacity = opacity; | |
50 layer->setContentsOpaque(opaque); | |
51 layer->setBounds(layerRect.size()); | |
52 layer->setContentBounds(layerRect.size()); | |
53 | 48 |
54 ResourceProvider::ResourceId resourceId = 1; | 49 scoped_ptr<TiledLayerImpl> makeLayer(TiledLayerImpl* parent, const gfx::Tran
sform& drawTransform, const gfx::Rect& layerRect, float opacity, bool opaque, co
nst gfx::Rect& layerOpaqueRect, std::vector<LayerImpl*>& surfaceLayerList) |
55 for (int i = 0; i < tiler->numTilesX(); ++i) | 50 { |
56 for (int j = 0; j < tiler->numTilesY(); ++j) { | 51 scoped_ptr<TiledLayerImpl> layer = TiledLayerImpl::create(&m_hostImpl, 1
); |
57 gfx::Rect tileOpaqueRect = opaque ? tiler->tileBounds(i, j) : gfx::Int
ersectRects(tiler->tileBounds(i, j), layerOpaqueRect); | 52 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(gfx::Size(10
0, 100), LayerTilingData::NoBorderTexels); |
58 layer->pushTileProperties(i, j, resourceId++, tileOpaqueRect, false)
; | 53 tiler->setBounds(layerRect.size()); |
| 54 layer->setTilingData(*tiler); |
| 55 layer->setSkipsDraw(false); |
| 56 layer->drawProperties().target_space_transform = drawTransform; |
| 57 layer->drawProperties().screen_space_transform = drawTransform; |
| 58 layer->drawProperties().visible_content_rect = layerRect; |
| 59 layer->drawProperties().opacity = opacity; |
| 60 layer->setContentsOpaque(opaque); |
| 61 layer->setBounds(layerRect.size()); |
| 62 layer->setContentBounds(layerRect.size()); |
| 63 |
| 64 ResourceProvider::ResourceId resourceId = 1; |
| 65 for (int i = 0; i < tiler->numTilesX(); ++i) |
| 66 for (int j = 0; j < tiler->numTilesY(); ++j) { |
| 67 gfx::Rect tileOpaqueRect = opaque ? tiler->tileBounds(i, j) : gfx:
:IntersectRects(tiler->tileBounds(i, j), layerOpaqueRect); |
| 68 layer->pushTileProperties(i, j, resourceId++, tileOpaqueRect, fa
lse); |
| 69 } |
| 70 |
| 71 gfx::Rect rectInTarget = MathUtil::mapClippedRect(layer->drawTransform()
, layer->visibleContentRect()); |
| 72 if (!parent) { |
| 73 layer->createRenderSurface(); |
| 74 surfaceLayerList.push_back(layer.get()); |
| 75 layer->renderSurface()->layerList().push_back(layer.get()); |
| 76 } else { |
| 77 layer->drawProperties().render_target = parent->renderTarget(); |
| 78 parent->renderSurface()->layerList().push_back(layer.get()); |
| 79 rectInTarget.Union(MathUtil::mapClippedRect(parent->drawTransform(),
parent->visibleContentRect())); |
59 } | 80 } |
| 81 layer->drawProperties().drawable_content_rect = rectInTarget; |
60 | 82 |
61 gfx::Rect rectInTarget = MathUtil::mapClippedRect(layer->drawTransform(), la
yer->visibleContentRect()); | 83 return layer.Pass(); |
62 if (!parent) { | |
63 layer->createRenderSurface(); | |
64 surfaceLayerList.push_back(layer.get()); | |
65 layer->renderSurface()->layerList().push_back(layer.get()); | |
66 } else { | |
67 layer->drawProperties().render_target = parent->renderTarget(); | |
68 parent->renderSurface()->layerList().push_back(layer.get()); | |
69 rectInTarget.Union(MathUtil::mapClippedRect(parent->drawTransform(), par
ent->visibleContentRect())); | |
70 } | 84 } |
71 layer->drawProperties().drawable_content_rect = rectInTarget; | |
72 | 85 |
73 return layer.Pass(); | 86 void appendQuads(QuadList& quadList, SharedQuadStateList& sharedStateList, T
iledLayerImpl* layer, LayerIteratorType& it, OcclusionTrackerImpl& occlusionTrac
ker) |
74 } | 87 { |
| 88 occlusionTracker.enterLayer(it); |
| 89 QuadCuller quadCuller(quadList, sharedStateList, layer, occlusionTracker
, false, false); |
| 90 AppendQuadsData data; |
| 91 layer->appendQuads(quadCuller, data); |
| 92 occlusionTracker.leaveLayer(it); |
| 93 ++it; |
| 94 } |
75 | 95 |
76 static void appendQuads(QuadList& quadList, SharedQuadStateList& sharedStateList
, TiledLayerImpl* layer, LayerIteratorType& it, OcclusionTrackerImpl& occlusionT
racker) | 96 protected: |
77 { | 97 FakeImplProxy m_proxy; |
78 occlusionTracker.enterLayer(it); | 98 FakeLayerTreeHostImpl m_hostImpl; |
79 QuadCuller quadCuller(quadList, sharedStateList, layer, occlusionTracker, fa
lse, false); | 99 }; |
80 AppendQuadsData data; | |
81 layer->appendQuads(quadCuller, data); | |
82 occlusionTracker.leaveLayer(it); | |
83 ++it; | |
84 } | |
85 | 100 |
86 #define DECLARE_AND_INITIALIZE_TEST_QUADS \ | 101 #define DECLARE_AND_INITIALIZE_TEST_QUADS \ |
87 QuadList quadList; \ | 102 QuadList quadList; \ |
88 SharedQuadStateList sharedStateList; \ | 103 SharedQuadStateList sharedStateList; \ |
89 std::vector<LayerImpl*> renderSurfaceLayerList; \ | 104 std::vector<LayerImpl*> renderSurfaceLayerList; \ |
90 gfx::Transform childTransform; \ | 105 gfx::Transform childTransform; \ |
91 gfx::Size rootSize = gfx::Size(300, 300); \ | 106 gfx::Size rootSize = gfx::Size(300, 300); \ |
92 gfx::Rect rootRect = gfx::Rect(rootSize); \ | 107 gfx::Rect rootRect = gfx::Rect(rootSize); \ |
93 gfx::Size childSize = gfx::Size(200, 200); \ | 108 gfx::Size childSize = gfx::Size(200, 200); \ |
94 gfx::Rect childRect = gfx::Rect(childSize); | 109 gfx::Rect childRect = gfx::Rect(childSize); |
95 | 110 |
96 TEST(QuadCullerTest, verifyNoCulling) | 111 TEST_F(QuadCullerTest, verifyNoCulling) |
97 { | 112 { |
98 DECLARE_AND_INITIALIZE_TEST_QUADS | 113 DECLARE_AND_INITIALIZE_TEST_QUADS |
99 | 114 |
100 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 115 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
101 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, false, gfx::Rect(), renderSurfaceLayerList); | 116 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, false, gfx::Rect(), renderSurfaceLayerList); |
102 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 117 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
103 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 118 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
104 | 119 |
105 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 120 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
106 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 121 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
107 EXPECT_EQ(quadList.size(), 13u); | 122 EXPECT_EQ(quadList.size(), 13u); |
108 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 123 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
109 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); | 124 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); |
110 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 125 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
111 } | 126 } |
112 | 127 |
113 TEST(QuadCullerTest, verifyCullChildLinesUpTopLeft) | 128 TEST_F(QuadCullerTest, verifyCullChildLinesUpTopLeft) |
114 { | 129 { |
115 DECLARE_AND_INITIALIZE_TEST_QUADS | 130 DECLARE_AND_INITIALIZE_TEST_QUADS |
116 | 131 |
117 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 132 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
118 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 133 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
119 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 134 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
120 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 135 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
121 | 136 |
122 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 137 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
123 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 138 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
124 EXPECT_EQ(quadList.size(), 9u); | 139 EXPECT_EQ(quadList.size(), 9u); |
125 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 140 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
126 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 141 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
127 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); | 142 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); |
128 } | 143 } |
129 | 144 |
130 TEST(QuadCullerTest, verifyCullWhenChildOpacityNotOne) | 145 TEST_F(QuadCullerTest, verifyCullWhenChildOpacityNotOne) |
131 { | 146 { |
132 DECLARE_AND_INITIALIZE_TEST_QUADS | 147 DECLARE_AND_INITIALIZE_TEST_QUADS |
133 | 148 |
134 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 149 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
135 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 0.9f, true, gfx::Rect(), renderSurfaceLayerList); | 150 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 0.9f, true, gfx::Rect(), renderSurfaceLayerList); |
136 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 151 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
137 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 152 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
138 | 153 |
139 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 154 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
140 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 155 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
141 EXPECT_EQ(quadList.size(), 13u); | 156 EXPECT_EQ(quadList.size(), 13u); |
142 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 157 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
143 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); | 158 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); |
144 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 159 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
145 } | 160 } |
146 | 161 |
147 TEST(QuadCullerTest, verifyCullWhenChildOpaqueFlagFalse) | 162 TEST_F(QuadCullerTest, verifyCullWhenChildOpaqueFlagFalse) |
148 { | 163 { |
149 DECLARE_AND_INITIALIZE_TEST_QUADS | 164 DECLARE_AND_INITIALIZE_TEST_QUADS |
150 | 165 |
151 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 166 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
152 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, gfx::Rect(), renderSurfaceLayerList); | 167 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, gfx::Rect(), renderSurfaceLayerList); |
153 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 168 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
154 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 169 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
155 | 170 |
156 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 171 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
157 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 172 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
158 EXPECT_EQ(quadList.size(), 13u); | 173 EXPECT_EQ(quadList.size(), 13u); |
159 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 174 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
160 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); | 175 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); |
161 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 176 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
162 } | 177 } |
163 | 178 |
164 TEST(QuadCullerTest, verifyCullCenterTileOnly) | 179 TEST_F(QuadCullerTest, verifyCullCenterTileOnly) |
165 { | 180 { |
166 DECLARE_AND_INITIALIZE_TEST_QUADS | 181 DECLARE_AND_INITIALIZE_TEST_QUADS |
167 | 182 |
168 childTransform.Translate(50, 50); | 183 childTransform.Translate(50, 50); |
169 | 184 |
170 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 185 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
171 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 186 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
172 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 187 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
173 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 188 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
174 | 189 |
(...skipping 14 matching lines...) Expand all Loading... |
189 | 204 |
190 gfx::Rect quadVisibleRect6 = quadList[10]->visible_rect; | 205 gfx::Rect quadVisibleRect6 = quadList[10]->visible_rect; |
191 EXPECT_EQ(quadVisibleRect6.height(), 50); | 206 EXPECT_EQ(quadVisibleRect6.height(), 50); |
192 EXPECT_EQ(quadVisibleRect6.y(), 250); | 207 EXPECT_EQ(quadVisibleRect6.y(), 250); |
193 | 208 |
194 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100000,
1); | 209 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100000,
1); |
195 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 210 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
196 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 300
00, 1); | 211 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 300
00, 1); |
197 } | 212 } |
198 | 213 |
199 TEST(QuadCullerTest, verifyCullCenterTileNonIntegralSize1) | 214 TEST_F(QuadCullerTest, verifyCullCenterTileNonIntegralSize1) |
200 { | 215 { |
201 DECLARE_AND_INITIALIZE_TEST_QUADS | 216 DECLARE_AND_INITIALIZE_TEST_QUADS |
202 | 217 |
203 childTransform.Translate(100, 100); | 218 childTransform.Translate(100, 100); |
204 | 219 |
205 // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to
make | 220 // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to
make |
206 // sure it doesn't get culled due to transform rounding. | 221 // sure it doesn't get culled due to transform rounding. |
207 gfx::Transform rootTransform; | 222 gfx::Transform rootTransform; |
208 rootTransform.Translate(99.1, 99.1); | 223 rootTransform.Translate(99.1, 99.1); |
209 rootTransform.Scale(1.018, 1.018); | 224 rootTransform.Scale(1.018, 1.018); |
210 | 225 |
211 rootRect = childRect = gfx::Rect(0, 0, 100, 100); | 226 rootRect = childRect = gfx::Rect(0, 0, 100, 100); |
212 | 227 |
213 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect,
1, true, gfx::Rect(), renderSurfaceLayerList); | 228 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect,
1, true, gfx::Rect(), renderSurfaceLayerList); |
214 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 229 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
215 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 230 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
216 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 231 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
217 | 232 |
218 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 233 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
219 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 234 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
220 EXPECT_EQ(quadList.size(), 2u); | 235 EXPECT_EQ(quadList.size(), 2u); |
221 | 236 |
222 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 20363, 1
); | 237 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 20363, 1
); |
223 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 238 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
224 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 239 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
225 } | 240 } |
226 | 241 |
227 TEST(QuadCullerTest, verifyCullCenterTileNonIntegralSize2) | 242 TEST_F(QuadCullerTest, verifyCullCenterTileNonIntegralSize2) |
228 { | 243 { |
229 DECLARE_AND_INITIALIZE_TEST_QUADS | 244 DECLARE_AND_INITIALIZE_TEST_QUADS |
230 | 245 |
231 // Make the child's quad slightly smaller than, and centred over, the root l
ayer tile. | 246 // Make the child's quad slightly smaller than, and centred over, the root l
ayer tile. |
232 // Verify the child does not cause the quad below to be culled due to roundi
ng. | 247 // Verify the child does not cause the quad below to be culled due to roundi
ng. |
233 childTransform.Translate(100.1, 100.1); | 248 childTransform.Translate(100.1, 100.1); |
234 childTransform.Scale(0.982, 0.982); | 249 childTransform.Scale(0.982, 0.982); |
235 | 250 |
236 gfx::Transform rootTransform; | 251 gfx::Transform rootTransform; |
237 rootTransform.Translate(100, 100); | 252 rootTransform.Translate(100, 100); |
238 | 253 |
239 rootRect = childRect = gfx::Rect(0, 0, 100, 100); | 254 rootRect = childRect = gfx::Rect(0, 0, 100, 100); |
240 | 255 |
241 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect,
1, true, gfx::Rect(), renderSurfaceLayerList); | 256 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect,
1, true, gfx::Rect(), renderSurfaceLayerList); |
242 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 257 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
243 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 258 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
244 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 259 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
245 | 260 |
246 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 261 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
247 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 262 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
248 EXPECT_EQ(quadList.size(), 2u); | 263 EXPECT_EQ(quadList.size(), 2u); |
249 | 264 |
250 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 19643, 1
); | 265 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 19643, 1
); |
251 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 266 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
252 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 267 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
253 } | 268 } |
254 | 269 |
255 TEST(QuadCullerTest, verifyCullChildLinesUpBottomRight) | 270 TEST_F(QuadCullerTest, verifyCullChildLinesUpBottomRight) |
256 { | 271 { |
257 DECLARE_AND_INITIALIZE_TEST_QUADS | 272 DECLARE_AND_INITIALIZE_TEST_QUADS |
258 | 273 |
259 childTransform.Translate(100, 100); | 274 childTransform.Translate(100, 100); |
260 | 275 |
261 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 276 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
262 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 277 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
263 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 278 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
264 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 279 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
265 | 280 |
266 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 281 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
267 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 282 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
268 EXPECT_EQ(quadList.size(), 9u); | 283 EXPECT_EQ(quadList.size(), 9u); |
269 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 284 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
270 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 285 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
271 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); | 286 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); |
272 } | 287 } |
273 | 288 |
274 TEST(QuadCullerTest, verifyCullSubRegion) | 289 TEST_F(QuadCullerTest, verifyCullSubRegion) |
275 { | 290 { |
276 DECLARE_AND_INITIALIZE_TEST_QUADS | 291 DECLARE_AND_INITIALIZE_TEST_QUADS |
277 | 292 |
278 childTransform.Translate(50, 50); | 293 childTransform.Translate(50, 50); |
279 | 294 |
280 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 295 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
281 gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y
() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); | 296 gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y
() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); |
282 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); | 297 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
283 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 298 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
284 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 299 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
285 | 300 |
286 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 301 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
287 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 302 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
288 EXPECT_EQ(quadList.size(), 12u); | 303 EXPECT_EQ(quadList.size(), 12u); |
289 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 304 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
290 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); | 305 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); |
291 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); | 306 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); |
292 } | 307 } |
293 | 308 |
294 TEST(QuadCullerTest, verifyCullSubRegion2) | 309 TEST_F(QuadCullerTest, verifyCullSubRegion2) |
295 { | 310 { |
296 DECLARE_AND_INITIALIZE_TEST_QUADS | 311 DECLARE_AND_INITIALIZE_TEST_QUADS |
297 | 312 |
298 childTransform.Translate(50, 10); | 313 childTransform.Translate(50, 10); |
299 | 314 |
300 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 315 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
301 gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y
() + childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); | 316 gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y
() + childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); |
302 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); | 317 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
303 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 318 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
304 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 319 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
305 | 320 |
306 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 321 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
307 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 322 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
308 EXPECT_EQ(quadList.size(), 12u); | 323 EXPECT_EQ(quadList.size(), 12u); |
309 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 324 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
310 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 250
00, 1); | 325 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 250
00, 1); |
311 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 150
00, 1); | 326 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 150
00, 1); |
312 } | 327 } |
313 | 328 |
314 TEST(QuadCullerTest, verifyCullSubRegionCheckOvercull) | 329 TEST_F(QuadCullerTest, verifyCullSubRegionCheckOvercull) |
315 { | 330 { |
316 DECLARE_AND_INITIALIZE_TEST_QUADS | 331 DECLARE_AND_INITIALIZE_TEST_QUADS |
317 | 332 |
318 childTransform.Translate(50, 49); | 333 childTransform.Translate(50, 49); |
319 | 334 |
320 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 335 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
321 gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y
() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); | 336 gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y
() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); |
322 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); | 337 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
323 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 338 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
324 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 339 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
325 | 340 |
326 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 341 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
327 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 342 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
328 EXPECT_EQ(quadList.size(), 13u); | 343 EXPECT_EQ(quadList.size(), 13u); |
329 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 344 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
330 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); | 345 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); |
331 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); | 346 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); |
332 } | 347 } |
333 | 348 |
334 TEST(QuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) | 349 TEST_F(QuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) |
335 { | 350 { |
336 DECLARE_AND_INITIALIZE_TEST_QUADS | 351 DECLARE_AND_INITIALIZE_TEST_QUADS |
337 | 352 |
338 // Use a small rotation so as to not disturb the geometry significantly. | 353 // Use a small rotation so as to not disturb the geometry significantly. |
339 childTransform.Rotate(1); | 354 childTransform.Rotate(1); |
340 | 355 |
341 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 356 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
342 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 357 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTran
sform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
343 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 358 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
344 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 359 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
345 | 360 |
346 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 361 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
347 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 362 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
348 EXPECT_EQ(quadList.size(), 13u); | 363 EXPECT_EQ(quadList.size(), 13u); |
349 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000,
1); | 364 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000,
1); |
350 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 365 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
351 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 366 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
352 } | 367 } |
353 | 368 |
354 // This test requires some explanation: here we are rotating the quads to be cul
led. | 369 // This test requires some explanation: here we are rotating the quads to be cul
led. |
355 // The 2x2 tile child layer remains in the top-left corner, unrotated, but the 3
x3 | 370 // The 2x2 tile child layer remains in the top-left corner, unrotated, but the 3
x3 |
356 // tile parent layer is rotated by 1 degree. Of the four tiles the child would | 371 // tile parent layer is rotated by 1 degree. Of the four tiles the child would |
357 // normally occlude, three will move (slightly) out from under the child layer,
and | 372 // normally occlude, three will move (slightly) out from under the child layer,
and |
358 // one moves further under the child. Only this last tile should be culled. | 373 // one moves further under the child. Only this last tile should be culled. |
359 TEST(QuadCullerTest, verifyNonAxisAlignedQuadsSafelyCulled) | 374 TEST_F(QuadCullerTest, verifyNonAxisAlignedQuadsSafelyCulled) |
360 { | 375 { |
361 DECLARE_AND_INITIALIZE_TEST_QUADS | 376 DECLARE_AND_INITIALIZE_TEST_QUADS |
362 | 377 |
363 // Use a small rotation so as to not disturb the geometry significantly. | 378 // Use a small rotation so as to not disturb the geometry significantly. |
364 gfx::Transform parentTransform; | 379 gfx::Transform parentTransform; |
365 parentTransform.Rotate(1); | 380 parentTransform.Rotate(1); |
366 | 381 |
367 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, parentTransform, rootRec
t, 1, true, gfx::Rect(), renderSurfaceLayerList); | 382 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, parentTransform, rootRec
t, 1, true, gfx::Rect(), renderSurfaceLayerList); |
368 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 383 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
369 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; | 384 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000))
; |
370 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 385 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
371 | 386 |
372 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 387 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
373 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 388 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
374 EXPECT_EQ(quadList.size(), 12u); | 389 EXPECT_EQ(quadList.size(), 12u); |
375 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100600,
1); | 390 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100600,
1); |
376 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 391 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
377 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 294
00, 1); | 392 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 294
00, 1); |
378 } | 393 } |
379 | 394 |
380 TEST(QuadCullerTest, verifyCullOutsideScissorOverTile) | 395 TEST_F(QuadCullerTest, verifyCullOutsideScissorOverTile) |
381 { | 396 { |
382 DECLARE_AND_INITIALIZE_TEST_QUADS | 397 DECLARE_AND_INITIALIZE_TEST_QUADS |
383 | 398 |
384 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 399 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
385 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 400 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
386 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(200, 100, 100, 100)); | 401 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(200, 100, 100, 100)); |
387 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 402 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
388 | 403 |
389 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 404 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
390 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 405 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
391 EXPECT_EQ(quadList.size(), 1u); | 406 EXPECT_EQ(quadList.size(), 1u); |
392 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); | 407 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); |
393 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 408 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
394 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); | 409 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); |
395 } | 410 } |
396 | 411 |
397 TEST(QuadCullerTest, verifyCullOutsideScissorOverCulledTile) | 412 TEST_F(QuadCullerTest, verifyCullOutsideScissorOverCulledTile) |
398 { | 413 { |
399 DECLARE_AND_INITIALIZE_TEST_QUADS | 414 DECLARE_AND_INITIALIZE_TEST_QUADS |
400 | 415 |
401 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 416 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
402 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 417 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
403 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(100, 100, 100, 100)); | 418 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(100, 100, 100, 100)); |
404 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 419 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
405 | 420 |
406 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 421 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
407 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 422 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
408 EXPECT_EQ(quadList.size(), 1u); | 423 EXPECT_EQ(quadList.size(), 1u); |
409 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); | 424 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); |
410 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 425 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
411 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); | 426 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); |
412 } | 427 } |
413 | 428 |
414 TEST(QuadCullerTest, verifyCullOutsideScissorOverPartialTiles) | 429 TEST_F(QuadCullerTest, verifyCullOutsideScissorOverPartialTiles) |
415 { | 430 { |
416 DECLARE_AND_INITIALIZE_TEST_QUADS | 431 DECLARE_AND_INITIALIZE_TEST_QUADS |
417 | 432 |
418 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 433 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
419 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 434 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
420 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(50, 50, 200, 200)); | 435 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(50, 50, 200, 200)); |
421 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 436 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
422 | 437 |
423 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 438 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
424 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 439 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
425 EXPECT_EQ(quadList.size(), 9u); | 440 EXPECT_EQ(quadList.size(), 9u); |
426 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 40000, 1
); | 441 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 40000, 1
); |
427 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 442 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
428 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 900
00, 1); | 443 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 900
00, 1); |
429 } | 444 } |
430 | 445 |
431 TEST(QuadCullerTest, verifyCullOutsideScissorOverNoTiles) | 446 TEST_F(QuadCullerTest, verifyCullOutsideScissorOverNoTiles) |
432 { | 447 { |
433 DECLARE_AND_INITIALIZE_TEST_QUADS | 448 DECLARE_AND_INITIALIZE_TEST_QUADS |
434 | 449 |
435 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 450 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
436 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 451 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
437 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(500, 500, 100, 100)); | 452 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(500, 500, 100, 100)); |
438 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 453 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
439 | 454 |
440 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 455 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
441 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 456 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
442 EXPECT_EQ(quadList.size(), 0u); | 457 EXPECT_EQ(quadList.size(), 0u); |
443 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); | 458 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); |
444 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 459 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
445 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 130
000, 1); | 460 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 130
000, 1); |
446 } | 461 } |
447 | 462 |
448 TEST(QuadCullerTest, verifyWithoutMetrics) | 463 TEST_F(QuadCullerTest, verifyWithoutMetrics) |
449 { | 464 { |
450 DECLARE_AND_INITIALIZE_TEST_QUADS | 465 DECLARE_AND_INITIALIZE_TEST_QUADS |
451 | 466 |
452 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); | 467 scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRe
ct, 1, true, gfx::Rect(), renderSurfaceLayerList); |
453 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); | 468 scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Tran
sform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); |
454 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(50, 50, 200, 200), false
); | 469 TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(50, 50, 200, 200), false
); |
455 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); | 470 LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); |
456 | 471 |
457 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 472 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
458 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 473 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
459 EXPECT_EQ(quadList.size(), 9u); | 474 EXPECT_EQ(quadList.size(), 9u); |
460 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); | 475 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); |
461 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 476 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
462 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 477 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
463 } | 478 } |
464 | 479 |
465 } // namespace | 480 } // namespace |
466 } // namespace cc | 481 } // namespace cc |
OLD | NEW |