diff options
| author | 2011-10-05 11:35:29 -0700 | |
|---|---|---|
| committer | 2011-10-05 11:35:29 -0700 | |
| commit | f270a1521c39bb6f47ebd29c1a14d9a33f14d87f (patch) | |
| tree | f6e3a26aebb885702d22add4f6467782ff4a7045 | |
| parent | 30c845f9ca9e504d4d76099a8be111c99ac669f4 (diff) | |
| parent | dc221e01ff25ecf404ed945e1899be1e03a5462f (diff) | |
Merge "Streamline the layers update codepath. Directly update the layers transform and position. This makes updates faster and less dependent on other webkit work."
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 63c4d032ddab..440ee79aa0fd 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -518,7 +518,7 @@ public final class WebViewCore { /** * Update the layers' content */ - private native int nativeUpdateLayers(Region invalRegion); + private native boolean nativeUpdateLayers(int baseLayer); private native boolean nativeFocusBoundsChanged(); @@ -2004,18 +2004,25 @@ public final class WebViewCore { boolean mFocusSizeChanged; } + DrawData mLastDrawData = null; + // Only update the layers' content, not the base surface // PictureSet. private void webkitDrawLayers() { mDrawLayersIsScheduled = false; - if (mDrawIsScheduled) { + if (mDrawIsScheduled || mLastDrawData == null) { removeMessages(EventHub.WEBKIT_DRAW); webkitDraw(); return; } - DrawData draw = new DrawData(); - draw.mBaseLayer = nativeUpdateLayers(draw.mInvalRegion); - webkitDraw(draw); + // Directly update the layers we last passed to the UI side + if (nativeUpdateLayers(mLastDrawData.mBaseLayer)) { + // If anything more complex than position has been touched, let's do a full draw + webkitDraw(); + } else { + Message.obtain(mWebView.mPrivateHandler, + WebView.INVAL_RECT_MSG_ID).sendToTarget(); + } } private void webkitDraw() { @@ -2032,6 +2039,7 @@ public final class WebViewCore { } return; } + mLastDrawData = draw; webkitDraw(draw); } |