Index: cc/CCQuadCullerTest.cpp |
diff --git a/cc/CCQuadCullerTest.cpp b/cc/CCQuadCullerTest.cpp |
deleted file mode 100644 |
index 3c433559aa05c3776d32686ad5dc4057a0bbf584..0000000000000000000000000000000000000000 |
--- a/cc/CCQuadCullerTest.cpp |
+++ /dev/null |
@@ -1,471 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "config.h" |
- |
-#include "CCQuadCuller.h" |
- |
-#include "CCAppendQuadsData.h" |
-#include "CCLayerTilingData.h" |
-#include "CCMathUtil.h" |
-#include "CCOcclusionTracker.h" |
-#include "CCOverdrawMetrics.h" |
-#include "CCSingleThreadProxy.h" |
-#include "CCTileDrawQuad.h" |
-#include "CCTiledLayerImpl.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include <public/WebTransformationMatrix.h> |
- |
-using namespace cc; |
-using WebKit::WebTransformationMatrix; |
- |
-namespace { |
- |
-class TestCCOcclusionTrackerImpl : public CCOcclusionTrackerImpl { |
-public: |
- TestCCOcclusionTrackerImpl(const IntRect& scissorRectInScreen, bool recordMetricsForFrame = true) |
- : CCOcclusionTrackerImpl(scissorRectInScreen, recordMetricsForFrame) |
- , m_scissorRectInScreen(scissorRectInScreen) |
- { |
- } |
- |
-protected: |
- virtual IntRect layerScissorRectInTargetSurface(const CCLayerImpl* layer) const { return m_scissorRectInScreen; } |
- |
-private: |
- IntRect m_scissorRectInScreen; |
-}; |
- |
-typedef CCLayerIterator<CCLayerImpl, std::vector<CCLayerImpl*>, CCRenderSurface, CCLayerIteratorActions::FrontToBack> CCLayerIteratorType; |
- |
-static scoped_ptr<CCTiledLayerImpl> makeLayer(CCTiledLayerImpl* parent, const WebTransformationMatrix& drawTransform, const IntRect& layerRect, float opacity, bool opaque, const IntRect& layerOpaqueRect, std::vector<CCLayerImpl*>& surfaceLayerList) |
-{ |
- scoped_ptr<CCTiledLayerImpl> layer = CCTiledLayerImpl::create(1); |
- OwnPtr<CCLayerTilingData> tiler = CCLayerTilingData::create(IntSize(100, 100), CCLayerTilingData::NoBorderTexels); |
- tiler->setBounds(layerRect.size()); |
- layer->setTilingData(*tiler); |
- layer->setSkipsDraw(false); |
- layer->setDrawTransform(drawTransform); |
- layer->setScreenSpaceTransform(drawTransform); |
- layer->setVisibleContentRect(layerRect); |
- layer->setDrawOpacity(opacity); |
- layer->setContentsOpaque(opaque); |
- layer->setBounds(layerRect.size()); |
- layer->setContentBounds(layerRect.size()); |
- |
- CCResourceProvider::ResourceId resourceId = 1; |
- for (int i = 0; i < tiler->numTilesX(); ++i) |
- for (int j = 0; j < tiler->numTilesY(); ++j) { |
- IntRect tileOpaqueRect = opaque ? tiler->tileBounds(i, j) : intersection(tiler->tileBounds(i, j), layerOpaqueRect); |
- layer->pushTileProperties(i, j, resourceId++, tileOpaqueRect); |
- } |
- |
- IntRect rectInTarget = CCMathUtil::mapClippedRect(layer->drawTransform(), layer->visibleContentRect()); |
- if (!parent) { |
- layer->createRenderSurface(); |
- surfaceLayerList.push_back(layer.get()); |
- layer->renderSurface()->layerList().push_back(layer.get()); |
- } else { |
- layer->setRenderTarget(parent->renderTarget()); |
- parent->renderSurface()->layerList().push_back(layer.get()); |
- rectInTarget.unite(CCMathUtil::mapClippedRect(parent->drawTransform(), parent->visibleContentRect())); |
- } |
- layer->setDrawableContentRect(rectInTarget); |
- |
- return layer.Pass(); |
-} |
- |
-static void appendQuads(CCQuadList& quadList, CCSharedQuadStateList& sharedStateList, CCTiledLayerImpl* layer, CCLayerIteratorType& it, CCOcclusionTrackerImpl& occlusionTracker) |
-{ |
- occlusionTracker.enterLayer(it); |
- CCQuadCuller quadCuller(quadList, sharedStateList, layer, &occlusionTracker, false, false); |
- CCAppendQuadsData data; |
- layer->appendQuads(quadCuller, data); |
- occlusionTracker.leaveLayer(it); |
- ++it; |
-} |
- |
-#define DECLARE_AND_INITIALIZE_TEST_QUADS \ |
- DebugScopedSetImplThread impl; \ |
- CCQuadList quadList; \ |
- CCSharedQuadStateList sharedStateList; \ |
- std::vector<CCLayerImpl*> renderSurfaceLayerList; \ |
- WebTransformationMatrix childTransform; \ |
- IntSize rootSize = IntSize(300, 300); \ |
- IntRect rootRect = IntRect(IntPoint(), rootSize); \ |
- IntSize childSize = IntSize(200, 200); \ |
- IntRect childRect = IntRect(IntPoint(), childSize); |
- |
-TEST(CCQuadCullerTest, verifyNoCulling) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, false, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 13u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 40000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullChildLinesUpTopLeft) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 9u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 40000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullWhenChildOpacityNotOne) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 0.9f, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 13u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 40000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullWhenChildOpaqueFlagFalse) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 13u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 40000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullCenterTileOnly) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- childTransform.translate(50, 50); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- ASSERT_EQ(quadList.size(), 12u); |
- |
- IntRect quadVisibleRect1 = quadList[5]->quadVisibleRect(); |
- EXPECT_EQ(quadVisibleRect1.height(), 50); |
- |
- IntRect quadVisibleRect3 = quadList[7]->quadVisibleRect(); |
- EXPECT_EQ(quadVisibleRect3.width(), 50); |
- |
- // Next index is 8, not 9, since centre quad culled. |
- IntRect quadVisibleRect4 = quadList[8]->quadVisibleRect(); |
- EXPECT_EQ(quadVisibleRect4.width(), 50); |
- EXPECT_EQ(quadVisibleRect4.x(), 250); |
- |
- IntRect quadVisibleRect6 = quadList[10]->quadVisibleRect(); |
- EXPECT_EQ(quadVisibleRect6.height(), 50); |
- EXPECT_EQ(quadVisibleRect6.y(), 250); |
- |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 30000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize1) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- childTransform.translate(100, 100); |
- |
- // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to make |
- // sure it doesn't get culled due to transform rounding. |
- WebTransformationMatrix rootTransform; |
- rootTransform.translate(99.1, 99.1); |
- rootTransform.scale(1.018); |
- |
- rootRect = childRect = IntRect(0, 0, 100, 100); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 2u); |
- |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 20363, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize2) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- // Make the child's quad slightly smaller than, and centred over, the root layer tile. |
- // Verify the child does not cause the quad below to be culled due to rounding. |
- childTransform.translate(100.1, 100.1); |
- childTransform.scale(0.982); |
- |
- WebTransformationMatrix rootTransform; |
- rootTransform.translate(100, 100); |
- |
- rootRect = childRect = IntRect(0, 0, 100, 100); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 2u); |
- |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 19643, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullChildLinesUpBottomRight) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- childTransform.translate(100, 100); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 9u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 40000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullSubRegion) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- childTransform.translate(50, 50); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 12u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 30000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 10000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullSubRegion2) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- childTransform.translate(50, 10); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 12u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 25000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 15000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullSubRegionCheckOvercull) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- childTransform.translate(50, 49); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 13u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 30000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 10000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- // Use a small rotation so as to not disturb the geometry significantly. |
- childTransform.rotate(1); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 13u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
-// This test requires some explanation: here we are rotating the quads to be culled. |
-// The 2x2 tile child layer remains in the top-left corner, unrotated, but the 3x3 |
-// tile parent layer is rotated by 1 degree. Of the four tiles the child would |
-// normally occlude, three will move (slightly) out from under the child layer, and |
-// one moves further under the child. Only this last tile should be culled. |
-TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsSafelyCulled) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- // Use a small rotation so as to not disturb the geometry significantly. |
- WebTransformationMatrix parentTransform; |
- parentTransform.rotate(1); |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, parentTransform, rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 12u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100600, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 29400, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullOutsideScissorOverTile) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(200, 100, 100, 100)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 1u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullOutsideScissorOverCulledTile) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(100, 100, 100, 100)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 1u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 120000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullOutsideScissorOverPartialTiles) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 9u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 40000, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 90000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyCullOutsideScissorOverNoTiles) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(500, 500, 100, 100)); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 0u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 130000, 1); |
-} |
- |
-TEST(CCQuadCullerTest, verifyWithoutMetrics) |
-{ |
- DECLARE_AND_INITIALIZE_TEST_QUADS |
- |
- scoped_ptr<CCTiledLayerImpl> rootLayer = makeLayer(0, WebTransformationMatrix(), rootRect, 1, true, IntRect(), renderSurfaceLayerList); |
- scoped_ptr<CCTiledLayerImpl> childLayer = makeLayer(rootLayer.get(), WebTransformationMatrix(), childRect, 1, true, IntRect(), renderSurfaceLayerList); |
- TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200), false); |
- CCLayerIteratorType it = CCLayerIteratorType::begin(&renderSurfaceLayerList); |
- |
- appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); |
- appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); |
- EXPECT_EQ(quadList.size(), 9u); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1); |
- EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulledForDrawing(), 0, 1); |
-} |
- |
- |
-} // namespace |