| 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "CCQuadCuller.h" | 7 #include "CCQuadCuller.h" |
| 8 | 8 |
| 9 #include "CCAppendQuadsData.h" | 9 #include "CCAppendQuadsData.h" |
| 10 #include "CCLayerTilingData.h" | 10 #include "CCLayerTilingData.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 protected: | 34 protected: |
| 35 virtual IntRect layerScissorRectInTargetSurface(const CCLayerImpl* layer) co
nst { return m_scissorRectInScreen; } | 35 virtual IntRect layerScissorRectInTargetSurface(const CCLayerImpl* layer) co
nst { return m_scissorRectInScreen; } |
| 36 | 36 |
| 37 private: | 37 private: |
| 38 IntRect m_scissorRectInScreen; | 38 IntRect m_scissorRectInScreen; |
| 39 }; | 39 }; |
| 40 | 40 |
| 41 typedef CCLayerIterator<CCLayerImpl, std::vector<CCLayerImpl*>, CCRenderSurface,
CCLayerIteratorActions::FrontToBack> CCLayerIteratorType; | 41 typedef CCLayerIterator<CCLayerImpl, std::vector<CCLayerImpl*>, CCRenderSurface,
CCLayerIteratorActions::FrontToBack> CCLayerIteratorType; |
| 42 | 42 |
| 43 static PassOwnPtr<CCTiledLayerImpl> makeLayer(CCTiledLayerImpl* parent, const We
bTransformationMatrix& drawTransform, const IntRect& layerRect, float opacity, b
ool opaque, const IntRect& layerOpaqueRect, std::vector<CCLayerImpl*>& surfaceLa
yerList) | 43 static scoped_ptr<CCTiledLayerImpl> makeLayer(CCTiledLayerImpl* parent, const We
bTransformationMatrix& drawTransform, const IntRect& layerRect, float opacity, b
ool opaque, const IntRect& layerOpaqueRect, std::vector<CCLayerImpl*>& surfaceLa
yerList) |
| 44 { | 44 { |
| 45 OwnPtr<CCTiledLayerImpl> layer = CCTiledLayerImpl::create(1); | 45 scoped_ptr<CCTiledLayerImpl> layer = CCTiledLayerImpl::create(1); |
| 46 OwnPtr<CCLayerTilingData> tiler = CCLayerTilingData::create(IntSize(100, 100
), CCLayerTilingData::NoBorderTexels); | 46 OwnPtr<CCLayerTilingData> tiler = CCLayerTilingData::create(IntSize(100, 100
), CCLayerTilingData::NoBorderTexels); |
| 47 tiler->setBounds(layerRect.size()); | 47 tiler->setBounds(layerRect.size()); |
| 48 layer->setTilingData(*tiler); | 48 layer->setTilingData(*tiler); |
| 49 layer->setSkipsDraw(false); | 49 layer->setSkipsDraw(false); |
| 50 layer->setDrawTransform(drawTransform); | 50 layer->setDrawTransform(drawTransform); |
| 51 layer->setScreenSpaceTransform(drawTransform); | 51 layer->setScreenSpaceTransform(drawTransform); |
| 52 layer->setVisibleContentRect(layerRect); | 52 layer->setVisibleContentRect(layerRect); |
| 53 layer->setDrawOpacity(opacity); | 53 layer->setDrawOpacity(opacity); |
| 54 layer->setContentsOpaque(opaque); | 54 layer->setContentsOpaque(opaque); |
| 55 layer->setBounds(layerRect.size()); | 55 layer->setBounds(layerRect.size()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 67 layer->createRenderSurface(); | 67 layer->createRenderSurface(); |
| 68 surfaceLayerList.push_back(layer.get()); | 68 surfaceLayerList.push_back(layer.get()); |
| 69 layer->renderSurface()->layerList().push_back(layer.get()); | 69 layer->renderSurface()->layerList().push_back(layer.get()); |
| 70 } else { | 70 } else { |
| 71 layer->setRenderTarget(parent->renderTarget()); | 71 layer->setRenderTarget(parent->renderTarget()); |
| 72 parent->renderSurface()->layerList().push_back(layer.get()); | 72 parent->renderSurface()->layerList().push_back(layer.get()); |
| 73 rectInTarget.unite(CCMathUtil::mapClippedRect(parent->drawTransform(), p
arent->visibleContentRect())); | 73 rectInTarget.unite(CCMathUtil::mapClippedRect(parent->drawTransform(), p
arent->visibleContentRect())); |
| 74 } | 74 } |
| 75 layer->setDrawableContentRect(rectInTarget); | 75 layer->setDrawableContentRect(rectInTarget); |
| 76 | 76 |
| 77 return layer.release(); | 77 return layer.Pass(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 static void appendQuads(CCQuadList& quadList, CCSharedQuadStateList& sharedState
List, CCTiledLayerImpl* layer, CCLayerIteratorType& it, CCOcclusionTrackerImpl&
occlusionTracker) | 80 static void appendQuads(CCQuadList& quadList, CCSharedQuadStateList& sharedState
List, CCTiledLayerImpl* layer, CCLayerIteratorType& it, CCOcclusionTrackerImpl&
occlusionTracker) |
| 81 { | 81 { |
| 82 occlusionTracker.enterLayer(it); | 82 occlusionTracker.enterLayer(it); |
| 83 CCQuadCuller quadCuller(quadList, sharedStateList, layer, &occlusionTracker,
false, false); | 83 CCQuadCuller quadCuller(quadList, sharedStateList, layer, &occlusionTracker,
false, false); |
| 84 CCAppendQuadsData data; | 84 CCAppendQuadsData data; |
| 85 layer->appendQuads(quadCuller, data); | 85 layer->appendQuads(quadCuller, data); |
| 86 occlusionTracker.leaveLayer(it); | 86 occlusionTracker.leaveLayer(it); |
| 87 ++it; | 87 ++it; |
| 88 } | 88 } |
| 89 | 89 |
| 90 #define DECLARE_AND_INITIALIZE_TEST_QUADS \ | 90 #define DECLARE_AND_INITIALIZE_TEST_QUADS \ |
| 91 DebugScopedSetImplThread impl; \ | 91 DebugScopedSetImplThread impl; \ |
| 92 CCQuadList quadList; \ | 92 CCQuadList quadList; \ |
| 93 CCSharedQuadStateList sharedStateList; \ | 93 CCSharedQuadStateList sharedStateList; \ |
| 94 std::vector<CCLayerImpl*> renderSurfaceLayerList; \ | 94 std::vector<CCLayerImpl*> renderSurfaceLayerList; \ |
| 95 WebTransformationMatrix childTransform; \ | 95 WebTransformationMatrix childTransform; \ |
| 96 IntSize rootSize = IntSize(300, 300); \ | 96 IntSize rootSize = IntSize(300, 300); \ |
| 97 IntRect rootRect = IntRect(IntPoint(), rootSize); \ | 97 IntRect rootRect = IntRect(IntPoint(), rootSize); \ |
| 98 IntSize childSize = IntSize(200, 200); \ | 98 IntSize childSize = IntSize(200, 200); \ |
| 99 IntRect childRect = IntRect(IntPoint(), childSize); | 99 IntRect childRect = IntRect(IntPoint(), childSize); |
| 100 | 100 |
| 101 TEST(CCQuadCullerTest, verifyNoCulling) | 101 TEST(CCQuadCullerTest, verifyNoCulling) |
| 102 { | 102 { |
| 103 DECLARE_AND_INITIALIZE_TEST_QUADS | 103 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 104 | 104 |
| 105 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 105 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 106 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, false, IntRect(), renderSurfaceLayerList); | 106 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, false, IntRect(), renderSurfaceLayerList); |
| 107 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 107 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 108 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 108 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 109 | 109 |
| 110 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 110 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 111 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 111 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 112 EXPECT_EQ(quadList.size(), 13u); | 112 EXPECT_EQ(quadList.size(), 13u); |
| 113 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 113 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 114 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); | 114 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); |
| 115 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 115 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 116 } | 116 } |
| 117 | 117 |
| 118 TEST(CCQuadCullerTest, verifyCullChildLinesUpTopLeft) | 118 TEST(CCQuadCullerTest, verifyCullChildLinesUpTopLeft) |
| 119 { | 119 { |
| 120 DECLARE_AND_INITIALIZE_TEST_QUADS | 120 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 121 | 121 |
| 122 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 122 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 123 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 123 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 124 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 124 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 125 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 125 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 126 | 126 |
| 127 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 127 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 128 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 128 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 129 EXPECT_EQ(quadList.size(), 9u); | 129 EXPECT_EQ(quadList.size(), 9u); |
| 130 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 130 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 131 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 131 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 132 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); | 132 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); |
| 133 } | 133 } |
| 134 | 134 |
| 135 TEST(CCQuadCullerTest, verifyCullWhenChildOpacityNotOne) | 135 TEST(CCQuadCullerTest, verifyCullWhenChildOpacityNotOne) |
| 136 { | 136 { |
| 137 DECLARE_AND_INITIALIZE_TEST_QUADS | 137 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 138 | 138 |
| 139 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 139 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 140 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 0.9f, true, IntRect(), renderSurfaceLayerList); | 140 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 0.9f, true, IntRect(), renderSurfaceLayerList); |
| 141 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 141 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 142 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 142 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 143 | 143 |
| 144 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 144 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 145 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 145 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 146 EXPECT_EQ(quadList.size(), 13u); | 146 EXPECT_EQ(quadList.size(), 13u); |
| 147 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 147 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 148 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); | 148 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); |
| 149 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 149 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 150 } | 150 } |
| 151 | 151 |
| 152 TEST(CCQuadCullerTest, verifyCullWhenChildOpaqueFlagFalse) | 152 TEST(CCQuadCullerTest, verifyCullWhenChildOpaqueFlagFalse) |
| 153 { | 153 { |
| 154 DECLARE_AND_INITIALIZE_TEST_QUADS | 154 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 155 | 155 |
| 156 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 156 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 157 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, false, IntRect(), renderSurfaceLayerList); | 157 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, false, IntRect(), renderSurfaceLayerList); |
| 158 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 158 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 159 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 159 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 160 | 160 |
| 161 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 161 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 162 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 162 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 163 EXPECT_EQ(quadList.size(), 13u); | 163 EXPECT_EQ(quadList.size(), 13u); |
| 164 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 164 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 165 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); | 165 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 400
00, 1); |
| 166 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 166 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 167 } | 167 } |
| 168 | 168 |
| 169 TEST(CCQuadCullerTest, verifyCullCenterTileOnly) | 169 TEST(CCQuadCullerTest, verifyCullCenterTileOnly) |
| 170 { | 170 { |
| 171 DECLARE_AND_INITIALIZE_TEST_QUADS | 171 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 172 | 172 |
| 173 childTransform.translate(50, 50); | 173 childTransform.translate(50, 50); |
| 174 | 174 |
| 175 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 175 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 176 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, true, IntRect(), renderSurfaceLayerList); | 176 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 177 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 177 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 178 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 178 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 179 | 179 |
| 180 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 180 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 181 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 181 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 182 ASSERT_EQ(quadList.size(), 12u); | 182 ASSERT_EQ(quadList.size(), 12u); |
| 183 | 183 |
| 184 IntRect quadVisibleRect1 = quadList[5]->quadVisibleRect(); | 184 IntRect quadVisibleRect1 = quadList[5]->quadVisibleRect(); |
| 185 EXPECT_EQ(quadVisibleRect1.height(), 50); | 185 EXPECT_EQ(quadVisibleRect1.height(), 50); |
| 186 | 186 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 208 childTransform.translate(100, 100); | 208 childTransform.translate(100, 100); |
| 209 | 209 |
| 210 // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to
make | 210 // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to
make |
| 211 // sure it doesn't get culled due to transform rounding. | 211 // sure it doesn't get culled due to transform rounding. |
| 212 WebTransformationMatrix rootTransform; | 212 WebTransformationMatrix rootTransform; |
| 213 rootTransform.translate(99.1, 99.1); | 213 rootTransform.translate(99.1, 99.1); |
| 214 rootTransform.scale(1.018); | 214 rootTransform.scale(1.018); |
| 215 | 215 |
| 216 rootRect = childRect = IntRect(0, 0, 100, 100); | 216 rootRect = childRect = IntRect(0, 0, 100, 100); |
| 217 | 217 |
| 218 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect, 1
, true, IntRect(), renderSurfaceLayerList); | 218 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRec
t, 1, true, IntRect(), renderSurfaceLayerList); |
| 219 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, true, IntRect(), renderSurfaceLayerList); | 219 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 220 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 220 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 221 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 221 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 222 | 222 |
| 223 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 223 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 224 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 224 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 225 EXPECT_EQ(quadList.size(), 2u); | 225 EXPECT_EQ(quadList.size(), 2u); |
| 226 | 226 |
| 227 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 20363, 1
); | 227 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 20363, 1
); |
| 228 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 228 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 229 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 229 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 230 } | 230 } |
| 231 | 231 |
| 232 TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize2) | 232 TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize2) |
| 233 { | 233 { |
| 234 DECLARE_AND_INITIALIZE_TEST_QUADS | 234 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 235 | 235 |
| 236 // Make the child's quad slightly smaller than, and centred over, the root l
ayer tile. | 236 // Make the child's quad slightly smaller than, and centred over, the root l
ayer tile. |
| 237 // Verify the child does not cause the quad below to be culled due to roundi
ng. | 237 // Verify the child does not cause the quad below to be culled due to roundi
ng. |
| 238 childTransform.translate(100.1, 100.1); | 238 childTransform.translate(100.1, 100.1); |
| 239 childTransform.scale(0.982); | 239 childTransform.scale(0.982); |
| 240 | 240 |
| 241 WebTransformationMatrix rootTransform; | 241 WebTransformationMatrix rootTransform; |
| 242 rootTransform.translate(100, 100); | 242 rootTransform.translate(100, 100); |
| 243 | 243 |
| 244 rootRect = childRect = IntRect(0, 0, 100, 100); | 244 rootRect = childRect = IntRect(0, 0, 100, 100); |
| 245 | 245 |
| 246 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect, 1
, true, IntRect(), renderSurfaceLayerList); | 246 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRec
t, 1, true, IntRect(), renderSurfaceLayerList); |
| 247 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, true, IntRect(), renderSurfaceLayerList); | 247 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 248 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 248 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 249 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 249 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 250 | 250 |
| 251 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 251 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 252 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 252 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 253 EXPECT_EQ(quadList.size(), 2u); | 253 EXPECT_EQ(quadList.size(), 2u); |
| 254 | 254 |
| 255 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 19643, 1
); | 255 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 19643, 1
); |
| 256 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 256 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 257 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 257 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 258 } | 258 } |
| 259 | 259 |
| 260 TEST(CCQuadCullerTest, verifyCullChildLinesUpBottomRight) | 260 TEST(CCQuadCullerTest, verifyCullChildLinesUpBottomRight) |
| 261 { | 261 { |
| 262 DECLARE_AND_INITIALIZE_TEST_QUADS | 262 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 263 | 263 |
| 264 childTransform.translate(100, 100); | 264 childTransform.translate(100, 100); |
| 265 | 265 |
| 266 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 266 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 267 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, true, IntRect(), renderSurfaceLayerList); | 267 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 268 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 268 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 269 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 269 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 270 | 270 |
| 271 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 271 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 272 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 272 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 273 EXPECT_EQ(quadList.size(), 9u); | 273 EXPECT_EQ(quadList.size(), 9u); |
| 274 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 274 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 275 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 275 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 276 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); | 276 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 400
00, 1); |
| 277 } | 277 } |
| 278 | 278 |
| 279 TEST(CCQuadCullerTest, verifyCullSubRegion) | 279 TEST(CCQuadCullerTest, verifyCullSubRegion) |
| 280 { | 280 { |
| 281 DECLARE_AND_INITIALIZE_TEST_QUADS | 281 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 282 | 282 |
| 283 childTransform.translate(50, 50); | 283 childTransform.translate(50, 50); |
| 284 | 284 |
| 285 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 285 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 286 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y()
+ childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); | 286 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y()
+ childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); |
| 287 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); | 287 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
| 288 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 288 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 289 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 289 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 290 | 290 |
| 291 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 291 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 292 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 292 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 293 EXPECT_EQ(quadList.size(), 12u); | 293 EXPECT_EQ(quadList.size(), 12u); |
| 294 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 294 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 295 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); | 295 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); |
| 296 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); | 296 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); |
| 297 } | 297 } |
| 298 | 298 |
| 299 TEST(CCQuadCullerTest, verifyCullSubRegion2) | 299 TEST(CCQuadCullerTest, verifyCullSubRegion2) |
| 300 { | 300 { |
| 301 DECLARE_AND_INITIALIZE_TEST_QUADS | 301 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 302 | 302 |
| 303 childTransform.translate(50, 10); | 303 childTransform.translate(50, 10); |
| 304 | 304 |
| 305 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 305 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 306 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y()
+ childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); | 306 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y()
+ childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); |
| 307 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); | 307 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
| 308 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 308 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 309 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 309 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 310 | 310 |
| 311 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 311 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 312 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 312 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 313 EXPECT_EQ(quadList.size(), 12u); | 313 EXPECT_EQ(quadList.size(), 12u); |
| 314 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 314 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 315 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 250
00, 1); | 315 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 250
00, 1); |
| 316 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 150
00, 1); | 316 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 150
00, 1); |
| 317 } | 317 } |
| 318 | 318 |
| 319 TEST(CCQuadCullerTest, verifyCullSubRegionCheckOvercull) | 319 TEST(CCQuadCullerTest, verifyCullSubRegionCheckOvercull) |
| 320 { | 320 { |
| 321 DECLARE_AND_INITIALIZE_TEST_QUADS | 321 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 322 | 322 |
| 323 childTransform.translate(50, 49); | 323 childTransform.translate(50, 49); |
| 324 | 324 |
| 325 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 325 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 326 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y()
+ childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); | 326 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y()
+ childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); |
| 327 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); | 327 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
| 328 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 328 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 329 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 329 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 330 | 330 |
| 331 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 331 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 332 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 332 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 333 EXPECT_EQ(quadList.size(), 13u); | 333 EXPECT_EQ(quadList.size(), 13u); |
| 334 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); | 334 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1
); |
| 335 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); | 335 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 300
00, 1); |
| 336 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); | 336 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 100
00, 1); |
| 337 } | 337 } |
| 338 | 338 |
| 339 TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) | 339 TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) |
| 340 { | 340 { |
| 341 DECLARE_AND_INITIALIZE_TEST_QUADS | 341 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 342 | 342 |
| 343 // Use a small rotation so as to not disturb the geometry significantly. | 343 // Use a small rotation so as to not disturb the geometry significantly. |
| 344 childTransform.rotate(1); | 344 childTransform.rotate(1); |
| 345 | 345 |
| 346 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 346 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 347 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransf
orm, childRect, 1, true, IntRect(), renderSurfaceLayerList); | 347 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTr
ansform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 348 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 348 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 349 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 349 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 350 | 350 |
| 351 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 351 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 352 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 352 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 353 EXPECT_EQ(quadList.size(), 13u); | 353 EXPECT_EQ(quadList.size(), 13u); |
| 354 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000,
1); | 354 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000,
1); |
| 355 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 355 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 356 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 356 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 357 } | 357 } |
| 358 | 358 |
| 359 // This test requires some explanation: here we are rotating the quads to be cul
led. | 359 // This test requires some explanation: here we are rotating the quads to be cul
led. |
| 360 // The 2x2 tile child layer remains in the top-left corner, unrotated, but the 3
x3 | 360 // The 2x2 tile child layer remains in the top-left corner, unrotated, but the 3
x3 |
| 361 // tile parent layer is rotated by 1 degree. Of the four tiles the child would | 361 // tile parent layer is rotated by 1 degree. Of the four tiles the child would |
| 362 // normally occlude, three will move (slightly) out from under the child layer,
and | 362 // normally occlude, three will move (slightly) out from under the child layer,
and |
| 363 // one moves further under the child. Only this last tile should be culled. | 363 // one moves further under the child. Only this last tile should be culled. |
| 364 TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsSafelyCulled) | 364 TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsSafelyCulled) |
| 365 { | 365 { |
| 366 DECLARE_AND_INITIALIZE_TEST_QUADS | 366 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 367 | 367 |
| 368 // Use a small rotation so as to not disturb the geometry significantly. | 368 // Use a small rotation so as to not disturb the geometry significantly. |
| 369 WebTransformationMatrix parentTransform; | 369 WebTransformationMatrix parentTransform; |
| 370 parentTransform.rotate(1); | 370 parentTransform.rotate(1); |
| 371 | 371 |
| 372 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, parentTransform, rootRect,
1, true, IntRect(), renderSurfaceLayerList); | 372 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, parentTransform, rootR
ect, 1, true, IntRect(), renderSurfaceLayerList); |
| 373 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 373 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 374 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; | 374 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000))
; |
| 375 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 375 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 376 | 376 |
| 377 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 377 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 378 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 378 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 379 EXPECT_EQ(quadList.size(), 12u); | 379 EXPECT_EQ(quadList.size(), 12u); |
| 380 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100600,
1); | 380 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100600,
1); |
| 381 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 381 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 382 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 294
00, 1); | 382 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 294
00, 1); |
| 383 } | 383 } |
| 384 | 384 |
| 385 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverTile) | 385 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverTile) |
| 386 { | 386 { |
| 387 DECLARE_AND_INITIALIZE_TEST_QUADS | 387 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 388 | 388 |
| 389 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 389 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 390 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 390 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 391 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(200, 100, 100, 100)); | 391 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(200, 100, 100, 100)); |
| 392 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 392 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 393 | 393 |
| 394 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 394 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 395 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 395 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 396 EXPECT_EQ(quadList.size(), 1u); | 396 EXPECT_EQ(quadList.size(), 1u); |
| 397 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); | 397 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); |
| 398 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 398 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 399 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); | 399 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); |
| 400 } | 400 } |
| 401 | 401 |
| 402 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverCulledTile) | 402 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverCulledTile) |
| 403 { | 403 { |
| 404 DECLARE_AND_INITIALIZE_TEST_QUADS | 404 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 405 | 405 |
| 406 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 406 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 407 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 407 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 408 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(100, 100, 100, 100)); | 408 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(100, 100, 100, 100)); |
| 409 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 409 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 410 | 410 |
| 411 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 411 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 412 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 412 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 413 EXPECT_EQ(quadList.size(), 1u); | 413 EXPECT_EQ(quadList.size(), 1u); |
| 414 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); | 414 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1
); |
| 415 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 415 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 416 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); | 416 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120
000, 1); |
| 417 } | 417 } |
| 418 | 418 |
| 419 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverPartialTiles) | 419 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverPartialTiles) |
| 420 { | 420 { |
| 421 DECLARE_AND_INITIALIZE_TEST_QUADS | 421 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 422 | 422 |
| 423 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 423 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 424 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 424 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 425 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200)); | 425 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200)); |
| 426 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 426 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 427 | 427 |
| 428 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 428 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 429 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 429 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 430 EXPECT_EQ(quadList.size(), 9u); | 430 EXPECT_EQ(quadList.size(), 9u); |
| 431 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 40000, 1
); | 431 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 40000, 1
); |
| 432 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 432 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 433 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 900
00, 1); | 433 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 900
00, 1); |
| 434 } | 434 } |
| 435 | 435 |
| 436 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverNoTiles) | 436 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverNoTiles) |
| 437 { | 437 { |
| 438 DECLARE_AND_INITIALIZE_TEST_QUADS | 438 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 439 | 439 |
| 440 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 440 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 441 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 441 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 442 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(500, 500, 100, 100)); | 442 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(500, 500, 100, 100)); |
| 443 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 443 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 444 | 444 |
| 445 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 445 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 446 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 446 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 447 EXPECT_EQ(quadList.size(), 0u); | 447 EXPECT_EQ(quadList.size(), 0u); |
| 448 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); | 448 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); |
| 449 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 449 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 450 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 130
000, 1); | 450 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 130
000, 1); |
| 451 } | 451 } |
| 452 | 452 |
| 453 TEST(CCQuadCullerTest, verifyWithoutMetrics) | 453 TEST(CCQuadCullerTest, verifyWithoutMetrics) |
| 454 { | 454 { |
| 455 DECLARE_AND_INITIALIZE_TEST_QUADS | 455 DECLARE_AND_INITIALIZE_TEST_QUADS |
| 456 | 456 |
| 457 OwnPtr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(),
rootRect, 1, true, IntRect(), renderSurfaceLayerList); | 457 scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatri
x(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 458 OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransfor
mationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); | 458 scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTran
sformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
| 459 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200), false
); | 459 TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200), false
); |
| 460 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; | 460 CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList)
; |
| 461 | 461 |
| 462 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); | 462 appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracke
r); |
| 463 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); | 463 appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker
); |
| 464 EXPECT_EQ(quadList.size(), 9u); | 464 EXPECT_EQ(quadList.size(), 9u); |
| 465 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); | 465 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); |
| 466 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); | 466 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0,
1); |
| 467 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); | 467 EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0,
1); |
| 468 } | 468 } |
| 469 | 469 |
| 470 | 470 |
| 471 } // namespace | 471 } // namespace |
| OLD | NEW |