summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2011-08-28 19:15:00 -0700
committerChris Craik <ccraik@google.com>2011-09-02 16:12:04 -0700
commit8ad3ab0e47f0d5039e89c1873c178f538ec1b0df (patch)
tree80f8455d94b5ae10753e35b4f6badeea5fb8e040 /Source/WebCore/platform/graphics/android/GLWebViewState.cpp
parente3edcfcfc731bd5051947d8c0a4b2685e7cae84d (diff)
downloadexternal_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.cpp18
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);