[chromium] Allow for asymmetric tile sizes on composited tiled layers
authorenne@google.com <enne@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 May 2012 22:21:53 +0000 (22:21 +0000)
committerenne@google.com <enne@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 May 2012 22:21:53 +0000 (22:21 +0000)
https://bugs.webkit.org/show_bug.cgi?id=85687

Reviewed by James Robinson.

Source/WebCore:

Update TiledLayerChromium/CCLayerTilingData/TilingData to allow for a
the width and height of tile sizes to differ. Modify TilingData to use
IntSize everywhere for these width/height pairs.

Also, remove some unused functions from TilingData.

Test: TilingDataTest.*

* platform/graphics/chromium/TiledLayerChromium.cpp:
(WebCore::TiledLayerChromium::TiledLayerChromium):
(WebCore::TiledLayerChromium::updateTileSizeAndTilingOption):
* platform/graphics/chromium/cc/CCLayerTilingData.cpp:
(WebCore::CCLayerTilingData::CCLayerTilingData):
(WebCore::CCLayerTilingData::setTileSize):
(WebCore):
(WebCore::CCLayerTilingData::tileSize):
(WebCore::CCLayerTilingData::operator=):
(WebCore::CCLayerTilingData::tileRect):
(WebCore::CCLayerTilingData::setBounds):
(WebCore::CCLayerTilingData::bounds):
* platform/graphics/chromium/cc/CCLayerTilingData.h:
(CCLayerTilingData):
* platform/graphics/gpu/Texture.cpp:
(WebCore::Texture::Texture):
(WebCore::Texture::create):
(WebCore::Texture::load):
(WebCore::Texture::updateSubRect):
* platform/graphics/gpu/TilingData.cpp:
(WebCore::TilingData::TilingData):
(WebCore::TilingData::setTotalSize):
(WebCore::TilingData::setMaxTextureSize):
(WebCore::TilingData::tileXIndexFromSrcCoord):
(WebCore::TilingData::tileYIndexFromSrcCoord):
(WebCore::TilingData::tileBounds):
(WebCore::TilingData::tileSizeX):
(WebCore::TilingData::tileSizeY):
(WebCore::TilingData::recomputeNumTiles):
* platform/graphics/gpu/TilingData.h:
(TilingData):
(WebCore::TilingData::totalSize):
(WebCore::TilingData::maxTextureSize):
(WebCore::TilingData::TilingData):

Source/WebKit/chromium:

Update tests for new constructor and function args. Add a few more
tests that use non-square tile sizes.

* tests/TilingDataTest.cpp:
(WebCore::TestTiling::TestTiling):
(WebCore::TEST):
(WebCore):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@116359 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp
Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.cpp
Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.h
Source/WebCore/platform/graphics/gpu/Texture.cpp
Source/WebCore/platform/graphics/gpu/TilingData.cpp
Source/WebCore/platform/graphics/gpu/TilingData.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/tests/TilingDataTest.cpp

index dac5bee..6e178de 100644 (file)
@@ -1,3 +1,53 @@
+2012-05-07  Adrienne Walker  <enne@google.com>
+
+        [chromium] Allow for asymmetric tile sizes on composited tiled layers
+        https://bugs.webkit.org/show_bug.cgi?id=85687
+
+        Reviewed by James Robinson.
+
+        Update TiledLayerChromium/CCLayerTilingData/TilingData to allow for a
+        the width and height of tile sizes to differ. Modify TilingData to use
+        IntSize everywhere for these width/height pairs.
+
+        Also, remove some unused functions from TilingData.
+
+        Test: TilingDataTest.*
+
+        * platform/graphics/chromium/TiledLayerChromium.cpp:
+        (WebCore::TiledLayerChromium::TiledLayerChromium):
+        (WebCore::TiledLayerChromium::updateTileSizeAndTilingOption):
+        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
+        (WebCore::CCLayerTilingData::CCLayerTilingData):
+        (WebCore::CCLayerTilingData::setTileSize):
+        (WebCore):
+        (WebCore::CCLayerTilingData::tileSize):
+        (WebCore::CCLayerTilingData::operator=):
+        (WebCore::CCLayerTilingData::tileRect):
+        (WebCore::CCLayerTilingData::setBounds):
+        (WebCore::CCLayerTilingData::bounds):
+        * platform/graphics/chromium/cc/CCLayerTilingData.h:
+        (CCLayerTilingData):
+        * platform/graphics/gpu/Texture.cpp:
+        (WebCore::Texture::Texture):
+        (WebCore::Texture::create):
+        (WebCore::Texture::load):
+        (WebCore::Texture::updateSubRect):
+        * platform/graphics/gpu/TilingData.cpp:
+        (WebCore::TilingData::TilingData):
+        (WebCore::TilingData::setTotalSize):
+        (WebCore::TilingData::setMaxTextureSize):
+        (WebCore::TilingData::tileXIndexFromSrcCoord):
+        (WebCore::TilingData::tileYIndexFromSrcCoord):
+        (WebCore::TilingData::tileBounds):
+        (WebCore::TilingData::tileSizeX):
+        (WebCore::TilingData::tileSizeY):
+        (WebCore::TilingData::recomputeNumTiles):
+        * platform/graphics/gpu/TilingData.h:
+        (TilingData):
+        (WebCore::TilingData::totalSize):
+        (WebCore::TilingData::maxTextureSize):
+        (WebCore::TilingData::TilingData):
+
 2012-05-07  Raymond Toy  <rtoy@google.com>
 
         ConvolverNode setBuffer() should not ASSERT on null buffer
index 68f4964..71a874b 100644 (file)
@@ -46,8 +46,9 @@
 // Start tiling when the width and height of a layer are larger than this size.
 static int maxUntiledSize = 512;
 
-// When tiling is enabled, use tiles of this dimension squared.
-static int defaultTileSize = 256;
+// When tiling is enabled, use tiles of this size:
+static int defaultTileWidth = 256;
+static int defaultTileHeight = 256;
 
 using namespace std;
 
@@ -100,7 +101,7 @@ TiledLayerChromium::TiledLayerChromium()
     , m_didPaint(false)
     , m_tilingOption(AutoTile)
 {
-    m_tiler = CCLayerTilingData::create(IntSize(defaultTileSize, defaultTileSize), CCLayerTilingData::HasBorderTexels);
+    m_tiler = CCLayerTilingData::create(IntSize(defaultTileWidth, defaultTileHeight), CCLayerTilingData::HasBorderTexels);
 }
 
 TiledLayerChromium::~TiledLayerChromium()
