From 524aab57cdad19514443e52a0710d0e2b148f281 Mon Sep 17 00:00:00 2001 From: Grace Kloba Date: Wed, 7 Apr 2010 11:12:52 -0700 Subject: [PATCH] For performance reason, we choose to block the picture update during drag and fling. For sites like nytimes.com, there is a JavaScript constantly updating the content. If we don't block the live update during drag/fling, frame rate can drop by 30%. This essentially reverted the CL for http://b/issue?id=2310295. But as we honor preventDefault on touch move now, the two sites mentioned in that bug do not have problem even after this CL. Fix http://b/issue?id=2574172 --- core/java/android/webkit/WebView.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 05263628b44c3..4233af196ba66 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -4882,6 +4882,9 @@ public class WebView extends AbsoluteLayout // we will not rewrite drag code here, but we // will try fling if it applies. WebViewCore.reducePriority(); + // to get better performance, pause updating the + // picture + WebViewCore.pauseUpdatePicture(mWebViewCore); // fall through to TOUCH_DRAG_MODE } else { break; @@ -4916,8 +4919,14 @@ public class WebView extends AbsoluteLayout doFling(); break; } + // fall through + case TOUCH_DRAG_START_MODE: + // TOUCH_DRAG_START_MODE should not happen for the real + // device as we almost certain will get a MOVE. But this + // is possible on emulator. mLastVelocity = 0; WebViewCore.resumePriority(); + WebViewCore.resumeUpdatePicture(mWebViewCore); break; } stopTouch(); @@ -4963,6 +4972,8 @@ public class WebView extends AbsoluteLayout private void startDrag() { WebViewCore.reducePriority(); + // to get better performance, pause updating the picture + WebViewCore.pauseUpdatePicture(mWebViewCore); if (!mDragFromTextInput) { nativeHideCursor(); } @@ -5026,6 +5037,7 @@ public class WebView extends AbsoluteLayout } if (mTouchMode == TOUCH_DRAG_MODE) { WebViewCore.resumePriority(); + WebViewCore.resumeUpdatePicture(mWebViewCore); } mPrivateHandler.removeMessages(SWITCH_TO_SHORTPRESS); mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); @@ -5360,6 +5372,7 @@ public class WebView extends AbsoluteLayout } if ((maxX == 0 && vy == 0) || (maxY == 0 && vx == 0)) { WebViewCore.resumePriority(); + WebViewCore.resumeUpdatePicture(mWebViewCore); return; } float currentVelocity = mScroller.getCurrVelocity(); @@ -6369,6 +6382,7 @@ public class WebView extends AbsoluteLayout break; case RESUME_WEBCORE_PRIORITY: WebViewCore.resumePriority(); + WebViewCore.resumeUpdatePicture(mWebViewCore); break; case LONG_PRESS_CENTER: