summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2011-09-08 16:54:13 -0700
committerChris Craik <ccraik@google.com>2011-09-08 18:14:43 -0700
commite733717c7b60d2ccfee9c47af4659ffb8e70dd73 (patch)
tree4458e4b5b038a076cf8761afa9ac0935b10cfb3e /Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp
parenta2938835206f51208d52e324eb20ded39ed28d1e (diff)
downloadexternal_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.cpp34
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);