summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-10-11 15:12:09 -0700
committerNicolas Roard <nicolasroard@google.com>2011-10-11 15:12:09 -0700
commitfe8c4041901372126e1515133637098707a6b18e (patch)
treebe1de7ec99e70244b0f694a6b2a4de013759265c /Source/WebKit/android
parent8242049005e7219ea9846eff8eff3cead8e2461e (diff)
downloadexternal_webkit-fe8c4041901372126e1515133637098707a6b18e.zip
external_webkit-fe8c4041901372126e1515133637098707a6b18e.tar.gz
external_webkit-fe8c4041901372126e1515133637098707a6b18e.tar.bz2
Fix repaint bug. In some cases when the content size changes, the
inval rects we receive from webkit do not fully cover the area that changed. For now, fix this by forcing the invalidation of the entire content (note: we only invalidate the tiles -- we do not force an actual regeneration of the pictureset for the entire content) bug:5361852 Change-Id: I682766d0101d4c8b8a38357dc7846c0030c1f9dc
Diffstat (limited to 'Source/WebKit/android')
-rw-r--r--Source/WebKit/android/jni/WebViewCore.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp
index 17a8bc5..134408a 100644
--- a/Source/WebKit/android/jni/WebViewCore.cpp
+++ b/Source/WebKit/android/jni/WebViewCore.cpp
@@ -675,6 +675,13 @@ void WebViewCore::recordPictureSet(PictureSet* content)
if (cacheBuilder().pictureSetDisabled())
content->clear();
+#if USE(ACCELERATED_COMPOSITING)
+ // Detects if the content size has changed
+ bool contentSizeChanged = false;
+ if (content->width() != width || content->height() != height)
+ contentSizeChanged = true;
+#endif
+
content->setDimensions(width, height, &m_addInval);
// Add the current inval rects to the PictureSet, and rebuild it.
@@ -694,8 +701,25 @@ void WebViewCore::recordPictureSet(PictureSet* content)
m_addInval.setRect(r);
}
+ // Rebuild the pictureset (webkit repaint)
rebuildPictureSet(content);
+#if USE(ACCELERATED_COMPOSITING)
+ // We repainted the pictureset, but the invals are not always correct when
+ // the content size did change. For now, let's just reset the
+ // inval we will pass to the UI so that it invalidates the entire
+ // content -- tiles will be marked dirty and will have to be repainted.
+ // FIXME: the webkit invals ought to have been enough...
+ if (contentSizeChanged) {
+ SkIRect r;
+ r.fLeft = 0;
+ r.fTop = 0;
+ r.fRight = width;
+ r.fBottom = height;
+ m_addInval.setRect(r);
+ }
+#endif
+
} // WebViewCoreRecordTimeCounter
WebCore::Node* oldFocusNode = currentFocus();