diff options
author | Cary Clark <cary@android.com> | 2009-11-09 12:12:40 -0500 |
---|---|---|
committer | Cary Clark <cary@android.com> | 2009-11-10 15:02:29 -0500 |
commit | 025ac4e283bb4b48f580d48541224e3996dc6f84 (patch) | |
tree | 98c3d496f3310db2229a62e91c1bdd5b7e7cafe6 /WebCore/platform/android/ScrollViewAndroid.cpp | |
parent | 7b1ba95f7d592009a5674bbc38e3af9ee83a796a (diff) | |
download | external_webkit-025ac4e283bb4b48f580d48541224e3996dc6f84.zip external_webkit-025ac4e283bb4b48f580d48541224e3996dc6f84.tar.gz external_webkit-025ac4e283bb4b48f580d48541224e3996dc6f84.tar.bz2 |
capture offscreen invalidates in webkit
The latest update of webkit changed the way drawing invalidates
are captured. ScrollView::repaintContentRectangle now includes
an intersect test that short-circuits if rect to repaint is
outside the visible content.
FrameView::repaintContentRectangle had logic to capture offscreen
drawing, but only if the repaint rect was entirely clipped out.
This changes both FrameView and ScrollView to send partial
repaints to the offscreen code, up to four rects per draw.
fixes http://b/issue?id=2207086
Diffstat (limited to 'WebCore/platform/android/ScrollViewAndroid.cpp')
-rw-r--r-- | WebCore/platform/android/ScrollViewAndroid.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/WebCore/platform/android/ScrollViewAndroid.cpp b/WebCore/platform/android/ScrollViewAndroid.cpp index 274c04f..9149deb 100644 --- a/WebCore/platform/android/ScrollViewAndroid.cpp +++ b/WebCore/platform/android/ScrollViewAndroid.cpp @@ -30,6 +30,7 @@ #include "FloatRect.h" #include "FrameView.h" #include "IntRect.h" +#include "SkRegion.h" #include "WebCoreFrameBridge.h" #include "WebCoreViewBridge.h" #include "WebViewCore.h" @@ -96,9 +97,20 @@ void ScrollView::platformRepaintContentRectangle(const IntRect &rect, bool now) } #ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS -void ScrollView::platformOffscreenContentRectangle(const IntRect& rect) +/* + Compute the offscreen parts of the drawn rectangle by subtracting + vis from rect. This can compute up to four rectangular slices. +*/ +void ScrollView::platformOffscreenContentRectangle(const IntRect& vis, + const IntRect& rect) { - android::WebViewCore::getWebViewCore(this)->offInvalidate(rect); + SkRegion rectRgn = SkRegion(rect); + rectRgn.op(vis, SkRegion::kDifference_Op); + SkRegion::Iterator iter(rectRgn); + for (; !iter.done(); iter.next()) { + const SkIRect& diff = iter.rect(); + android::WebViewCore::getWebViewCore(this)->offInvalidate(diff); + } } #endif |