From f6a40880028cf495025747229c627f42e25acc66 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Tue, 27 Sep 2011 10:17:32 -0700 Subject: Use state machine to track tile state bug:5369978 Manage invalidations, painting, transferring, and swapping with a state machine. notes: * readyFor shouldn't be needed if all of the events that would cause a readyfor fail mark the tile dirty (such as stealing, scale change) * changing the scale of a page should discard all textures * m_dirty should be more gracefully worked into the state machine * a tile may drop dirtiness notifications if it's already painting, since upon completion m_dirty will be cleared - (issues for layers only) Change-Id: I5909fb5d208da2fb276e223c56bf143741a9a24c --- .../platform/graphics/android/BaseTileTexture.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'Source/WebCore/platform/graphics/android/BaseTileTexture.cpp') diff --git a/Source/WebCore/platform/graphics/android/BaseTileTexture.cpp b/Source/WebCore/platform/graphics/android/BaseTileTexture.cpp index d60d695..54c96c8 100644 --- a/Source/WebCore/platform/graphics/android/BaseTileTexture.cpp +++ b/Source/WebCore/platform/graphics/android/BaseTileTexture.cpp @@ -32,11 +32,14 @@ #include "GLUtils.h" #include "TilesManager.h" -#ifdef DEBUG - #include #include +#undef XLOGC +#define XLOGC(...) android_printLog(ANDROID_LOG_DEBUG, "BaseTileTexture", __VA_ARGS__) + +#ifdef DEBUG + #undef XLOG #define XLOG(...) android_printLog(ANDROID_LOG_DEBUG, "BaseTileTexture", __VA_ARGS__) @@ -89,7 +92,12 @@ void BaseTileTexture::discardTexture() { if (m_ownTextureId) GLUtils::deleteTexture(&m_ownTextureId); - release(m_owner); + + if (m_owner) { + // clear both Tile->Texture and Texture->Tile links + m_owner->removeTexture(this); + release(m_owner); + } } void BaseTileTexture::destroyTextures(SharedTexture** textures) @@ -227,9 +235,6 @@ bool BaseTileTexture::release(TextureOwner* owner) if (m_owner != owner) return false; - // force readyFor to return false next call (even if texture reaquired by same tile) - m_ownTextureTileInfo.m_x = -1; - m_ownTextureTileInfo.m_y = -1; if (!m_busy) { m_owner = 0; } else { @@ -271,6 +276,11 @@ void BaseTileTexture::setOwnTextureTileInfoFromQueue(const TextureTileInfo* info m_ownTextureTileInfo.m_painter = info->m_painter; m_ownTextureTileInfo.m_picture = info->m_picture; m_ownTextureTileInfo.m_inverted = TilesManager::instance()->invertedScreen(); + if (m_owner) { + BaseTile* owner = static_cast(m_owner); + owner->backTextureTransfer(); + } + } bool BaseTileTexture::readyFor(BaseTile* baseTile) -- cgit v1.1