diff options
-rw-r--r-- | Source/WebCore/platform/graphics/android/BaseTile.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/android/BaseTile.cpp b/Source/WebCore/platform/graphics/android/BaseTile.cpp index 98eb623..a331dfc 100644 --- a/Source/WebCore/platform/graphics/android/BaseTile.cpp +++ b/Source/WebCore/platform/graphics/android/BaseTile.cpp @@ -183,6 +183,30 @@ void BaseTile::markAsDirty(int unsigned pictureCount, m_lastDirtyPicture = pictureCount; for (int i = 0; i < m_maxBufferNumber; i++) m_dirtyArea[i].op(dirtyArea, SkRegion::kUnion_Op); + + // Check if we actually intersect with the area + bool intersect = false; + SkRegion::Iterator cliperator(dirtyArea); + int tileWidth = TilesManager::instance()->tileWidth(); + int tileHeight = TilesManager::instance()->tileHeight(); + if (m_isLayerTile) { + tileWidth = TilesManager::instance()->layerTileWidth(); + tileHeight = TilesManager::instance()->layerTileHeight(); + } + SkRect realTileRect; + SkRect dirtyRect; + while (!cliperator.done()) { + dirtyRect.set(cliperator.rect()); + if (intersectWithRect(m_x, m_y, tileWidth, tileHeight, + m_scale, dirtyRect, realTileRect)) { + intersect = true; + break; + } + cliperator.next(); + } + if (!intersect) + return; + m_dirty = true; if (m_state == UpToDate) { // We only mark a tile as unpainted in 'markAsDirty' if its status is |