@@ -114,13 +115,13 @@ PassOwnPtr<CCLayerImpl> TiledLayerChromium::createCCLayerImpl()
 
 void TiledLayerChromium::updateTileSizeAndTilingOption()
 {
-    const IntSize tileSize(min(defaultTileSize, contentBounds().width()), min(defaultTileSize, contentBounds().height()));
+    const IntSize tileSize(min(defaultTileWidth, contentBounds().width()), min(defaultTileHeight, contentBounds().height()));
 
     // Tile if both dimensions large, or any one dimension large and the other
     // extends into a second tile. This heuristic allows for long skinny layers
     // (e.g. scrollbars) that are Nx1 tiles to minimize wasted texture space.
     const bool anyDimensionLarge = contentBounds().width() > maxUntiledSize || contentBounds().height() > maxUntiledSize;
-    const bool anyDimensionOneTile = contentBounds().width() <= defaultTileSize || contentBounds().height() <= defaultTileSize;
+    const bool anyDimensionOneTile = contentBounds().width() <= defaultTileWidth || contentBounds().height() <= defaultTileHeight;
     const bool autoTiled = anyDimensionLarge && !anyDimensionOneTile;
 
     bool isTiled;
index ab132ae..823a316 100644 (file)
@@ -40,20 +40,24 @@ PassOwnPtr<CCLayerTilingData> CCLayerTilingData::create(const IntSize& tileSize,
 }
 
 CCLayerTilingData::CCLayerTilingData(const IntSize& tileSize, BorderTexelOption border)
-    : m_tilingData(max(tileSize.width(), tileSize.height()), 0, 0, border == HasBorderTexels)
+    : m_tilingData(tileSize, IntSize(), border == HasBorderTexels)
 {
     setTileSize(tileSize);
 }
 
 void CCLayerTilingData::setTileSize(const IntSize& size)
 {
-    if (m_tileSize == size)
+    if (tileSize() == size)
         return;
 
     reset();
 
-    m_tileSize = size;
-    m_tilingData.setMaxTextureSize(max(size.width(), size.height()));
+    m_tilingData.setMaxTextureSize(size);
+}
+
+const IntSize& CCLayerTilingData::tileSize() const
+{
+    return m_tilingData.maxTextureSize();
 }
 
 void CCLayerTilingData::setBorderTexelOption(BorderTexelOption borderTexelOption)
@@ -68,7 +72,6 @@ void CCLayerTilingData::setBorderTexelOption(BorderTexelOption borderTexelOption
 
 const CCLayerTilingData& CCLayerTilingData::operator=(const CCLayerTilingData& tiler)
 {
-    m_tileSize = tiler.m_tileSize;
     m_tilingData = tiler.m_tilingData;
 
     return *this;
@@ -107,7 +110,7 @@ void CCLayerTilingData::layerRectToTileIndices(const IntRect& layerRect, int& le
 IntRect CCLayerTilingData::tileRect(const Tile* tile) const
 {
     IntRect tileRect = m_tilingData.tileBoundsWithBorder(tile->i(), tile->j());
-    tileRect.setSize(m_tileSize);
+    tileRect.setSize(tileSize());
     return tileRect;
 }
 
@@ -134,7 +137,7 @@ Region CCLayerTilingData::opaqueRegionInLayerRect(const IntRect& layerRect) cons
 
 void CCLayerTilingData::setBounds(const IntSize& size)
 {
-    m_tilingData.setTotalSize(size.width(), size.height());
+    m_tilingData.setTotalSize(size);
 
     // Any tiles completely outside our new bounds are invalid and should be dropped.
     int left, top, right, bottom;
@@ -150,7 +153,7 @@ void CCLayerTilingData::setBounds(const IntSize& size)
 
 IntSize CCLayerTilingData::bounds() const
 {
-    return IntSize(m_tilingData.totalSizeX(), m_tilingData.totalSizeY());
+    return m_tilingData.totalSize();
 }
 
 } // namespace WebCore
index d87dcd2..081fe84 100644 (file)
@@ -52,7 +52,7 @@ public:
 
     // Change the tile size. This may invalidate all the existing tiles.
     void setTileSize(const IntSize&);
-    const IntSize& tileSize() const { return m_tileSize; }
+    const IntSize& tileSize() const;
     // Change the border texel setting. This may invalidate all existing tiles.
     void setBorderTexelOption(BorderTexelOption);
     bool hasBorderTexels() const { return m_tilingData.borderTexels(); }
@@ -109,7 +109,6 @@ protected:
     CCLayerTilingData(const IntSize& tileSize, BorderTexelOption);
 
     TileMap m_tiles;
-    IntSize m_tileSize;
     TilingData m_tilingData;
 };
 
index 7c2b86e..9ade352 100644 (file)
@@ -50,7 +50,7 @@ namespace WebCore {
 Texture::Texture(GraphicsContext3D* context, PassOwnPtr<Vector<unsigned int> > tileTextureIds, Format format, int width, int height, int maxTextureSize)
     : m_context(context)
     , m_format(format)
-    , m_tiles(maxTextureSize, width, height, true)
+    , m_tiles(IntSize(maxTextureSize, maxTextureSize), IntSize(width, height), true)
     , m_tileTextureIds(tileTextureIds)
 {
 }
@@ -89,12 +89,12 @@ PassRefPtr<Texture> Texture::create(GraphicsContext3D* context, Format format, i
 {
     int maxTextureSize = 0;
     context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &maxTextureSize);
-    TilingData tiling(maxTextureSize, width, height, true);
+    TilingData tiling(IntSize(maxTextureSize, maxTextureSize), IntSize(width, height), true);
 
     // Check for overflow.
     int numTiles = tiling.numTilesX() * tiling.numTilesY();
     if (numTiles / tiling.numTilesX() != tiling.numTilesY()) {
-        tiling.setTotalSize(0, 0);
+        tiling.setTotalSize(IntSize());
         numTiles = 0;
     }
 
@@ -154,13 +154,13 @@ static uint32_t* copySubRect(uint32_t* src, int srcX, int srcY, uint32_t* dst, i
 
 void Texture::load(void* pixels)
 {
-    updateSubRect(pixels, IntRect(0, 0, m_tiles.totalSizeX(), m_tiles.totalSizeY()));
+    updateSubRect(pixels, IntRect(0, 0, m_tiles.totalSize().width(), m_tiles.totalSize().height()));
 }
 
 void Texture::updateSubRect(void* pixels, const IntRect& updateRect)
 {
     IntRect updateRectSanitized(updateRect);
-    updateRectSanitized.intersect(IntRect(0, 0, m_tiles.totalSizeX(), m_tiles.totalSizeY()));
+    updateRectSanitized.intersect(IntRect(0, 0, m_tiles.totalSize().width(), m_tiles.totalSize().height()));
 
     uint32_t* pixels32 = static_cast<uint32_t*>(pixels);
     unsigned int glFormat = 0;
@@ -172,8 +172,8 @@ void Texture::updateSubRect(void* pixels, const IntRect& updateRect)
         // FIXME:  This could use PBO's to save doing an extra copy here.
     }
     int tempBuffSize = // Temporary buffer size is the smaller of the max texture size or the updateRectSanitized
-        min(m_tiles.maxTextureSize(), m_tiles.borderTexels() + updateRectSanitized.width()) *
-        min(m_tiles.maxTextureSize(), m_tiles.borderTexels() + updateRectSanitized.height());
+        min(m_tiles.maxTextureSize().width(), m_tiles.borderTexels() + updateRectSanitized.width()) *
+        min(m_tiles.maxTextureSize().height(), m_tiles.borderTexels() + updateRectSanitized.height());
     OwnArrayPtr<uint32_t> tempBuff = adoptArrayPtr(new uint32_t[tempBuffSize]);
 
     for (int tile = 0; tile < m_tiles.numTilesX() * m_tiles.numTilesY(); tile++) {
@@ -197,11 +197,11 @@ void Texture::updateSubRect(void* pixels, const IntRect& updateRect)
         if (swizzle) {
             uploadBuff = copySubRect<true>(
             pixels32, updateRectIntersected.x(), updateRectIntersected.y(),
-            tempBuff.get(), updateRectIntersected.width(), updateRectIntersected.height(), m_tiles.totalSizeX());
+            tempBuff.get(), updateRectIntersected.width(), updateRectIntersected.height(), m_tiles.totalSize().width());
         } else {
             uploadBuff = copySubRect<false>(
             pixels32, updateRectIntersected.x(), updateRectIntersected.y(),
-            tempBuff.get(), updateRectIntersected.width(), updateRectIntersected.height(), m_tiles.totalSizeX());
+            tempBuff.get(), updateRectIntersected.width(), updateRectIntersected.height(), m_tiles.totalSize().width());
         }
 
         m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_tileTextureIds->at(tile));
index 6bad628..8c230b3 100644 (file)
@@ -51,23 +51,21 @@ static int computeNumTiles(int maxTextureSize, int totalSize, int borderTexels)
     return totalSize > 0 ? numTiles : 0;
 }
 
-TilingData::TilingData(int maxTextureSize, int totalSizeX, int totalSizeY, bool hasBorderTexels)
+TilingData::TilingData(const IntSize& maxTextureSize, const IntSize& totalSize, bool hasBorderTexels)
     : m_maxTextureSize(maxTextureSize)
-    , m_totalSizeX(totalSizeX)
-    , m_totalSizeY(totalSizeY)
+    , m_totalSize(totalSize)
     , m_borderTexels(hasBorderTexels ? 1 : 0)
 {
     recomputeNumTiles();
 }
 
-void TilingData::setTotalSize(int totalSizeX, int totalSizeY)
+void TilingData::setTotalSize(const IntSize& totalSize)
 {
-    m_totalSizeX = totalSizeX;
-    m_totalSizeY = totalSizeY;
+    m_totalSize = totalSize;
     recomputeNumTiles();
 }
 
-void TilingData::setMaxTextureSize(int maxTextureSize)
+void TilingData::setMaxTextureSize(const IntSize& maxTextureSize)
 {
     m_maxTextureSize = maxTextureSize;
     recomputeNumTiles();
@@ -84,8 +82,8 @@ int TilingData::tileXIndexFromSrcCoord(int srcPos) const
     if (numTilesX() <= 1)
         return 0;
 
-    ASSERT(m_maxTextureSize - 2 * m_borderTexels);
-    int x = (srcPos - m_borderTexels) / (m_maxTextureSize - 2 * m_borderTexels);
+    ASSERT(m_maxTextureSize.width() - 2 * m_borderTexels);
+    int x = (srcPos - m_borderTexels) / (m_maxTextureSize.width() - 2 * m_borderTexels);
     return min(max(x, 0), numTilesX() - 1);
 }
 
@@ -94,8 +92,8 @@ int TilingData::tileYIndexFromSrcCoord(int srcPos) const
     if (numTilesY() <= 1)
         return 0;
 
-    ASSERT(m_maxTextureSize - 2 * m_borderTexels);
-    int y = (srcPos - m_borderTexels) / (m_maxTextureSize - 2 * m_borderTexels);
+    ASSERT(m_maxTextureSize.height() - 2 * m_borderTexels);
+    int y = (srcPos - m_borderTexels) / (m_maxTextureSize.height() - 2 * m_borderTexels);
     return min(max(y, 0), numTilesY() - 1);
 }
 
@@ -107,7 +105,7 @@ IntRect TilingData::tileBounds(int i, int j) const
     int width = tileSizeX(i);
     int height = tileSizeY(j);
     ASSERT(x >= 0 && y >= 0 && width >= 0 && height >= 0);
-    ASSERT(x <= totalSizeX() && y <= totalSizeY());
+    ASSERT(x <= m_totalSize.width() && y <= m_totalSize.height());
     return IntRect(x, y, width, height);
 }
 
@@ -136,14 +134,6 @@ IntRect TilingData::tileBoundsWithBorder(int i, int j) const
     return bounds;
 }
 
