summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/TransferQueue.cpp
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2012-02-23 15:35:20 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-02-23 15:35:20 -0800
commit7ebd389d0f7a0e47fe731e1d024753bce0f0614d (patch)
tree19f5541e722dcc22da7783ec85ea61e1c4ca178b /Source/WebCore/platform/graphics/android/TransferQueue.cpp
parent92a7e4bc6b67b150cbb30f78374173ecfeb43607 (diff)
downloadexternal_webkit-7ebd389d0f7a0e47fe731e1d024753bce0f0614d.zip
external_webkit-7ebd389d0f7a0e47fe731e1d024753bce0f0614d.tar.gz
external_webkit-7ebd389d0f7a0e47fe731e1d024753bce0f0614d.tar.bz2
Revert "simplify texture generation filters"
Seems to be a problem with the refcounting. bug:6050242 bug:6058365 This reverts commit 92a7e4bc6b67b150cbb30f78374173ecfeb43607
Diffstat (limited to 'Source/WebCore/platform/graphics/android/TransferQueue.cpp')
-rw-r--r--Source/WebCore/platform/graphics/android/TransferQueue.cpp44
1 files changed, 18 insertions, 26 deletions
diff --git a/Source/WebCore/platform/graphics/android/TransferQueue.cpp b/Source/WebCore/platform/graphics/android/TransferQueue.cpp
index 3c2ed1b..2d5be64 100644
--- a/Source/WebCore/platform/graphics/android/TransferQueue.cpp
+++ b/Source/WebCore/platform/graphics/android/TransferQueue.cpp
@@ -67,6 +67,7 @@ TransferQueue::TransferQueue(bool useMinimalMem)
, m_fboID(0)
, m_sharedSurfaceTextureId(0)
, m_hasGLContext(true)
+ , m_interruptedByRemovingOp(false)
, m_currentDisplay(EGL_NO_DISPLAY)
, m_currentUploadType(DEFAULT_UPLOAD_TYPE)
{
@@ -245,8 +246,17 @@ void TransferQueue::blitTileFromQueue(GLuint fboID, BaseTileTexture* destTex,
#endif
}
+void TransferQueue::interruptTransferQueue(bool interrupt)
+{
+ m_transferQueueItemLocks.lock();
+ m_interruptedByRemovingOp = interrupt;
+ if (m_interruptedByRemovingOp)
+ m_transferQueueItemCond.signal();
+ m_transferQueueItemLocks.unlock();
+}
+
// This function must be called inside the m_transferQueueItemLocks, for the
-// wait and getHasGLContext().
+// wait, m_interruptedByRemovingOp and getHasGLContext().
// Only called by updateQueueWithBitmap() for now.
bool TransferQueue::readyForUpdate()
{
@@ -254,8 +264,13 @@ bool TransferQueue::readyForUpdate()
return false;
// Don't use a while loop since when the WebView tear down, the emptyCount
// will still be 0, and we bailed out b/c of GL context lost.
- if (!m_emptyItemCount)
+ if (!m_emptyItemCount) {
+ if (m_interruptedByRemovingOp)
+ return false;
m_transferQueueItemCond.wait(m_transferQueueItemLocks);
+ if (m_interruptedByRemovingOp)
+ return false;
+ }
if (!getHasGLContext())
return false;
@@ -315,8 +330,6 @@ void TransferQueue::setPendingDiscard()
if (m_transferQueue[i].status == pendingBlit)
m_transferQueue[i].status = pendingDiscard;
- for (unsigned int i = 0 ; i < m_pureColorTileQueue.size(); i++)
- SkSafeUnref(m_pureColorTileQueue[i].savedBaseTilePtr);
m_pureColorTileQueue.clear();
bool GLContextExisted = getHasGLContext();
@@ -345,7 +358,6 @@ void TransferQueue::updatePureColorTiles()
// The queue should be clear instead of setting to different status.
XLOG("Warning: Don't expect an emptyItem here.");
}
- SkSafeUnref(data->savedBaseTilePtr);
}
m_pureColorTileQueue.clear();
}
@@ -386,11 +398,6 @@ void TransferQueue::updateDirtyBaseTiles()
if (result != OK)
XLOGC("unexpected error: updateTexImage return %d", result);
}
-
- XLOG("removing tile %p from %p, update",
- m_transferQueue[index].savedBaseTilePtr,
- &m_transferQueue[index]);
- SkSafeUnref(m_transferQueue[index].savedBaseTilePtr);
m_transferQueue[index].savedBaseTilePtr = 0;
m_transferQueue[index].status = emptyItem;
if (obsoleteBaseTile) {
@@ -511,7 +518,7 @@ bool TransferQueue::tryUpdateQueueWithBitmap(const TileRenderInfo* renderInfo,
ANativeWindow_unlockAndPost(m_ANW.get());
}
- // b) After update the Surface Texture, now update the transfer queue info.
+ // b) After update the Surface Texture, now udpate the transfer queue info.
addItemInTransferQueue(renderInfo, currentUploadType, &bitmap);
XLOG("Bitmap updated x, y %d %d, baseTile %p",
@@ -536,19 +543,8 @@ void TransferQueue::addItemCommon(const TileRenderInfo* renderInfo,
TextureUploadType type,
TileTransferData* data)
{
- BaseTile* old = data->savedBaseTilePtr;
- SkSafeRef(renderInfo->baseTile);
- SkSafeUnref(data->savedBaseTilePtr);
-
data->savedBaseTileTexturePtr = renderInfo->baseTile->backTexture();
data->savedBaseTilePtr = renderInfo->baseTile;
- XLOG("adding tile %p, %d by %d, refs %d, removed %p, dataPtr %p",
- data->savedBaseTilePtr,
- data->savedBaseTilePtr->x(),
- data->savedBaseTilePtr->y(),
- data->savedBaseTilePtr->getRefCnt(),
- old,
- data);
data->status = pendingBlit;
data->uploadType = type;
@@ -642,10 +638,6 @@ void TransferQueue::cleanupPendingDiscard()
XLOG("transfer queue discarded tile %p, removed texture", tile);
}
- XLOG("removing tile %p from %p, cleanup",
- m_transferQueue[index].savedBaseTilePtr,
- &m_transferQueue[index]);
- SkSafeUnref(m_transferQueue[index].savedBaseTilePtr);
m_transferQueue[index].savedBaseTilePtr = 0;
m_transferQueue[index].savedBaseTileTexturePtr = 0;
m_transferQueue[index].status = emptyItem;