summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp18
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h1
-rw-r--r--WebCore/platform/graphics/android/LayerAndroid.cpp8
3 files changed, 16 insertions, 11 deletions
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
index 470ecf1..f68050f 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
@@ -228,16 +228,16 @@ bool BackedDoubleBufferedTexture::setOwner(TextureOwner* owner)
bool BackedDoubleBufferedTexture::release(TextureOwner* owner)
{
android::Mutex::Autolock lock(m_busyLock);
- if (m_owner == owner) {
- if (!m_busy) {
- m_owner = 0;
- return true;
- } else {
- m_delayedRelease = true;
- m_delayedReleaseOwner = owner;
- }
+ if (m_owner != owner)
+ return false;
+
+ if (!m_busy) {
+ m_owner = 0;
+ } else {
+ m_delayedRelease = true;
+ m_delayedReleaseOwner = owner;
}
- return false;
+ return true;
}
void BackedDoubleBufferedTexture::setTile(TextureInfo* info, int x, int y,
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
index 2d19806..f612114 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
@@ -96,6 +96,7 @@ public:
// private member accessor functions
TextureOwner* owner() { return m_owner; } // only used by the consumer thread
+ TextureOwner* delayedReleaseOwner() { return m_delayedReleaseOwner; }
SkCanvas* canvas(); // only used by the producer thread
SkBitmap* bitmap() { return m_bitmap; }
diff --git a/WebCore/platform/graphics/android/LayerAndroid.cpp b/WebCore/platform/graphics/android/LayerAndroid.cpp
index 89ce301..33d98ea 100644
--- a/WebCore/platform/graphics/android/LayerAndroid.cpp
+++ b/WebCore/platform/graphics/android/LayerAndroid.cpp
@@ -186,9 +186,13 @@ bool LayerAndroid::removeTexture(BackedDoubleBufferedTexture* aTexture)
m_reservedTexture != m_drawingTexture)
textureReleased &= m_reservedTexture->release(this);
}
- if (m_drawingTexture && m_drawingTexture->owner() != this)
+ if (m_drawingTexture &&
+ ((m_drawingTexture->owner() != this) ||
+ (m_drawingTexture->delayedReleaseOwner() == this)))
m_drawingTexture = 0;
- if (m_reservedTexture && m_reservedTexture->owner() != this)
+ if (m_reservedTexture &&
+ ((m_reservedTexture->owner() != this) ||
+ (m_reservedTexture->delayedReleaseOwner() == this)))
m_reservedTexture = 0;
return textureReleased;
}