-FloatRect TilingData::tileBoundsNormalized(int i, int j) const
-{
-    assertTile(i, j);
-    FloatRect bounds(tileBounds(i, j));
-    bounds.scale(1.0f / m_totalSizeX, 1.0f / m_totalSizeY);
-    return bounds;
-}
-
 int TilingData::tilePositionX(int xIndex) const
 {
     ASSERT(xIndex >= 0 && xIndex < numTilesX());
@@ -171,13 +161,13 @@ int TilingData::tileSizeX(int xIndex) const
     ASSERT(xIndex >= 0 && xIndex < numTilesX());
 
     if (!xIndex && m_numTilesX == 1)
-        return m_totalSizeX;
+        return m_totalSize.width();
     if (!xIndex && m_numTilesX > 1)
-        return m_maxTextureSize - m_borderTexels;
+        return m_maxTextureSize.width() - m_borderTexels;
     if (xIndex < numTilesX() - 1)
-        return m_maxTextureSize - 2 * m_borderTexels;
+        return m_maxTextureSize.width() - 2 * m_borderTexels;
     if (xIndex == numTilesX() - 1)
-        return m_totalSizeX - tilePositionX(xIndex);
+        return m_totalSize.width() - tilePositionX(xIndex);
 
     ASSERT_NOT_REACHED();
     return 0;
@@ -188,32 +178,18 @@ int TilingData::tileSizeY(int yIndex) const
     ASSERT(yIndex >= 0 && yIndex < numTilesY());
 
     if (!yIndex && m_numTilesY == 1)
-        return m_totalSizeY;
+        return m_totalSize.height();
     if (!yIndex && m_numTilesY > 1)
-        return m_maxTextureSize - m_borderTexels;
+        return m_maxTextureSize.height() - m_borderTexels;
     if (yIndex < numTilesY() - 1)
-        return m_maxTextureSize - 2 * m_borderTexels;
+        return m_maxTextureSize.height() - 2 * m_borderTexels;
     if (yIndex == numTilesY() - 1)
-        return m_totalSizeY - tilePositionY(yIndex);
+        return m_totalSize.height() - tilePositionY(yIndex);
 
     ASSERT_NOT_REACHED();
     return 0;
 }
 
-IntRect TilingData::overlappedTileIndices(const WebCore::IntRect &srcRect) const
-{
-    int x = tileXIndexFromSrcCoord(srcRect.x());
-    int y = tileYIndexFromSrcCoord(srcRect.y());
-    int r = tileXIndexFromSrcCoord(srcRect.maxX());
-    int b = tileYIndexFromSrcCoord(srcRect.maxY());
-    return IntRect(x, y, r - x, b - y);
-}
-
-IntRect TilingData::overlappedTileIndices(const WebCore::FloatRect &srcRect) const
-{
-    return overlappedTileIndices(enclosingIntRect(srcRect));
-}
-
 IntPoint TilingData::textureOffset(int xIndex, int yIndex) const
 {
     int left = (!xIndex || m_numTilesX == 1) ? 0 : m_borderTexels;
@@ -224,8 +200,8 @@ IntPoint TilingData::textureOffset(int xIndex, int yIndex) const
 
 void TilingData::recomputeNumTiles()
 {
-    m_numTilesX = computeNumTiles(m_maxTextureSize, m_totalSizeX, m_borderTexels);
-    m_numTilesY = computeNumTiles(m_maxTextureSize, m_totalSizeY, m_borderTexels);
+    m_numTilesX = computeNumTiles(m_maxTextureSize.width(), m_totalSize.width(), m_borderTexels);
+    m_numTilesY = computeNumTiles(m_maxTextureSize.height(), m_totalSize.height(), m_borderTexels);
 }
 
 }
index 146dfe1..c5bfe8e 100644 (file)
@@ -31,6 +31,7 @@
 #ifndef TilingData_h
 #define TilingData_h
 
