diff options
author | Chris Craik <ccraik@google.com> | 2011-09-08 16:54:13 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2011-09-08 18:14:43 -0700 |
commit | e733717c7b60d2ccfee9c47af4659ffb8e70dd73 (patch) | |
tree | 4458e4b5b038a076cf8761afa9ac0935b10cfb3e /Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp | |
parent | a2938835206f51208d52e324eb20ded39ed28d1e (diff) | |
download | external_webkit-e733717c7b60d2ccfee9c47af4659ffb8e70dd73.zip external_webkit-e733717c7b60d2ccfee9c47af4659ffb8e70dd73.tar.gz external_webkit-e733717c7b60d2ccfee9c47af4659ffb8e70dd73.tar.bz2 |
If unlock base layer marks tiles dirty, repaint
bug:5278818
Change-Id: I03206bdc5e95743054c361f235e2d94b835a95d1
Diffstat (limited to 'Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp b/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp index 573ad6b..54290cc 100644 --- a/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp @@ -141,7 +141,10 @@ bool BaseLayerAndroid::drawBasePictureInGL(SkRect& viewport, float scale, nextTiledPage->setScale(scale); m_glWebViewState->setFutureViewport(viewportTileBounds); m_glWebViewState->lockBaseLayerUpdate(); - nextTiledPage->updateTileState(viewportTileBounds); + + // ignore dirtiness return value since while zooming we repaint regardless + nextTiledPage->updateTileDirtiness(viewportTileBounds); + nextTiledPage->prepare(goingDown, goingLeft, viewportTileBounds, TiledPage::VisibleBounds); // Cancel pending paints for the foreground page @@ -212,24 +215,27 @@ bool BaseLayerAndroid::drawBasePictureInGL(SkRect& viewport, float scale, *buffersSwappedPtr = true; } - // If stuff is happening such that we need a redraw, lock updates to the - // base layer, and only then start painting. + bool needsRedraw = scrolling || zooming || !buffersSwapped; - if (needsRedraw) - m_glWebViewState->lockBaseLayerUpdate(); - else + + // if we don't expect to redraw, unlock the invals + if (!needsRedraw) m_glWebViewState->unlockBaseLayerUpdate(); - XLOG("scrolling %d, zooming %d, buffersSwapped %d, needsRedraw %d", - scrolling, zooming, buffersSwapped, needsRedraw); + // if applied invals mark tiles dirty, need to redraw + needsRedraw |= tiledPage->updateTileDirtiness(preZoomBounds); - tiledPage->updateTileState(preZoomBounds); + if (needsRedraw) { + // lock and paint what's needed unless we're zooming, since the new + // tiles won't be relevant soon anyway + m_glWebViewState->lockBaseLayerUpdate(); + if (!zooming) + tiledPage->prepare(goingDown, goingLeft, preZoomBounds, + TiledPage::ExpandedBounds); + } - // Only paint new textures if the base layer has been locked, but not if - // we're zooming since the new tiles won't be relevant soon anyway - if (needsRedraw && !zooming) - tiledPage->prepare(goingDown, goingLeft, preZoomBounds, - TiledPage::ExpandedBounds); + XLOG("scrolling %d, zooming %d, buffersSwapped %d, needsRedraw %d", + scrolling, zooming, buffersSwapped, needsRedraw); tiledPage->draw(transparency, preZoomBounds); |