summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
diff options
context:
space:
mode:
authorNicolas Roard <nicolas@android.com>2011-03-07 11:14:44 -0800
committerNicolas Roard <nicolasroard@google.com>2011-03-08 18:55:55 -0800
commit67e4aa15702646d5ff50e9524f4e63eb9ed20122 (patch)
tree054c51b8413613ea13248dad4fae47f1bd4f2426 /WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
parentdeb796f509e2ad13b4ef4c01b1a1e707b4e762ee (diff)
downloadexternal_webkit-67e4aa15702646d5ff50e9524f4e63eb9ed20122.zip
external_webkit-67e4aa15702646d5ff50e9524f4e63eb9ed20122.tar.gz
external_webkit-67e4aa15702646d5ff50e9524f4e63eb9ed20122.tar.bz2
Partial invalidation of the browser textures
bug:3461349 bug:3464483 Change-Id: I627f06d0fe48aaa0adca65cd13dc738af87eeefc
Diffstat (limited to 'WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp')
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp46
1 files changed, 43 insertions, 3 deletions
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
index 7cfa480..470ecf1 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
@@ -42,8 +42,6 @@ BackedDoubleBufferedTexture::BackedDoubleBufferedTexture(uint32_t w, uint32_t h,
SkBitmap* bitmap,
SkBitmap::Config config)
: DoubleBufferedTexture(eglGetCurrentContext())
- , m_x(-1)
- , m_y(-1)
, m_usedLevel(-1)
, m_config(config)
, m_owner(0)
@@ -147,6 +145,21 @@ bool BackedDoubleBufferedTexture::busy()
return m_busy;
}
+bool BackedDoubleBufferedTexture::textureExist(TextureInfo* textureInfo)
+{
+ if (!m_bitmap)
+ return false;
+
+ if (!m_bitmap->width() || !m_bitmap->height())
+ return false;
+
+ if (textureInfo->m_width == m_bitmap->width() &&
+ textureInfo->m_height == m_bitmap->height())
+ return true;
+
+ return false;
+}
+
void BackedDoubleBufferedTexture::producerUpdate(TextureInfo* textureInfo)
{
if (!m_bitmap)
@@ -158,7 +171,7 @@ void BackedDoubleBufferedTexture::producerUpdate(TextureInfo* textureInfo)
return;
}
- if (textureInfo->m_width == m_bitmap->width() && textureInfo->m_height == m_bitmap->height())
+ if (textureExist(textureInfo))
GLUtils::updateTextureWithBitmap(textureInfo->m_textureId, *m_bitmap);
else {
GLUtils::createTextureWithBitmap(textureInfo->m_textureId, *m_bitmap);
@@ -227,4 +240,31 @@ bool BackedDoubleBufferedTexture::release(TextureOwner* owner)
return false;
}
+void BackedDoubleBufferedTexture::setTile(TextureInfo* info, int x, int y,
+ float scale, unsigned int pictureCount)
+{
+ TextureTileInfo* textureInfo = m_texturesInfo.get(getWriteableTexture());
+ if (!textureInfo) {
+ textureInfo = new TextureTileInfo();
+ }
+ textureInfo->m_x = x;
+ textureInfo->m_y = y;
+ textureInfo->m_scale = scale;
+ textureInfo->m_picture = pictureCount;
+ m_texturesInfo.set(getWriteableTexture(), textureInfo);
+}
+
+bool BackedDoubleBufferedTexture::readyFor(BaseTile* baseTile)
+{
+ TextureTileInfo* info = m_texturesInfo.get(getReadableTexture());
+ if (info &&
+ (info->m_x == baseTile->x()) &&
+ (info->m_y == baseTile->y()) &&
+ (info->m_scale == baseTile->scale()) &&
+ (info->m_picture == baseTile->lastPaintedPicture())) {
+ return true;
+ }
+ return false;
+}
+
} // namespace WebCore