From ac6df2d0376aed28eb0dac9baba00497ae40bdfb Mon Sep 17 00:00:00 2001 From: Nicolas Roard Date: Thu, 11 Feb 2010 18:35:16 +0000 Subject: [PATCH] Move the animations in the UI thread --- core/java/android/webkit/WebView.java | 68 ++++----------------------- 1 file changed, 10 insertions(+), 58 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index b0233abebc44d..6c7cd712289fb 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -213,8 +213,6 @@ public class WebView extends AbsoluteLayout // true means redraw the screen all-the-time. Only with AUTO_REDRAW_HACK private boolean mAutoRedraw; private int mRootLayer; // C++ pointer to the root layer - private boolean mLayersHaveAnimations; - private EvaluateLayersAnimations mEvaluateThread; static final String LOGTAG = "webview"; @@ -3072,6 +3070,15 @@ public class WebView extends AbsoluteLayout int scrollY = computeVerticalScrollOffset(); int viewHeight = getHeight() - getVisibleTitleHeight(); + // Currently for each draw we compute the animation values; + // We may in the future decide to do that independently. + if (nativeEvaluateLayersAnimations(mRootLayer)) { + // If we have unfinished (or unstarted) animations, + // we ask for a repaint. + invalidate(); + } + + // We can now draw the layers. nativeDrawLayers(mRootLayer, mScrollX, scrollY, getWidth(), viewHeight, mActualScale, canvas); @@ -3414,40 +3421,6 @@ public class WebView extends AbsoluteLayout nodePointer); } - /* - * This class runs the layers animations in their own thread, - * so that we do not slow down the UI. - */ - private class EvaluateLayersAnimations extends Thread { - boolean mRunning = true; - // delay corresponds to 40fps, no need to go faster. - int mDelay = 25; // in ms - public void run() { - while (mRunning) { - if (mLayersHaveAnimations && mRootLayer != 0) { - // updates is a C++ pointer to a Vector of AnimationValues - int updates = nativeEvaluateLayersAnimations(mRootLayer); - if (updates == 0) { - mRunning = false; - } - Message.obtain(mPrivateHandler, - WebView.IMMEDIATE_REPAINT_MSG_ID, - updates, 0).sendToTarget(); - } else { - mRunning = false; - } - try { - Thread.currentThread().sleep(mDelay); - } catch (InterruptedException e) { - mRunning = false; - } - } - } - public void cancel() { - mRunning = false; - } - } - /* * This class requests an Adapter for the WebTextView which shows past * entries stored in the database. It is a Runnable so that it can be done @@ -5929,13 +5902,6 @@ public class WebView extends AbsoluteLayout break; } case IMMEDIATE_REPAINT_MSG_ID: { - int updates = msg.arg1; - if (updates != 0) { - // updates is a C++ pointer to a Vector of - // AnimationValues that we apply to the layers. - // The Vector is deallocated in nativeUpdateLayers(). - nativeUpdateLayers(updates); - } invalidate(); break; } @@ -5945,18 +5911,6 @@ public class WebView extends AbsoluteLayout if (oldLayer > 0) { nativeDestroyLayer(oldLayer); } - if (mRootLayer == 0) { - mLayersHaveAnimations = false; - } - if (mEvaluateThread != null) { - mEvaluateThread.cancel(); - mEvaluateThread = null; - } - if (nativeLayersHaveAnimations(mRootLayer)) { - mLayersHaveAnimations = true; - mEvaluateThread = new EvaluateLayersAnimations(); - mEvaluateThread.start(); - } invalidate(); break; } @@ -6729,9 +6683,7 @@ public class WebView extends AbsoluteLayout private native void nativeDestroy(); private native void nativeDrawCursorRing(Canvas content); private native void nativeDestroyLayer(int layer); - private native int nativeEvaluateLayersAnimations(int layer); - private native boolean nativeLayersHaveAnimations(int layer); - private native void nativeUpdateLayers(int updates); + private native boolean nativeEvaluateLayersAnimations(int layer); private native void nativeDrawLayers(int layer, int scrollX, int scrollY, int width, int height,