From 8ad3ab0e47f0d5039e89c1873c178f538ec1b0df Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Sun, 28 Aug 2011 19:15:00 -0700 Subject: Enable double buffering via base tiles bug:2522049 allocate textures and tiles using the gldraw count when they were most recently prepared remaining issues: -layers still flicker (presumably from texture stealing) -layers aren't double buffered yet Change-Id: Iccdf68326d7d476269d4e3a13903aaab249ee92d --- .../platform/graphics/android/GLWebViewState.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'Source/WebCore/platform/graphics/android/GLWebViewState.cpp') diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp index bc07925..f030e52 100644 --- a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp +++ b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp @@ -131,8 +131,8 @@ void GLWebViewState::setBaseLayer(BaseLayerAndroid* layer, const SkRegion& inval { android::Mutex::Autolock lock(m_baseLayerLock); if (!layer || isPictureAfterFirstLayout) { - m_tiledPageA->setUsable(false); - m_tiledPageB->setUsable(false); + m_tiledPageA->discardTextures(); + m_tiledPageB->discardTextures(); } if (isPictureAfterFirstLayout) { m_baseLayerUpdate = true; @@ -355,9 +355,9 @@ void GLWebViewState::swapPages() { android::Mutex::Autolock lock(m_tiledPageLock); m_usePageA ^= true; - TiledPage* working = m_usePageA ? m_tiledPageB : m_tiledPageA; - if (zoomManager()->swapPages()) - TilesManager::instance()->resetTextureUsage(working); + TiledPage* oldPage = m_usePageA ? m_tiledPageB : m_tiledPageA; + zoomManager()->swapPages(); + oldPage->discardTextures(); } int GLWebViewState::baseContentWidth() @@ -489,15 +489,16 @@ double GLWebViewState::setupDrawing(IntRect& viewRect, SkRect& visibleRect, bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect, IntRect& webViewRect, int titleBarHeight, - IntRect& clip, float scale, bool* pagesSwapped) + IntRect& clip, float scale, bool* buffersSwappedPtr) { glFinish(); - TilesManager::instance()->registerGLWebViewState(this); + TilesManager::instance()->getProfiler()->nextFrame(viewport.fLeft, viewport.fTop, viewport.fRight, viewport.fBottom, scale); + TilesManager::instance()->incDrawGLCount(); #ifdef DEBUG TilesManager::instance()->getTilesTracker()->clear(); @@ -552,7 +553,8 @@ bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect, // set up zoom manager, shaders, etc. m_backgroundColor = baseLayer->getBackgroundColor(); double currentTime = setupDrawing(rect, viewport, webViewRect, titleBarHeight, clip, scale); - bool ret = baseLayer->drawGL(currentTime, compositedRoot, rect, viewport, scale, pagesSwapped); + bool ret = baseLayer->drawGL(currentTime, compositedRoot, rect, + viewport, scale, buffersSwappedPtr); glBindBuffer(GL_ARRAY_BUFFER, 0); -- cgit v1.1