+#include "IntSize.h"
 #include <wtf/Noncopyable.h>
 
 namespace WebCore {
@@ -41,12 +42,12 @@ class IntPoint;
 
 class TilingData {
 public:
-    TilingData(int maxTextureSize, int totalSizeX, int totalSizeY, bool hasBorderTexels);
-    void setTotalSize(int totalSizeX, int totalSizeY);
-    void setMaxTextureSize(int);
-    int maxTextureSize() const { return m_maxTextureSize; }
-    int totalSizeX() const { return m_totalSizeX; }
-    int totalSizeY() const { return m_totalSizeY; }
+    TilingData(const IntSize& maxTextureSize, const IntSize& totalSize, bool hasBorderTexels);
+
+    void setTotalSize(const IntSize&);
+    const IntSize& totalSize() const { return m_totalSize; }
+    void setMaxTextureSize(const IntSize&);
+    const IntSize& maxTextureSize() const { return m_maxTextureSize; }
     void setHasBorderTexels(bool);
     int borderTexels() const { return m_borderTexels; }
 
@@ -58,25 +59,21 @@ public:
 
     IntRect tileBounds(int, int) const;
     IntRect tileBoundsWithBorder(int, int) const;
-    FloatRect tileBoundsNormalized(int, int) const;
     int tilePositionX(int xIndex) const;
     int tilePositionY(int yIndex) const;
     int tileSizeX(int xIndex) const;
     int tileSizeY(int yIndex) const;
-    IntRect overlappedTileIndices(const IntRect& srcRect) const;
-    IntRect overlappedTileIndices(const FloatRect& srcRect) const;
 
     // Difference between tileBound's and tileBoundWithBorder's location().
     IntPoint textureOffset(int xIndex, int yIndex) const;
 
 private:
-    TilingData() : m_maxTextureSize(0), m_totalSizeX(0), m_totalSizeY(0) {}
+    TilingData() : m_borderTexels(0) { }
     void assertTile(int i, int j) const { ASSERT_UNUSED(i, i >= 0 && i < numTilesX()); ASSERT_UNUSED(j, j >= 0 && j < numTilesY()); }
     void recomputeNumTiles();
 
-    int m_maxTextureSize;
-    int m_totalSizeX;
-    int m_totalSizeY;
+    IntSize m_maxTextureSize;
+    IntSize m_totalSize;
     int m_borderTexels; // 0 or 1
 
     // computed values:
index 374cfb9..238a97c 100644 (file)
@@ -1,3 +1,18 @@
+2012-05-07  Adrienne Walker  <enne@google.com>
+
+        [chromium] Allow for asymmetric tile sizes on composited tiled layers
+        https://bugs.webkit.org/show_bug.cgi?id=85687
+
+        Reviewed by James Robinson.
+
+        Update tests for new constructor and function args. Add a few more
+        tests that use non-square tile sizes.
+
+        * tests/TilingDataTest.cpp:
+        (WebCore::TestTiling::TestTiling):
+        (WebCore::TEST):
+        (WebCore):
+
 2012-05-07  David Reveman  <reveman@chromium.org>
 
         [Chromium] Use GL_CHROMIUM_command_buffer_query to throttle texture uploads.
index 47c0361..060bc77 100755 (executable)
@@ -30,6 +30,7 @@
 
 #include "config.h"
 
+#include "IntSize.h"
 #include "TilingData.h"
 #include <wtf/Assertions.h>
 
@@ -41,8 +42,8 @@ namespace {
 
 class TestTiling : public TilingData {
 public:
-    TestTiling(int maxTextureSize, int totalSizeX, int totalSizeY, bool hasBorderTexels)
-        : TilingData(maxTextureSize, totalSizeX, totalSizeY, hasBorderTexels)
+    TestTiling(IntSize maxTextureSize, IntSize totalSize, bool hasBorderTexels)
+        : TilingData(maxTextureSize, totalSize, hasBorderTexels)
     {
     }
 
@@ -62,402 +63,413 @@ public:
 
 TEST(TilingDataTest, numTiles_NoTiling)
 {
-    EXPECT_EQ(1, TestTiling(16, 16, 16, false).numTiles());
-    EXPECT_EQ(1, TestTiling(16, 15, 15, true).numTiles());
-    EXPECT_EQ(1, TestTiling(16, 16, 16, true).numTiles());
-    EXPECT_EQ(1, TestTiling(16,  1, 16, false).numTiles());
-    EXPECT_EQ(1, TestTiling(15, 15, 15, true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(16, 16), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(15, 15), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(16, 16), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(1, 16), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(15, 15), IntSize(15, 15), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(32, 16), IntSize(32, 16), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(32, 16), IntSize(32, 16), true).numTiles());
 }
 
 TEST(TilingDataTest, numTiles_TilingNoBorders)
 {
-    EXPECT_EQ(0, TestTiling(0,  0,  0, false).numTiles());
-    EXPECT_EQ(0, TestTiling(0,  4,  0, false).numTiles());
-    EXPECT_EQ(0, TestTiling(0,  0,  4, false).numTiles());
-    EXPECT_EQ(0, TestTiling(4,  4,  0, false).numTiles());
-    EXPECT_EQ(0, TestTiling(4,  0,  4, false).numTiles());
-    EXPECT_EQ(0, TestTiling(-8, 1,  1, false).numTiles());
-    EXPECT_EQ(0, TestTiling(-1, 1,  1, false).numTiles());
-    EXPECT_EQ(0, TestTiling(0,  1,  1, false).numTiles());
-
-    EXPECT_EQ(1, TestTiling(1,  1,  1, false).numTiles());
-    EXPECT_EQ(2, TestTiling(1,  1,  2, false).numTiles());
-    EXPECT_EQ(2, TestTiling(1,  2,  1, false).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  1,  1, false).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  1,  2, false).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  2,  1, false).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  2,  2, false).numTiles());
-    EXPECT_EQ(1, TestTiling(3,  3,  3, false).numTiles());
-
-    EXPECT_EQ(1, TestTiling(4,  1,  4, false).numTiles());
-    EXPECT_EQ(1, TestTiling(4,  2,  4, false).numTiles());
-    EXPECT_EQ(1, TestTiling(4,  3,  4, false).numTiles());
-    EXPECT_EQ(1, TestTiling(4,  4,  4, false).numTiles());
-    EXPECT_EQ(2, TestTiling(4,  5,  4, false).numTiles());
-    EXPECT_EQ(2, TestTiling(4,  6,  4, false).numTiles());
-    EXPECT_EQ(2, TestTiling(4,  7,  4, false).numTiles());
-    EXPECT_EQ(2, TestTiling(4,  8,  4, false).numTiles());
-    EXPECT_EQ(3, TestTiling(4,  9,  4, false).numTiles());
-    EXPECT_EQ(3, TestTiling(4, 10,  4, false).numTiles());
-    EXPECT_EQ(3, TestTiling(4, 11,  4, false).numTiles());
-
-    EXPECT_EQ(1, TestTiling(5,  1,  5, false).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  2,  5, false).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  3,  5, false).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  4,  5, false).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  5,  5, false).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  6,  5, false).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  7,  5, false).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  8,  5, false).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  9,  5, false).numTiles());
-    EXPECT_EQ(2, TestTiling(5, 10,  5, false).numTiles());
-    EXPECT_EQ(3, TestTiling(5, 11,  5, false).numTiles());
-
-    EXPECT_EQ(1, TestTiling(16, 16, 16, false).numTiles());
-    EXPECT_EQ(1, TestTiling(17, 16, 16, false).numTiles());
-    EXPECT_EQ(4, TestTiling(15, 16, 16, false).numTiles());
-    EXPECT_EQ(4, TestTiling(8, 16, 16, false).numTiles());
-    EXPECT_EQ(6, TestTiling(8, 17, 16, false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  0), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(4,  0), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  4), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(4,  0), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(0,  4), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(-8, -8), IntSize(1,  1), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(-1, -1), IntSize(1,  1), false).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(1,  1), false).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(1, 1), IntSize(1,  1), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(1, 1), IntSize(1,  2), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(1, 1), IntSize(2,  1), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  1), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  2), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  1), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  2), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3,  3), false).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(1,  4), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(2,  4), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(3,  4), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(4,  4), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(5,  4), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(6,  4), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(7,  4), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(8,  4), false).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(9,  4), false).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(10,  4), false).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(11,  4), false).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(1,  5), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(2,  5), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(3,  5), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(4,  5), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(5,  5), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  5), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(7,  5), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(8,  5), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(9,  5), false).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(10,  5), false).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(11,  5), false).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(16, 16), false).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(17, 17), IntSize(16, 16), false).numTiles());
+    EXPECT_EQ(4, TestTiling(IntSize(15, 15), IntSize(16, 16), false).numTiles());
+    EXPECT_EQ(4, TestTiling(IntSize(8, 8), IntSize(16, 16), false).numTiles());
+    EXPECT_EQ(6, TestTiling(IntSize(8, 8), IntSize(17, 16), false).numTiles());
+
+    EXPECT_EQ(8, TestTiling(IntSize(5, 8), IntSize(17, 16), false).numTiles());
 }
 
 TEST(TilingDataTest, numTiles_TilingWithBorders)
 {
-    EXPECT_EQ(0, TestTiling(0,  0,  0, true).numTiles());
-    EXPECT_EQ(0, TestTiling(0,  4,  0, true).numTiles());
-    EXPECT_EQ(0, TestTiling(0,  0,  4, true).numTiles());
-    EXPECT_EQ(0, TestTiling(4,  4,  0, true).numTiles());
-    EXPECT_EQ(0, TestTiling(4,  0,  4, true).numTiles());
-    EXPECT_EQ(0, TestTiling(-8, 1,  1, true).numTiles());
-    EXPECT_EQ(0, TestTiling(-1, 1,  1, true).numTiles());
-    EXPECT_EQ(0, TestTiling(0,  1,  1, true).numTiles());
-
-    EXPECT_EQ(1, TestTiling(1,  1,  1, true).numTiles());
-    EXPECT_EQ(0, TestTiling(1,  1,  2, true).numTiles());
-    EXPECT_EQ(0, TestTiling(1,  2,  1, true).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  1,  1, true).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  1,  2, true).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  2,  1, true).numTiles());
-    EXPECT_EQ(1, TestTiling(2,  2,  2, true).numTiles());
-
-    EXPECT_EQ(1, TestTiling(3,  1,  3, true).numTiles());
-    EXPECT_EQ(1, TestTiling(3,  2,  3, true).numTiles());
-    EXPECT_EQ(1, TestTiling(3,  3,  3, true).numTiles());
-    EXPECT_EQ(2, TestTiling(3,  4,  3, true).numTiles());
-    EXPECT_EQ(3, TestTiling(3,  5,  3, true).numTiles());
-    EXPECT_EQ(4, TestTiling(3,  6,  3, true).numTiles());
-    EXPECT_EQ(5, TestTiling(3,  7,  3, true).numTiles());
-
-    EXPECT_EQ(1, TestTiling(4,  1,  4, true).numTiles());
-    EXPECT_EQ(1, TestTiling(4,  2,  4, true).numTiles());
-    EXPECT_EQ(1, TestTiling(4,  3,  4, true).numTiles());
-    EXPECT_EQ(1, TestTiling(4,  4,  4, true).numTiles());
-    EXPECT_EQ(2, TestTiling(4,  5,  4, true).numTiles());
-    EXPECT_EQ(2, TestTiling(4,  6,  4, true).numTiles());
-    EXPECT_EQ(3, TestTiling(4,  7,  4, true).numTiles());
-    EXPECT_EQ(3, TestTiling(4,  8,  4, true).numTiles());
-    EXPECT_EQ(4, TestTiling(4,  9,  4, true).numTiles());
-    EXPECT_EQ(4, TestTiling(4, 10,  4, true).numTiles());
-    EXPECT_EQ(5, TestTiling(4, 11,  4, true).numTiles());
-
-    EXPECT_EQ(1, TestTiling(5,  1,  5, true).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  2,  5, true).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  3,  5, true).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  4,  5, true).numTiles());
-    EXPECT_EQ(1, TestTiling(5,  5,  5, true).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  6,  5, true).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  7,  5, true).numTiles());
-    EXPECT_EQ(2, TestTiling(5,  8,  5, true).numTiles());
-    EXPECT_EQ(3, TestTiling(5,  9,  5, true).numTiles());
-    EXPECT_EQ(3, TestTiling(5, 10,  5, true).numTiles());
-    EXPECT_EQ(3, TestTiling(5, 11,  5, true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  0), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(4,  0), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  4), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(4,  0), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(0,  4), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(-8, -8), IntSize(1,  1), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(-1, -1), IntSize(1,  1), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(1,  1), true).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(1, 1), IntSize(1,  1), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1,  2), true).numTiles());
+    EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(2,  1), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  1), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  2), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  1), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  2), true).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1,  3), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(2,  3), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3,  3), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(4,  3), true).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(5,  3), true).numTiles());
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(6,  3), true).numTiles());
+    EXPECT_EQ(5, TestTiling(IntSize(3, 3), IntSize(7,  3), true).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(1,  4), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(2,  4), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(3,  4), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(4,  4), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(5,  4), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(6,  4), true).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(7,  4), true).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(8,  4), true).numTiles());
+    EXPECT_EQ(4, TestTiling(IntSize(4, 4), IntSize(9,  4), true).numTiles());
+    EXPECT_EQ(4, TestTiling(IntSize(4, 4), IntSize(10,  4), true).numTiles());
+    EXPECT_EQ(5, TestTiling(IntSize(4, 4), IntSize(11,  4), true).numTiles());
+
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(1,  5), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(2,  5), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(3,  5), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(4,  5), true).numTiles());
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(5,  5), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  5), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(7,  5), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(8,  5), true).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(9,  5), true).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10,  5), true).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(11,  5), true).numTiles());
+
+    EXPECT_EQ(30, TestTiling(IntSize(8, 5), IntSize(16, 32), true).numTiles());
 }
 
 TEST(TilingDataTest, tileXIndexFromSrcCoord)
 {
-    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(2));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(3));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(4));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(5));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(6));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(7));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(8));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(9));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(10));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(11));
-
-    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(2));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(3));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(4));
-    EXPECT_EQ(4, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(5));
-    EXPECT_EQ(5, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(6));
-    EXPECT_EQ(6, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(7));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(8));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(9));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(10));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(11));
-
-    EXPECT_EQ(0, TestTiling(1, 1, 1, false).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileXIndexFromSrcCoord(2));
-
-    EXPECT_EQ(0, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(2));
-    EXPECT_EQ(1, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(3));
-
-    EXPECT_EQ(0, TestTiling(1, 1, 1, true).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileXIndexFromSrcCoord(2));
-
-    EXPECT_EQ(0, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(1));
-    EXPECT_EQ(1, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(2));
-    EXPECT_EQ(1, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(3));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(3));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(4));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(5));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(6));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(7));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(8));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(9));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(10));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(11));
+
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(2));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(3));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(4));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(5));
+    EXPECT_EQ(5, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(6));
+    EXPECT_EQ(6, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(7));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(8));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(9));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(10));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(11));
+
+    EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileXIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(3));
+
+    EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileXIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(3));
 }
 TEST(TilingDataTest, tileYIndexFromSrcCoord)
 {
-    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(2));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(3));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(4));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(5));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(6));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(7));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(8));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(9));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(10));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(11));
-
-    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(1, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(2));
-    EXPECT_EQ(2, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(3));
-    EXPECT_EQ(3, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(4));
-    EXPECT_EQ(4, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(5));
-    EXPECT_EQ(5, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(6));
-    EXPECT_EQ(6, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(7));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(8));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(9));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(10));
-    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(11));
-
-    EXPECT_EQ(0, TestTiling(1, 1, 1, false).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileYIndexFromSrcCoord(2));
-
-    EXPECT_EQ(0, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(2));
-    EXPECT_EQ(1, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(3));
-
-    EXPECT_EQ(0, TestTiling(1, 1, 1, true).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileYIndexFromSrcCoord(2));
-
-    EXPECT_EQ(0, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(1));
-    EXPECT_EQ(1, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(2));
-    EXPECT_EQ(1, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(3));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(3));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(4));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(5));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(6));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(7));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(8));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(9));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(10));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(11));
+
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(2));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(3));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(4));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(5));
+    EXPECT_EQ(5, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(6));
+    EXPECT_EQ(6, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(7));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(8));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(9));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(10));
+    EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(11));
+
+    EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileYIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(3));
+
+    EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileYIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(3));
 }
 
 TEST(TilingDataTest, tileSizeX)
 {
-    EXPECT_EQ(5, TestTiling(5,  5,  5, false).tileSizeX(0));
-    EXPECT_EQ(5, TestTiling(5,  5,  5, true).tileSizeX(0));
-
-    EXPECT_EQ(5, TestTiling(5,  6,  6, false).tileSizeX(0));
-    EXPECT_EQ(1, TestTiling(5,  6,  6, false).tileSizeX(1));
-    EXPECT_EQ(4, TestTiling(5,  6,  6, true).tileSizeX(0));
-    EXPECT_EQ(2, TestTiling(5,  6,  6, true).tileSizeX(1));
-
-    EXPECT_EQ(5, TestTiling(5,  8,  8, false).tileSizeX(0));
-    EXPECT_EQ(3, TestTiling(5,  8,  8, false).tileSizeX(1));
-    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeX(0));
-    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeX(1));
-
-    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeX(0));
-    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeX(1));
-    EXPECT_EQ(4, TestTiling(5, 10, 10, true).tileSizeX(0));
-    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeX(1));
-    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeX(2));
-
-    EXPECT_EQ(4, TestTiling(5, 11, 11, true).tileSizeX(2));
-    EXPECT_EQ(3, TestTiling(5, 12, 12, true).tileSizeX(2));
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), false).tileSizeX(0));
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), true).tileSizeX(0));
+
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeX(1));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeX(0));
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeX(1));
+
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeX(1));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeX(0));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeX(1));
+
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeX(0));
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeX(1));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeX(1));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeX(2));
+
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(11, 11), true).tileSizeX(2));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(12, 12), true).tileSizeX(2));
+
+    EXPECT_EQ(3, TestTiling(IntSize(5, 9), IntSize(12, 17), true).tileSizeX(2));
 }
