summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/WebCore/platform/graphics/android/GLWebViewState.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
index 0b2d058..a7aae25 100644
--- a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
+++ b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
@@ -597,12 +597,7 @@ bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect,
TilesManager::instance()->setInvertedScreenSwitch(false);
}
- if (fullScreenInval) {
- invalRect->setX(0);
- invalRect->setY(0);
- invalRect->setWidth(0);
- invalRect->setHeight(0);
- } else {
+ if (!fullScreenInval) {
FloatRect frameworkInval = TilesManager::instance()->shader()->rectInInvScreenCoord(
m_frameworkInval);
// Inflate the invalidate rect to avoid precision lost.
@@ -619,6 +614,18 @@ bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect,
XLOG("invalRect(%d, %d, %d, %d)", inval.x(),
inval.y(), inval.width(), inval.height());
+
+ if (!invalRect->intersects(rect)) {
+ // invalidate is occurring offscreen, do full inval to guarantee redraw
+ fullScreenInval = true;
+ }
+ }
+
+ if (fullScreenInval) {
+ invalRect->setX(0);
+ invalRect->setY(0);
+ invalRect->setWidth(0);
+ invalRect->setHeight(0);
}
} else {
resetFrameworkInval();