diff options
author | Chris Craik <ccraik@google.com> | 2012-02-23 15:35:20 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-23 15:35:20 -0800 |
commit | 7ebd389d0f7a0e47fe731e1d024753bce0f0614d (patch) | |
tree | 19f5541e722dcc22da7783ec85ea61e1c4ca178b /Source/WebCore/platform/graphics/android/TransferQueue.cpp | |
parent | 92a7e4bc6b67b150cbb30f78374173ecfeb43607 (diff) | |
download | external_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.cpp | 44 |
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; |