summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
authorBart Sears <bsears@google.com>2011-04-19 21:43:45 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-04-19 21:43:45 -0700
commit0357bffe4faf3b906879e8f180ddcc46d97687fc (patch)
tree2882de81c70be65f7abb62ea2db03e148e47398b /WebCore
parent8804f0848d7d3165c86cbb529e3b51cffdb4b56b (diff)
parent2a5297c67f4a20b7f54db311376fc641a8dfc030 (diff)
downloadexternal_webkit-0357bffe4faf3b906879e8f180ddcc46d97687fc.zip
external_webkit-0357bffe4faf3b906879e8f180ddcc46d97687fc.tar.gz
external_webkit-0357bffe4faf3b906879e8f180ddcc46d97687fc.tar.bz2
Merge "DO NOT MERGE" into honeycomb-mr1
Diffstat (limited to 'WebCore')
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp10
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h7
-rw-r--r--WebCore/platform/graphics/android/TilesManager.cpp2
3 files changed, 13 insertions, 6 deletions
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
index dc0962c..964422a 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
@@ -137,6 +137,7 @@ void BackedDoubleBufferedTexture::setNotBusy()
m_delayedRelease = false;
m_delayedReleaseOwner = 0;
}
+ m_busyCond.signal();
}
bool BackedDoubleBufferedTexture::busy()
@@ -189,7 +190,7 @@ void BackedDoubleBufferedTexture::producerUpdate(TextureInfo* textureInfo)
producerReleaseAndSwap();
}
-bool BackedDoubleBufferedTexture::acquire(TextureOwner* owner)
+bool BackedDoubleBufferedTexture::acquire(TextureOwner* owner, bool force)
{
if (m_owner == owner) {
if (m_delayedRelease) {
@@ -199,7 +200,7 @@ bool BackedDoubleBufferedTexture::acquire(TextureOwner* owner)
return true;
}
- return setOwner(owner);
+ return setOwner(owner, force);
}
bool BackedDoubleBufferedTexture::tryAcquire(TextureOwner* owner, TiledPage* currentPage, TiledPage* nextPage)
@@ -216,13 +217,16 @@ bool BackedDoubleBufferedTexture::tryAcquire(TextureOwner* owner, TiledPage* cur
return false;
}
-bool BackedDoubleBufferedTexture::setOwner(TextureOwner* owner)
+bool BackedDoubleBufferedTexture::setOwner(TextureOwner* owner, bool force)
{
// if the writable texture is busy (i.e. currently being written to) then we
// can't change the owner out from underneath that texture
m_busyLock.lock();
+ while (m_busy && force)
+ m_busyCond.wait(m_busyLock);
bool busy = m_busy;
m_busyLock.unlock();
+
if (!busy) {
// if we are not busy we can try to remove the texture from the layer;
// LayerAndroid::removeTexture() is protected by the same lock as
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
index 8bfae59..7c2ea90 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
@@ -88,12 +88,12 @@ public:
// allows consumer thread to assign ownership of the texture to the tile. It
// returns false if ownership cannot be transferred because the tile is busy
- bool acquire(TextureOwner* owner);
+ bool acquire(TextureOwner* owner, bool force = false);
bool release(TextureOwner* owner);
bool tryAcquire(TextureOwner* owner, TiledPage* currentPage, TiledPage* nextPage);
// set the texture owner if not busy. Return false if busy, true otherwise.
- bool setOwner(TextureOwner* owner);
+ bool setOwner(TextureOwner* owner, bool force = false);
// private member accessor functions
TextureOwner* owner() { return m_owner; } // only used by the consumer thread
@@ -136,6 +136,9 @@ private:
// We mutex protect the reads/writes of m_busy to ensure that we are reading
// the most up-to-date value even across processors in an SMP system.
android::Mutex m_busyLock;
+ // We use this condition variable to signal that the texture
+ // is not busy anymore
+ android::Condition m_busyCond;
};
} // namespace WebCore
diff --git a/WebCore/platform/graphics/android/TilesManager.cpp b/WebCore/platform/graphics/android/TilesManager.cpp
index afc53eb..5a9a164 100644
--- a/WebCore/platform/graphics/android/TilesManager.cpp
+++ b/WebCore/platform/graphics/android/TilesManager.cpp
@@ -249,7 +249,7 @@ LayerTexture* TilesManager::getExistingTextureForLayer(LayerAndroid* layer,
layer->uniqueId(), layer);
}
- if (best && best->acquire(layer))
+ if (best && best->acquire(layer, any))
return best;
return 0;
}