| Index: Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp
|
| ===================================================================
|
| --- Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp (revision 125598)
|
| +++ Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp (working copy)
|
| @@ -80,6 +80,7 @@
|
| , m_readbackRequestOnImplThread(0)
|
| , m_commitCompletionEventOnImplThread(0)
|
| , m_textureAcquisitionCompletionEventOnImplThread(0)
|
| + , m_resetContentsTexturesPurgedAfterCommitOnImplThread(false)
|
| , m_nextFrameIsNewlyCommittedFrameOnImplThread(false)
|
| , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled)
|
| {
|
| @@ -445,7 +446,7 @@
|
| m_pendingBeginFrameRequest = adoptPtr(new BeginFrameAndCommitState());
|
| m_pendingBeginFrameRequest->monotonicFrameBeginTime = monotonicallyIncreasingTime();
|
| m_pendingBeginFrameRequest->scrollInfo = m_layerTreeHostImpl->processScrollDeltas();
|
| - m_pendingBeginFrameRequest->contentsTexturesWereDeleted = m_layerTreeHostImpl->contentsTexturesWerePurgedSinceLastCommit();
|
| + m_pendingBeginFrameRequest->contentsTexturesWereDeleted = m_layerTreeHostImpl->contentsTexturesPurged();
|
| m_pendingBeginFrameRequest->memoryAllocationLimitBytes = m_layerTreeHostImpl->memoryAllocationLimitBytes();
|
|
|
| m_mainThreadProxy->postTask(createCCThreadTask(this, &CCThreadProxy::beginFrame));
|
| @@ -538,7 +539,7 @@
|
| DebugScopedSetMainThreadBlocked mainThreadBlocked;
|
|
|
| CCCompletionEvent completion;
|
| - CCProxy::implThread()->postTask(createCCThreadTask(this, &CCThreadProxy::beginFrameCompleteOnImplThread, &completion, queue.release()));
|
| + CCProxy::implThread()->postTask(createCCThreadTask(this, &CCThreadProxy::beginFrameCompleteOnImplThread, &completion, queue.release(), request->contentsTexturesWereDeleted));
|
| completion.wait();
|
| }
|
|
|
| @@ -546,7 +547,7 @@
|
| m_layerTreeHost->didBeginFrame();
|
| }
|
|
|
| -void CCThreadProxy::beginFrameCompleteOnImplThread(CCCompletionEvent* completion, PassOwnPtr<CCTextureUpdateQueue> queue)
|
| +void CCThreadProxy::beginFrameCompleteOnImplThread(CCCompletionEvent* completion, PassOwnPtr<CCTextureUpdateQueue> queue, bool contentsTexturesWereDeleted)
|
| {
|
| TRACE_EVENT0("cc", "CCThreadProxy::beginFrameCompleteOnImplThread");
|
| ASSERT(!m_commitCompletionEventOnImplThread);
|
| @@ -559,6 +560,16 @@
|
| return;
|
| }
|
|
|
| + if (!contentsTexturesWereDeleted && m_layerTreeHostImpl->contentsTexturesPurged()) {
|
| + // We purged the content textures on the impl thread between the time we
|
| + // posted the beginFrame task and now, meaning we have a bunch of
|
| + // uploads that are now invalid. Clear the uploads (they all go to
|
| + // content textures), and kick another commit to fill them again.
|
| + queue->clearUploads();
|
| + setNeedsCommitOnImplThread();
|
| + } else
|
| + m_resetContentsTexturesPurgedAfterCommitOnImplThread = true;
|
| +
|
| m_currentTextureUpdateControllerOnImplThread = CCTextureUpdateController::create(queue, m_layerTreeHostImpl->resourceProvider(), m_layerTreeHostImpl->layerRenderer()->textureCopier(), m_layerTreeHostImpl->layerRenderer()->textureUploader());
|
| m_commitCompletionEventOnImplThread = completion;
|
|
|
| @@ -612,6 +623,11 @@
|
| m_layerTreeHost->beginCommitOnImplThread(m_layerTreeHostImpl.get());
|
| m_layerTreeHost->finishCommitOnImplThread(m_layerTreeHostImpl.get());
|
|
|
| + if (m_resetContentsTexturesPurgedAfterCommitOnImplThread) {
|
| + m_resetContentsTexturesPurgedAfterCommitOnImplThread = false;
|
| + m_layerTreeHostImpl->resetContentsTexturesPurged();
|
| + }
|
| +
|
| m_layerTreeHostImpl->commitComplete();
|
|
|
| m_nextFrameIsNewlyCommittedFrameOnImplThread = true;
|
| @@ -846,7 +862,7 @@
|
| {
|
| TRACE_EVENT0("cc", "CCThreadProxy::layerTreeHostClosedOnImplThread");
|
| ASSERT(isImplThread());
|
| - if (!m_layerTreeHostImpl->contentsTexturesWerePurgedSinceLastCommit())
|
| + if (!m_layerTreeHostImpl->contentsTexturesPurged())
|
| m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->resourceProvider());
|
| m_inputHandlerOnImplThread.clear();
|
| m_layerTreeHostImpl.clear();
|
|
|