diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 19:40:56 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 19:40:56 +0000 |
commit | c79f147c0474a311a83829a44b55aaffa42c6237 (patch) | |
tree | 8bb41fcb74068042828da31c279b0d53dd0844fa /cc/tiled_layer_impl_unittest.cc | |
parent | e62f2909e0aabf37131a65c7e50e85c1f07473f8 (diff) | |
download | chromium_src-c79f147c0474a311a83829a44b55aaffa42c6237.zip chromium_src-c79f147c0474a311a83829a44b55aaffa42c6237.tar.gz chromium_src-c79f147c0474a311a83829a44b55aaffa42c6237.tar.bz2 |
[cc] Change cc_tests.gyp filenames to Chromium style
BUG=155413
Review URL: https://codereview.chromium.org/11108020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161642 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/tiled_layer_impl_unittest.cc')
-rw-r--r-- | cc/tiled_layer_impl_unittest.cc | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/cc/tiled_layer_impl_unittest.cc b/cc/tiled_layer_impl_unittest.cc new file mode 100644 index 0000000..cb58ed2 --- /dev/null +++ b/cc/tiled_layer_impl_unittest.cc @@ -0,0 +1,244 @@ +// 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 "CCTiledLayerImpl.h" + +#include "CCAppendQuadsData.h" +#include "CCLayerTestCommon.h" +#include "CCLayerTilingData.h" +#include "CCSingleThreadProxy.h" +#include "CCTileDrawQuad.h" +#include "MockCCQuadCuller.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using namespace cc; +using namespace CCLayerTestCommon; + +namespace { + +// Create a default tiled layer with textures for all tiles and a default +// visibility of the entire layer size. +static scoped_ptr<CCTiledLayerImpl> createLayer(const IntSize& tileSize, const IntSize& layerSize, CCLayerTilingData::BorderTexelOption borderTexels) +{ + scoped_ptr<CCTiledLayerImpl> layer = CCTiledLayerImpl::create(1); + OwnPtr<CCLayerTilingData> tiler = CCLayerTilingData::create(tileSize, borderTexels); + tiler->setBounds(layerSize); + layer->setTilingData(*tiler); + layer->setSkipsDraw(false); + layer->setVisibleContentRect(IntRect(IntPoint(), layerSize)); + layer->setDrawOpacity(1); + layer->setBounds(layerSize); + layer->setContentBounds(layerSize); + layer->createRenderSurface(); + layer->setRenderTarget(layer.get()); + + CCResourceProvider::ResourceId resourceId = 1; + for (int i = 0; i < tiler->numTilesX(); ++i) + for (int j = 0; j < tiler->numTilesY(); ++j) + layer->pushTileProperties(i, j, resourceId++, IntRect(0, 0, 1, 1)); + + return layer.Pass(); +} + +TEST(CCTiledLayerImplTest, emptyQuadList) +{ + DebugScopedSetImplThread scopedImplThread; + + const IntSize tileSize(90, 90); + const int numTilesX = 8; + const int numTilesY = 4; + const IntSize layerSize(tileSize.width() * numTilesX, tileSize.height() * numTilesY); + + // Verify default layer does creates quads + { + scoped_ptr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, CCLayerTilingData::NoBorderTexels); + MockCCQuadCuller quadCuller; + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); + const unsigned numTiles = numTilesX * numTilesY; + EXPECT_EQ(quadCuller.quadList().size(), numTiles); + } + + // Layer with empty visible layer rect produces no quads + { + scoped_ptr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, CCLayerTilingData::NoBorderTexels); + layer->setVisibleContentRect(IntRect()); + + MockCCQuadCuller quadCuller; + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); + EXPECT_EQ(quadCuller.quadList().size(), 0u); + } + + // Layer with non-intersecting visible layer rect produces no quads + { + scoped_ptr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, CCLayerTilingData::NoBorderTexels); + + IntRect outsideBounds(IntPoint(-100, -100), IntSize(50, 50)); + layer->setVisibleContentRect(outsideBounds); + + MockCCQuadCuller quadCuller; + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); + EXPECT_EQ(quadCuller.quadList().size(), 0u); + } + + // Layer with skips draw produces no quads + { + scoped_ptr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, CCLayerTilingData::NoBorderTexels); + layer->setSkipsDraw(true); + + MockCCQuadCuller quadCuller; + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); + EXPECT_EQ(quadCuller.quadList().size(), 0u); + } +} + +TEST(CCTiledLayerImplTest, checkerboarding) +{ + DebugScopedSetImplThread scopedImplThread; + + const IntSize tileSize(10, 10); + const int numTilesX = 2; + const int numTilesY = 2; + const IntSize layerSize(tileSize.width() * numTilesX, tileSize.height() * numTilesY); + + scoped_ptr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, CCLayerTilingData::NoBorderTexels); + + // No checkerboarding + { + MockCCQuadCuller quadCuller; + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); + EXPECT_EQ(quadCuller.quadList().size(), 4u); + EXPECT_FALSE(data.hadMissingTiles); + + for (size_t i = 0; i < quadCuller.quadList().size(); ++i) + EXPECT_EQ(quadCuller.quadList()[i]->material(), CCDrawQuad::TiledContent); + } + + for (int i = 0; i < numTilesX; ++i) + for (int j = 0; j < numTilesY; ++j) + layer->pushTileProperties(i, j, 0, IntRect()); + + // All checkerboarding + { + MockCCQuadCuller quadCuller; + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); + EXPECT_TRUE(data.hadMissingTiles); + EXPECT_EQ(quadCuller.quadList().size(), 4u); + for (size_t i = 0; i < quadCuller.quadList().size(); ++i) + EXPECT_NE(quadCuller.quadList()[i]->material(), CCDrawQuad::TiledContent); + } +} + +static void getQuads(CCQuadList& quads, CCSharedQuadStateList& sharedStates, IntSize tileSize, const IntSize& layerSize, CCLayerTilingData::BorderTexelOption borderTexelOption, const IntRect& visibleContentRect) +{ + scoped_ptr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, borderTexelOption); + layer->setVisibleContentRect(visibleContentRect); + layer->setBounds(layerSize); + + MockCCQuadCuller quadCuller(quads, sharedStates); + CCAppendQuadsData data; + layer->appendQuads(quadCuller, data); +} + +// Test with both border texels and without. +#define WITH_AND_WITHOUT_BORDER_TEST(testFixtureName) \ + TEST(CCTiledLayerImplTest, testFixtureName##NoBorders) \ + { \ + testFixtureName(CCLayerTilingData::NoBorderTexels); \ + } \ + TEST(CCTiledLayerImplTest, testFixtureName##HasBorders) \ + { \ + testFixtureName(CCLayerTilingData::HasBorderTexels);\ + } + +static void coverageVisibleRectOnTileBoundaries(CCLayerTilingData::BorderTexelOption borders) +{ + DebugScopedSetImplThread scopedImplThread; + + IntSize layerSize(1000, 1000); + CCQuadList quads; + CCSharedQuadStateList sharedStates; + getQuads(quads, sharedStates, IntSize(100, 100), layerSize, borders, IntRect(IntPoint(), layerSize)); + verifyQuadsExactlyCoverRect(quads, IntRect(IntPoint(), layerSize)); +} +WITH_AND_WITHOUT_BORDER_TEST(coverageVisibleRectOnTileBoundaries); + +static void coverageVisibleRectIntersectsTiles(CCLayerTilingData::BorderTexelOption borders) +{ + DebugScopedSetImplThread scopedImplThread; + + // This rect intersects the middle 3x3 of the 5x5 tiles. + IntPoint topLeft(65, 73); + IntPoint bottomRight(182, 198); + IntRect visibleContentRect(topLeft, bottomRight - topLeft); + + IntSize layerSize(250, 250); + CCQuadList quads; + CCSharedQuadStateList sharedStates; + getQuads(quads, sharedStates, IntSize(50, 50), IntSize(250, 250), CCLayerTilingData::NoBorderTexels, visibleContentRect); + verifyQuadsExactlyCoverRect(quads, visibleContentRect); +} +WITH_AND_WITHOUT_BORDER_TEST(coverageVisibleRectIntersectsTiles); + +static void coverageVisibleRectIntersectsBounds(CCLayerTilingData::BorderTexelOption borders) +{ + DebugScopedSetImplThread scopedImplThread; + + IntSize layerSize(220, 210); + IntRect visibleContentRect(IntPoint(), layerSize); + CCQuadList quads; + CCSharedQuadStateList sharedStates; + getQuads(quads, sharedStates, IntSize(100, 100), layerSize, CCLayerTilingData::NoBorderTexels, visibleContentRect); + verifyQuadsExactlyCoverRect(quads, visibleContentRect); +} +WITH_AND_WITHOUT_BORDER_TEST(coverageVisibleRectIntersectsBounds); + +TEST(CCTiledLayerImplTest, textureInfoForLayerNoBorders) +{ + DebugScopedSetImplThread scopedImplThread; + + IntSize tileSize(50, 50); + IntSize layerSize(250, 250); + CCQuadList quads; + CCSharedQuadStateList sharedStates; + getQuads(quads, sharedStates, tileSize, layerSize, CCLayerTilingData::NoBorderTexels, IntRect(IntPoint(), layerSize)); + + for (size_t i = 0; i < quads.size(); ++i) { + ASSERT_EQ(quads[i]->material(), CCDrawQuad::TiledContent) << quadString << i; + CCTileDrawQuad* quad = static_cast<CCTileDrawQuad*>(quads[i]); + + EXPECT_NE(quad->resourceId(), 0u) << quadString << i; + EXPECT_EQ(quad->textureOffset(), IntPoint()) << quadString << i; + EXPECT_EQ(quad->textureSize(), tileSize) << quadString << i; + EXPECT_EQ(IntRect(0, 0, 1, 1), quad->opaqueRect()) << quadString << i; + } +} + +TEST(CCTiledLayerImplTest, tileOpaqueRectForLayerNoBorders) +{ + DebugScopedSetImplThread scopedImplThread; + + IntSize tileSize(50, 50); + IntSize layerSize(250, 250); + CCQuadList quads; + CCSharedQuadStateList sharedStates; + getQuads(quads, sharedStates, tileSize, layerSize, CCLayerTilingData::NoBorderTexels, IntRect(IntPoint(), layerSize)); + + for (size_t i = 0; i < quads.size(); ++i) { + ASSERT_EQ(quads[i]->material(), CCDrawQuad::TiledContent) << quadString << i; + CCTileDrawQuad* quad = static_cast<CCTileDrawQuad*>(quads[i]); + + EXPECT_EQ(IntRect(0, 0, 1, 1), quad->opaqueRect()) << quadString << i; + } +} + +} // namespace |