+
 TEST(TilingDataTest, tileSizeY)
 {
-    EXPECT_EQ(5, TestTiling(5,  5,  5, false).tileSizeY(0));
-    EXPECT_EQ(5, TestTiling(5,  5,  5, true).tileSizeY(0));
-
-    EXPECT_EQ(5, TestTiling(5,  6,  6, false).tileSizeY(0));
-    EXPECT_EQ(1, TestTiling(5,  6,  6, false).tileSizeY(1));
-    EXPECT_EQ(4, TestTiling(5,  6,  6, true).tileSizeY(0));
-    EXPECT_EQ(2, TestTiling(5,  6,  6, true).tileSizeY(1));
-
-    EXPECT_EQ(5, TestTiling(5,  8,  8, false).tileSizeY(0));
-    EXPECT_EQ(3, TestTiling(5,  8,  8, false).tileSizeY(1));
-    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeY(0));
-    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeY(1));
-
-    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeY(0));
-    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeY(1));
-    EXPECT_EQ(4, TestTiling(5, 10, 10, true).tileSizeY(0));
-    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeY(1));
-    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeY(2));
-
-    EXPECT_EQ(4, TestTiling(5, 11, 11, true).tileSizeY(2));
-    EXPECT_EQ(3, TestTiling(5, 12, 12, true).tileSizeY(2));
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), false).tileSizeY(0));
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), true).tileSizeY(0));
+
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeY(1));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeY(0));
+    EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeY(1));
+
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeY(1));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeY(0));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeY(1));
+
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeY(0));
+    EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeY(1));
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeY(1));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeY(2));
+
+    EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(11, 11), true).tileSizeY(2));
+    EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(12, 12), true).tileSizeY(2));
+
+    EXPECT_EQ(3, TestTiling(IntSize(9, 5), IntSize(17, 12), true).tileSizeY(2));
 }
 
 TEST(TilingDataTest, tileSizeX_and_tilePositionX)
 {
     // Single tile cases:
-    EXPECT_EQ(1, TestTiling(3, 1,   1, false).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 1,   1, false).tilePositionX(0));
-    EXPECT_EQ(1, TestTiling(3, 1, 100, false).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 1, 100, false).tilePositionX(0));
-    EXPECT_EQ(3, TestTiling(3, 3,   1, false).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 3,   1, false).tilePositionX(0));
-    EXPECT_EQ(3, TestTiling(3, 3, 100, false).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 100, false).tilePositionX(0));
-    EXPECT_EQ(1, TestTiling(3, 1,   1, true).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 1,   1, true).tilePositionX(0));
-    EXPECT_EQ(1, TestTiling(3, 1, 100, true).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 1, 100, true).tilePositionX(0));
-    EXPECT_EQ(3, TestTiling(3, 3,   1, true).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 3,   1, true).tilePositionX(0));
-    EXPECT_EQ(3, TestTiling(3, 3, 100, true).tileSizeX(0));
-    EXPECT_EQ(0, TestTiling(3, 3, 100, true).tilePositionX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1,   1), false).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1,   1), false).tilePositionX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 100), false).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 100), false).tilePositionX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3,   1), false).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3,   1), false).tilePositionX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3, 100), false).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 100), false).tilePositionX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1,   1), true).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1,   1), true).tilePositionX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 100), true).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 100), true).tilePositionX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3,   1), true).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3,   1), true).tilePositionX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3, 100), true).tileSizeX(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 100), true).tilePositionX(0));
 
     // Multiple tiles:
     // no border
     // positions 0, 3
