OSDN Git Service

Speed up layers rendering when using animations
authorNicolas Roard <nicolas@android.com>
Tue, 20 Apr 2010 02:08:55 +0000 (19:08 -0700)
committerNicolas Roard <nicolas@android.com>
Tue, 20 Apr 2010 19:05:39 +0000 (12:05 -0700)
Cherry-pick from master

Bug:2522049
Change-Id: I441f00b6e7551930c4f76983681f4cd0c57ce017

core/java/android/webkit/WebView.java

index ff233d2..e2f5de4 100644 (file)
@@ -3219,18 +3219,14 @@ public class WebView extends AbsoluteLayout
         }
     }
 
-    private void drawExtras(Canvas canvas, int extras) {
+    private void drawExtras(Canvas canvas, int extras, boolean animationsRunning) {
         // If mNativeClass is 0, we should not reach here, so we do not
         // need to check it again.
-        // Currently for each draw we compute the animation values;
-        // We may in the future decide to do that independently.
-        if (nativeEvaluateLayersAnimations()) {
-            // If we have unfinished (or unstarted) animations,
-            // we ask for a repaint.
-            invalidate();
+        if (animationsRunning) {
+            canvas.setDrawFilter(mWebViewCore.mZoomFilter);
         }
-
         nativeDrawExtras(canvas, extras);
+        canvas.setDrawFilter(null);
     }
 
     private void drawCoreAndCursorRing(Canvas canvas, int color,
@@ -3315,8 +3311,18 @@ public class WebView extends AbsoluteLayout
             canvas.scale(mActualScale, mActualScale);
         }
 
+        boolean UIAnimationsRunning = false;
+        // Currently for each draw we compute the animation values;
+        // We may in the future decide to do that independently.
+        if (mNativeClass != 0 && nativeEvaluateLayersAnimations()) {
+            UIAnimationsRunning = true;
+            // If we have unfinished (or unstarted) animations,
+            // we ask for a repaint.
+            invalidate();
+        }
         mWebViewCore.drawContentPicture(canvas, color,
-                (animateZoom || mPreviewZoomOnly), animateScroll);
+                (animateZoom || mPreviewZoomOnly || UIAnimationsRunning),
+                animateScroll);
         if (mNativeClass == 0) return;
         // decide which adornments to draw
         int extras = DRAW_EXTRAS_NONE;
@@ -3337,7 +3343,7 @@ public class WebView extends AbsoluteLayout
         } else if (drawCursorRing) {
             extras = DRAW_EXTRAS_CURSOR_RING;
         }
-        drawExtras(canvas, extras);
+        drawExtras(canvas, extras, UIAnimationsRunning);
 
         if (extras == DRAW_EXTRAS_CURSOR_RING) {
             if (mTouchMode == TOUCH_SHORTPRESS_START_MODE) {