diff options
author | Chris Craik <ccraik@google.com> | 2011-08-28 19:15:00 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2011-09-02 16:12:04 -0700 |
commit | 8ad3ab0e47f0d5039e89c1873c178f538ec1b0df (patch) | |
tree | 80f8455d94b5ae10753e35b4f6badeea5fb8e040 /Source/WebCore/platform/graphics/android/GLWebViewState.cpp | |
parent | e3edcfcfc731bd5051947d8c0a4b2685e7cae84d (diff) | |
download | external_webkit-8ad3ab0e47f0d5039e89c1873c178f538ec1b0df.zip external_webkit-8ad3ab0e47f0d5039e89c1873c178f538ec1b0df.tar.gz external_webkit-8ad3ab0e47f0d5039e89c1873c178f538ec1b0df.tar.bz2 |
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
Diffstat (limited to 'Source/WebCore/platform/graphics/android/GLWebViewState.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/android/GLWebViewState.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
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); |