summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-11-14 17:41:26 -0800
committerNicolas Roard <nicolasroard@google.com>2011-11-14 17:52:08 -0800
commit61a908361c8a96eeb70afdb5430e89845edb2bdd (patch)
treef73486ad42868a85739c21a0501a37c07d61d51b /Source
parent4c64d282bac19cea4612c86ed79803ad09abb5fb (diff)
downloadexternal_webkit-61a908361c8a96eeb70afdb5430e89845edb2bdd.zip
external_webkit-61a908361c8a96eeb70afdb5430e89845edb2bdd.tar.gz
external_webkit-61a908361c8a96eeb70afdb5430e89845edb2bdd.tar.bz2
Only mark tiles as dirty if the inval region actually intersects
bug:5553084 Change-Id: Ic5cf86ff8f53e86fca9ae98745d9556eadc7f8d2
Diffstat (limited to 'Source')
-rw-r--r--Source/WebCore/platform/graphics/android/BaseTile.cpp24
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