diff options
author | Nicolas Roard <nicolasroard@google.com> | 2011-10-11 15:12:09 -0700 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2011-10-11 15:12:09 -0700 |
commit | fe8c4041901372126e1515133637098707a6b18e (patch) | |
tree | be1de7ec99e70244b0f694a6b2a4de013759265c /Source/WebKit/android | |
parent | 8242049005e7219ea9846eff8eff3cead8e2461e (diff) | |
download | external_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.cpp | 24 |
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(); |