summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-10-11 15:42:44 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-11 15:42:44 -0700
commitd253060c6edf139871ea630f884cc6631a162854 (patch)
tree82ddd2d809d7387a511eb31fa6542d1ef9b67d67
parent85e3844824444f304a15e57f62d2e5670fb3bf47 (diff)
parentfe8c4041901372126e1515133637098707a6b18e (diff)
downloadexternal_webkit-d253060c6edf139871ea630f884cc6631a162854.zip
external_webkit-d253060c6edf139871ea630f884cc6631a162854.tar.gz
external_webkit-d253060c6edf139871ea630f884cc6631a162854.tar.bz2
Merge "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)" into ics-mr0
-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();