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