-    EXPECT_EQ(2, TestTiling(3, 6,   1, false).numTiles());
-    EXPECT_EQ(3, TestTiling(3, 6,   1, false).tileSizeX(0));
-    EXPECT_EQ(3, TestTiling(3, 6,   1, false).tileSizeX(1));
-    EXPECT_EQ(0, TestTiling(3, 6,   1, false).tilePositionX(0));
-    EXPECT_EQ(3, TestTiling(3, 6,   1, false).tilePositionX(1));
-    EXPECT_EQ(3, TestTiling(3, 6, 100, false).tileSizeX(0));
-    EXPECT_EQ(3, TestTiling(3, 6, 100, false).tileSizeX(1));
-    EXPECT_EQ(0, TestTiling(3, 6, 100, false).tilePositionX(0));
-    EXPECT_EQ(3, TestTiling(3, 6, 100, false).tilePositionX(1));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), false).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tileSizeX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tileSizeX(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tilePositionX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tilePositionX(1));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tileSizeX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tileSizeX(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tilePositionX(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tilePositionX(1));
 
     // Multiple tiles:
     // with border
     // positions 0, 2, 3, 4
-    EXPECT_EQ(4, TestTiling(3, 6,   1, true).numTiles());
-    EXPECT_EQ(2, TestTiling(3, 6,   1, true).tileSizeX(0));
-    EXPECT_EQ(1, TestTiling(3, 6,   1, true).tileSizeX(1));
-    EXPECT_EQ(1, TestTiling(3, 6,   1, true).tileSizeX(2));
-    EXPECT_EQ(2, TestTiling(3, 6,   1, true).tileSizeX(3));
-    EXPECT_EQ(0, TestTiling(3, 6,   1, true).tilePositionX(0));
-    EXPECT_EQ(2, TestTiling(3, 6,   1, true).tilePositionX(1));
-    EXPECT_EQ(3, TestTiling(3, 6,   1, true).tilePositionX(2));
-    EXPECT_EQ(4, TestTiling(3, 6,   1, true).tilePositionX(3));
-    EXPECT_EQ(2, TestTiling(3, 6, 100, true).tileSizeX(0));
-    EXPECT_EQ(1, TestTiling(3, 6, 100, true).tileSizeX(1));
-    EXPECT_EQ(1, TestTiling(3, 6, 100, true).tileSizeX(2));
-    EXPECT_EQ(2, TestTiling(3, 6, 100, true).tileSizeX(3));
-    EXPECT_EQ(0, TestTiling(3, 6, 100, true).tilePositionX(0));
-    EXPECT_EQ(2, TestTiling(3, 6, 100, true).tilePositionX(1));
-    EXPECT_EQ(3, TestTiling(3, 6, 100, true).tilePositionX(2));
-    EXPECT_EQ(4, TestTiling(3, 6, 100, true).tilePositionX(3));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(6,   1), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(2));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(3));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(0));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(1));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(2));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(3));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(2));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(3));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(0));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(1));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(2));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(3));
 }
 
 TEST(TilingDataTest, tileSizeY_and_tilePositionY)
 {
     // Single tile cases:
-    EXPECT_EQ(1, TestTiling(3,   1, 1, false).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3,   1, 1, false).tilePositionY(0));
-    EXPECT_EQ(1, TestTiling(3, 100, 1, false).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3, 100, 1, false).tilePositionY(0));
-    EXPECT_EQ(3, TestTiling(3,   1, 3, false).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3,   1, 3, false).tilePositionY(0));
-    EXPECT_EQ(3, TestTiling(3, 100, 3, false).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3, 100, 3, false).tilePositionY(0));
-    EXPECT_EQ(1, TestTiling(3,   1, 1, true).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3,   1, 1, true).tilePositionY(0));
-    EXPECT_EQ(1, TestTiling(3, 100, 1, true).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3, 100, 1, true).tilePositionY(0));
-    EXPECT_EQ(3, TestTiling(3,   1, 3, true).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3,   1, 3, true).tilePositionY(0));
-    EXPECT_EQ(3, TestTiling(3, 100, 3, true).tileSizeY(0));
-    EXPECT_EQ(0, TestTiling(3, 100, 3, true).tilePositionY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 1), false).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 1), false).tilePositionY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(100, 1), false).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 1), false).tilePositionY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 3), false).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 3), false).tilePositionY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 3), false).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 3), false).tilePositionY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 1), true).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 1), true).tilePositionY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(100, 1), true).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 1), true).tilePositionY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 3), true).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 3), true).tilePositionY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 3), true).tileSizeY(0));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 3), true).tilePositionY(0));
 
     // Multiple tiles:
     // no border
     // positions 0, 3
