diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
commit | cd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch) | |
tree | 8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp | |
parent | d11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff) | |
download | qtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz |
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp')
-rw-r--r-- | Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp | 137 |
1 files changed, 102 insertions, 35 deletions
diff --git a/Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp b/Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp index a2eea9440..d55c0bc16 100644 --- a/Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp +++ b/Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp @@ -26,13 +26,14 @@ #include "cc/CCTiledLayerImpl.h" -#include "Region.h" +#include "CCLayerTestCommon.h" #include "cc/CCSingleThreadProxy.h" #include "cc/CCTileDrawQuad.h" #include <gmock/gmock.h> #include <gtest/gtest.h> using namespace WebCore; +using namespace CCLayerTestCommon; namespace { @@ -46,11 +47,12 @@ static PassRefPtr<CCTiledLayerImpl> createLayer(const IntSize& tileSize, const I layer->setTilingData(*tiler); layer->setSkipsDraw(false); layer->setVisibleLayerRect(IntRect(IntPoint(), layerSize)); + layer->setDrawOpacity(1); int textureId = 1; for (int i = 0; i < tiler->numTilesX(); ++i) for (int j = 0; j < tiler->numTilesY(); ++j) - layer->syncTextureId(i, j, static_cast<Platform3DObject>(textureId++)); + layer->pushTileProperties(i, j, static_cast<Platform3DObject>(textureId++), IntRect(0, 0, 1, 1)); return layer.release(); } @@ -134,7 +136,7 @@ TEST(CCTiledLayerImplTest, checkerboarding) for (int i = 0; i < numTilesX; ++i) for (int j = 0; j < numTilesY; ++j) - layer->syncTextureId(i, j, static_cast<Platform3DObject>(0)); + layer->pushTileProperties(i, j, static_cast<Platform3DObject>(0), IntRect()); // All checkerboarding { @@ -146,16 +148,7 @@ TEST(CCTiledLayerImplTest, checkerboarding) } } -static bool completelyContains(const Region& container, const IntRect& rect) -{ - Region tester(rect); - Vector<IntRect> rects = container.rects(); - for (size_t i = 0; i < rects.size(); ++i) - tester.subtract(rects[i]); - return tester.isEmpty(); -} - -static void getQuads(CCQuadList& quads, IntSize tileSize, const IntSize& layerSize, CCLayerTilingData::BorderTexelOption borderTexelOption, const IntRect& visibleLayerRect) +static PassOwnPtr<CCSharedQuadState> getQuads(CCQuadList& quads, IntSize tileSize, const IntSize& layerSize, CCLayerTilingData::BorderTexelOption borderTexelOption, const IntRect& visibleLayerRect) { RefPtr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, borderTexelOption); layer->setVisibleLayerRect(visibleLayerRect); @@ -163,24 +156,7 @@ static void getQuads(CCQuadList& quads, IntSize tileSize, const IntSize& layerSi OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState(); layer->appendQuads(quads, sharedQuadState.get()); -} - -// Align with expected and actual output -static const char* quadString = " Quad: "; - -static void verifyQuadsExactlyCoverRect(const CCQuadList& quads, const IntRect& rect) -{ - Region remaining(rect); - - for (size_t i = 0; i < quads.size(); ++i) { - CCDrawQuad* quad = quads[i].get(); - - EXPECT_TRUE(rect.contains(quad->quadRect())) << quadString << i; - EXPECT_TRUE(completelyContains(remaining, quad->quadRect())) << quadString << i; - remaining.subtract(Region(quad->quadRect())); - } - - EXPECT_TRUE(remaining.isEmpty()); + return sharedQuadState.release(); // The shared data must be owned as long as the quad list exists. } // Test with both border texels and without. @@ -200,7 +176,8 @@ static void coverageVisibleRectOnTileBoundaries(CCLayerTilingData::BorderTexelOp IntSize layerSize(1000, 1000); CCQuadList quads; - getQuads(quads, IntSize(100, 100), layerSize, borders, IntRect(IntPoint(), layerSize)); + OwnPtr<CCSharedQuadState> sharedState; + sharedState = getQuads(quads, IntSize(100, 100), layerSize, borders, IntRect(IntPoint(), layerSize)); verifyQuadsExactlyCoverRect(quads, IntRect(IntPoint(), layerSize)); } WITH_AND_WITHOUT_BORDER_TEST(coverageVisibleRectOnTileBoundaries); @@ -216,7 +193,8 @@ static void coverageVisibleRectIntersectsTiles(CCLayerTilingData::BorderTexelOpt IntSize layerSize(250, 250); CCQuadList quads; - getQuads(quads, IntSize(50, 50), IntSize(250, 250), CCLayerTilingData::NoBorderTexels, visibleLayerRect); + OwnPtr<CCSharedQuadState> sharedState; + sharedState = getQuads(quads, IntSize(50, 50), IntSize(250, 250), CCLayerTilingData::NoBorderTexels, visibleLayerRect); verifyQuadsExactlyCoverRect(quads, visibleLayerRect); } WITH_AND_WITHOUT_BORDER_TEST(coverageVisibleRectIntersectsTiles); @@ -228,7 +206,8 @@ static void coverageVisibleRectIntersectsBounds(CCLayerTilingData::BorderTexelOp IntSize layerSize(220, 210); IntRect visibleLayerRect(IntPoint(), layerSize); CCQuadList quads; - getQuads(quads, IntSize(100, 100), layerSize, CCLayerTilingData::NoBorderTexels, visibleLayerRect); + OwnPtr<CCSharedQuadState> sharedState; + sharedState = getQuads(quads, IntSize(100, 100), layerSize, CCLayerTilingData::NoBorderTexels, visibleLayerRect); verifyQuadsExactlyCoverRect(quads, visibleLayerRect); } WITH_AND_WITHOUT_BORDER_TEST(coverageVisibleRectIntersectsBounds); @@ -240,7 +219,8 @@ TEST(CCTiledLayerImplTest, textureInfoForLayerNoBorders) IntSize tileSize(50, 50); IntSize layerSize(250, 250); CCQuadList quads; - getQuads(quads, tileSize, layerSize, CCLayerTilingData::NoBorderTexels, IntRect(IntPoint(), layerSize)); + OwnPtr<CCSharedQuadState> sharedState; + sharedState = getQuads(quads, 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; @@ -249,8 +229,95 @@ TEST(CCTiledLayerImplTest, textureInfoForLayerNoBorders) EXPECT_NE(quad->textureId(), 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; + OwnPtr<CCSharedQuadState> sharedState; + sharedState = getQuads(quads, 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].get()); + + EXPECT_EQ(IntRect(0, 0, 1, 1), quad->opaqueRect()) << quadString << i; } } +TEST(CCTiledLayerImplTest, backgroundCoversViewport) +{ + DebugScopedSetImplThread scopedImplThread; + + const IntSize tileSize(10, 10); + const int numTilesX = 2; + const int numTilesY = 2; + const unsigned numTiles = numTilesX * numTilesY; + const IntSize layerSize(tileSize.width() * numTilesX, tileSize.height() * numTilesY); + RefPtr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, CCLayerTilingData::NoBorderTexels); + layer->setBackgroundColor(Color::gray); + layer->setBackgroundCoversViewport(true); + + // No gutter rects + { + IntRect clipRect = IntRect(IntPoint(), layerSize); + layer->setClipRect(clipRect); + layer->setVisibleLayerRect(IntRect(IntPoint(), layerSize)); + + OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState(); + + CCQuadList quads; + layer->appendQuads(quads, sharedQuadState.get()); + EXPECT_EQ(quads.size(), numTiles); + + for (size_t i = 0; i < quads.size(); ++i) + EXPECT_EQ(quads[i]->material(), CCDrawQuad::TiledContent); + } + + // Empty visible content area (fullscreen gutter rect) + { + IntRect clipRect = IntRect(100, 100, 100, 100); + layer->setClipRect(clipRect); + layer->setVisibleLayerRect(IntRect()); + + OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState(); + CCQuadList quads; + layer->appendQuads(quads, sharedQuadState.get()); + + for (size_t i = 0; i < quads.size(); ++i) + EXPECT_EQ(quads[i]->material(), CCDrawQuad::SolidColor); + + verifyQuadsExactlyCoverRect(quads, clipRect); + } + + // Content area in middle of clip rect (four surrounding gutter rects) + { + IntRect clipRect = IntRect(-50, -50, 100, 100); + layer->setClipRect(clipRect); + layer->setVisibleLayerRect(IntRect(IntPoint(), layerSize)); + + OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState(); + CCQuadList quads; + layer->appendQuads(quads, sharedQuadState.get()); + + unsigned numContentTiles = 0, numGutterTiles = 0; + for (size_t i = 0; i < quads.size(); ++i) { + if (quads[i]->material() == CCDrawQuad::TiledContent) + numContentTiles++; + else if (quads[i]->material() == CCDrawQuad::SolidColor) + numGutterTiles++; + } + EXPECT_EQ(numContentTiles, numTiles); + EXPECT_GE(numGutterTiles, 4u); + + verifyQuadsExactlyCoverRect(quads, clipRect); + } +} } // namespace |