| 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 |