-    EXPECT_EQ(2, TestTiling(3,   1, 6, false).numTiles());
-    EXPECT_EQ(3, TestTiling(3,   1, 6, false).tileSizeY(0));
-    EXPECT_EQ(3, TestTiling(3,   1, 6, false).tileSizeY(1));
-    EXPECT_EQ(0, TestTiling(3,   1, 6, false).tilePositionY(0));
-    EXPECT_EQ(3, TestTiling(3,   1, 6, false).tilePositionY(1));
-    EXPECT_EQ(3, TestTiling(3, 100, 6, false).tileSizeY(0));
-    EXPECT_EQ(3, TestTiling(3, 100, 6, false).tileSizeY(1));
-    EXPECT_EQ(0, TestTiling(3, 100, 6, false).tilePositionY(0));
-    EXPECT_EQ(3, TestTiling(3, 100, 6, false).tilePositionY(1));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), false).numTiles());
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tileSizeY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tileSizeY(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tilePositionY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tilePositionY(1));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tileSizeY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tileSizeY(1));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tilePositionY(0));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tilePositionY(1));
 
     // Multiple tiles:
     // with border
     // positions 0, 2, 3, 4
-    EXPECT_EQ(4, TestTiling(3,   1, 6, true).numTiles());
-    EXPECT_EQ(2, TestTiling(3,   1, 6, true).tileSizeY(0));
-    EXPECT_EQ(1, TestTiling(3,   1, 6, true).tileSizeY(1));
-    EXPECT_EQ(1, TestTiling(3,   1, 6, true).tileSizeY(2));
-    EXPECT_EQ(2, TestTiling(3,   1, 6, true).tileSizeY(3));
-    EXPECT_EQ(0, TestTiling(3,   1, 6, true).tilePositionY(0));
-    EXPECT_EQ(2, TestTiling(3,   1, 6, true).tilePositionY(1));
-    EXPECT_EQ(3, TestTiling(3,   1, 6, true).tilePositionY(2));
-    EXPECT_EQ(4, TestTiling(3,   1, 6, true).tilePositionY(3));
-    EXPECT_EQ(2, TestTiling(3, 100, 6, true).tileSizeY(0));
-    EXPECT_EQ(1, TestTiling(3, 100, 6, true).tileSizeY(1));
-    EXPECT_EQ(1, TestTiling(3, 100, 6, true).tileSizeY(2));
-    EXPECT_EQ(2, TestTiling(3, 100, 6, true).tileSizeY(3));
-    EXPECT_EQ(0, TestTiling(3, 100, 6, true).tilePositionY(0));
-    EXPECT_EQ(2, TestTiling(3, 100, 6, true).tilePositionY(1));
-    EXPECT_EQ(3, TestTiling(3, 100, 6, true).tilePositionY(2));
-    EXPECT_EQ(4, TestTiling(3, 100, 6, true).tilePositionY(3));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(1, 6), true).numTiles());
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(1));
+    EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(2));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(3));
+    EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(0));
+    EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(1));
+    EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(2));
+    EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(3));
+    EXPECT_EQ(2, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(0));
+    EXPECT_EQ(1, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(1));
+    EXPECT_EQ(1, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(2));
+    EXPECT_EQ(2, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(3));
+    EXPECT_EQ(0, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(0));
+    EXPECT_EQ(2, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(1));
+    EXPECT_EQ(3, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(2));
+    EXPECT_EQ(4, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(3));
 }
 
 TEST(TilingDataTest, setTotalSize)
 {
-    TestTiling data(5, 5, 5, false);
-    EXPECT_EQ(5, data.totalSizeX());
-    EXPECT_EQ(5, data.totalSizeY());
+    TestTiling data(IntSize(5, 5), IntSize(5, 5), false);
+    EXPECT_EQ(5, data.totalSize().width());
+    EXPECT_EQ(5, data.totalSize().height());
     EXPECT_EQ(1, data.numTilesX());
     EXPECT_EQ(5, data.tileSizeX(0));
     EXPECT_EQ(1, data.numTilesY());
     EXPECT_EQ(5, data.tileSizeY(0));
 
-    data.setTotalSize(6, 5);
-    EXPECT_EQ(6, data.totalSizeX());
-    EXPECT_EQ(5, data.totalSizeY());
+    data.setTotalSize(IntSize(6, 5));
+    EXPECT_EQ(6, data.totalSize().width());
+    EXPECT_EQ(5, data.totalSize().height());
     EXPECT_EQ(2, data.numTilesX());
     EXPECT_EQ(5, data.tileSizeX(0));
     EXPECT_EQ(1, data.tileSizeX(1));
     EXPECT_EQ(1, data.numTilesY());
     EXPECT_EQ(5, data.tileSizeY(0));
 
-    data.setTotalSize(5, 12);
-    EXPECT_EQ(5, data.totalSizeX());
-    EXPECT_EQ(12, data.totalSizeY());
+    data.setTotalSize(IntSize(5, 12));
+    EXPECT_EQ(5, data.totalSize().width());
+    EXPECT_EQ(12, data.totalSize().height());
     EXPECT_EQ(1, data.numTilesX());
     EXPECT_EQ(5, data.tileSizeX(0));
     EXPECT_EQ(3, data.numTilesY());
@@ -468,75 +480,85 @@ TEST(TilingDataTest, setTotalSize)
 
 TEST(TilingDataTest, setMaxTextureSizeNoBorders)
 {
-    TestTiling data(8, 16, 32, false);
+    TestTiling data(IntSize(8, 8), IntSize(16, 32), false);
     EXPECT_EQ(2, data.numTilesX());
     EXPECT_EQ(4, data.numTilesY());
 
-    data.setMaxTextureSize(32);
-    EXPECT_EQ(32, data.maxTextureSize());
+    data.setMaxTextureSize(IntSize(32, 32));
+    EXPECT_EQ(IntSize(32, 32), data.maxTextureSize());
     EXPECT_EQ(1, data.numTilesX());
     EXPECT_EQ(1, data.numTilesY());
 
-    data.setMaxTextureSize(2);
-    EXPECT_EQ(2, data.maxTextureSize());
+    data.setMaxTextureSize(IntSize(2, 2));
+    EXPECT_EQ(IntSize(2, 2), data.maxTextureSize());
     EXPECT_EQ(8, data.numTilesX());
     EXPECT_EQ(16, data.numTilesY());
 
-    data.setMaxTextureSize(5);
-    EXPECT_EQ(5, data.maxTextureSize());
+    data.setMaxTextureSize(IntSize(5, 5));
+    EXPECT_EQ(IntSize(5, 5), data.maxTextureSize());
     EXPECT_EQ(4, data.numTilesX());
     EXPECT_EQ(7, data.numTilesY());
+
+    data.setMaxTextureSize(IntSize(8, 5));
+    EXPECT_EQ(IntSize(8, 5), data.maxTextureSize());
+    EXPECT_EQ(2, data.numTilesX());
+    EXPECT_EQ(7, data.numTilesY());
 }
 
 TEST(TilingDataTest, setMaxTextureSizeBorders)
 {
-    TestTiling data(8, 16, 32, true);
+    TestTiling data(IntSize(8, 8), IntSize(16, 32), true);
     EXPECT_EQ(3, data.numTilesX());
     EXPECT_EQ(5, data.numTilesY());
 
-    data.setMaxTextureSize(32);
-    EXPECT_EQ(32, data.maxTextureSize());
+    data.setMaxTextureSize(IntSize(32, 32));
+    EXPECT_EQ(IntSize(32, 32), data.maxTextureSize());
     EXPECT_EQ(1, data.numTilesX());
     EXPECT_EQ(1, data.numTilesY());
 
-    data.setMaxTextureSize(2);
-    EXPECT_EQ(2, data.maxTextureSize());
+    data.setMaxTextureSize(IntSize(2, 2));
+    EXPECT_EQ(IntSize(2, 2), data.maxTextureSize());
     EXPECT_EQ(0, data.numTilesX());
     EXPECT_EQ(0, data.numTilesY());
 
-    data.setMaxTextureSize(5);
-    EXPECT_EQ(5, data.maxTextureSize());
+    data.setMaxTextureSize(IntSize(5, 5));
+    EXPECT_EQ(IntSize(5, 5), data.maxTextureSize());
     EXPECT_EQ(5, data.numTilesX());
     EXPECT_EQ(10, data.numTilesY());
+
+    data.setMaxTextureSize(IntSize(8, 5));
+    EXPECT_EQ(IntSize(8, 5), data.maxTextureSize());
+    EXPECT_EQ(3, data.numTilesX());
+    EXPECT_EQ(10, data.numTilesY());
 }
 
 TEST(TilingDataTest, assignment)
 {
     {
-        TestTiling source(8, 16, 32, true);
+        TestTiling source(IntSize(8, 8), IntSize(16, 32), true);
         TestTiling dest = source;
         EXPECT_EQ(source.borderTexels(), dest.borderTexels());
         EXPECT_EQ(source.maxTextureSize(), dest.maxTextureSize());
         EXPECT_EQ(source.numTilesX(), dest.numTilesX());
         EXPECT_EQ(source.numTilesY(), dest.numTilesY());
-        EXPECT_EQ(source.totalSizeX(), dest.totalSizeX());
-        EXPECT_EQ(source.totalSizeY(), dest.totalSizeY());
+        EXPECT_EQ(source.totalSize().width(), dest.totalSize().width());
+        EXPECT_EQ(source.totalSize().height(), dest.totalSize().height());
     }
     {
-        TestTiling source(3, 6, 100, false);
+        TestTiling source(IntSize(7, 3), IntSize(6, 100), false);
         TestTiling dest(source);
         EXPECT_EQ(source.borderTexels(), dest.borderTexels());
         EXPECT_EQ(source.maxTextureSize(), dest.maxTextureSize());
         EXPECT_EQ(source.numTilesX(), dest.numTilesX());
         EXPECT_EQ(source.numTilesY(), dest.numTilesY());
-        EXPECT_EQ(source.totalSizeX(), dest.totalSizeX());
-        EXPECT_EQ(source.totalSizeY(), dest.totalSizeY());
+        EXPECT_EQ(source.totalSize().width(), dest.totalSize().width());
+        EXPECT_EQ(source.totalSize().height(), dest.totalSize().height());
     }
 }
 
 TEST(TilingDataTest, setBorderTexels)
 {
-    TestTiling data(8, 16, 32, false);
+    TestTiling data(IntSize(8, 8), IntSize(16, 32), false);
     EXPECT_EQ(2, data.numTilesX());
     EXPECT_EQ(4, data.numTilesY());