diff options
author | Nicolas Roard <nicolasroard@google.com> | 2011-11-15 11:29:54 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-11-15 11:29:54 -0800 |
commit | 5f30aed84f16758301c9fdca075d04bab3bb80c9 (patch) | |
tree | ac82f418541388eab1d10ec19de5707099ea713e /Source | |
parent | 047c2fb0008c735609e24b536007bf27b02ae4e6 (diff) | |
parent | 61a908361c8a96eeb70afdb5430e89845edb2bdd (diff) | |
download | external_webkit-5f30aed84f16758301c9fdca075d04bab3bb80c9.zip external_webkit-5f30aed84f16758301c9fdca075d04bab3bb80c9.tar.gz external_webkit-5f30aed84f16758301c9fdca075d04bab3bb80c9.tar.bz2 |
am 61a90836: Only mark tiles as dirty if the inval region actually intersects
* commit '61a908361c8a96eeb70afdb5430e89845edb2bdd':
Only mark tiles as dirty if the inval region actually intersects
Diffstat (limited to 'Source')
-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 |