OSDN Git Service

Removing unnecessary new object creation in dispatchDraw
authorSunny Goyal <sunnygoyal@google.com>
Sat, 23 Jan 2016 22:40:35 +0000 (14:40 -0800)
committerSunny Goyal <sunnygoyal@google.com>
Sat, 23 Jan 2016 22:42:25 +0000 (14:42 -0800)
dispatchDraw was calling getVisiblePages which in turn calls
getDescendantCoordRelativeToParent and created multiple new abjects

Change-Id: I401fec076183979d30dfdbbdc02a57bd79f3886d

src/com/android/launcher3/PagedView.java

index 900d5e8..2dcff35 100644 (file)
@@ -28,6 +28,7 @@ import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
 import android.graphics.Rect;
+import android.graphics.RectF;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Parcel;
@@ -87,8 +88,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
     private int mFreeScrollMinScrollX = -1;
     private int mFreeScrollMaxScrollX = -1;
 
-    static final int AUTOMATIC_PAGE_SPACING = -1;
-
     protected int mFlingThresholdVelocity;
     protected int mMinFlingVelocity;
     protected int mMinSnapVelocity;
@@ -133,8 +132,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
     protected final static int TOUCH_STATE_NEXT_PAGE = 3;
     protected final static int TOUCH_STATE_REORDERING = 4;
 
-    protected final static float ALPHA_QUANTIZE_LEVEL = 0.0001f;
-
     protected int mTouchState = TOUCH_STATE_REST;
     protected boolean mForceScreenScrolled = false;
 
@@ -144,12 +141,9 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
     private int mMaximumVelocity;
     protected int mPageLayoutWidthGap;
     protected int mPageLayoutHeightGap;
-    protected int mCellCountX = 0;
-    protected int mCellCountY = 0;
     protected boolean mCenterPagesVertically;
     protected boolean mAllowOverScroll = true;
     protected int[] mTempVisiblePagesRange = new int[2];
-    protected boolean mForceDrawAllChildrenNextFrame;
 
     protected static final int INVALID_POINTER = -1;
 
@@ -198,6 +192,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
     private static final float[] sTmpPoint = new float[2];
     private static final int[] sTmpIntPoint = new int[2];
     private static final Rect sTmpRect = new Rect();
+    private static final RectF sTmpRectF = new RectF();
 
     protected final Rect mInsets = new Rect();
     protected final boolean mIsRtl;
@@ -1057,38 +1052,33 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
 
     protected void getVisiblePages(int[] range) {
         final int pageCount = getChildCount();
-        sTmpIntPoint[0] = sTmpIntPoint[1] = 0;
-
         range[0] = -1;
         range[1] = -1;
 
         if (pageCount > 0) {
-            int viewportWidth = getViewportWidth();
+            final int visibleLeft = -getLeft();
+            final int visibleRight = visibleLeft + getViewportWidth();
             int curScreen = 0;
 
             int count = getChildCount();
             for (int i = 0; i < count; i++) {
                 View currPage = getPageAt(i);
 
-                sTmpIntPoint[0] = 0;
-                Utilities.getDescendantCoordRelativeToParent(currPage, this, sTmpIntPoint, false);
-                if (sTmpIntPoint[0] > viewportWidth) {
-                    if (range[0] == -1) {
-                        continue;
-                    } else {
-                        break;
-                    }
-                }
+                // Verify if the page bounds are within the visible range.
+                sTmpRectF.left = 0;
+                sTmpRectF.right = currPage.getMeasuredWidth();
+                currPage.getMatrix().mapRect(sTmpRectF);
+                sTmpRectF.offset(currPage.getLeft() - getScrollX(), 0);
+                getMatrix().mapRect(sTmpRectF);
 
-                sTmpIntPoint[0] = currPage.getMeasuredWidth();
-                Utilities.getDescendantCoordRelativeToParent(currPage, this, sTmpIntPoint, false);
-                if (sTmpIntPoint[0] < 0) {
+                if (sTmpRectF.left > visibleRight || sTmpRectF.right < visibleLeft) {
                     if (range[0] == -1) {
                         continue;
                     } else {
                         break;
                     }
                 }
+
                 curScreen = i;
                 if (range[0] < 0) {
                     range[0] = curScreen;
@@ -1136,8 +1126,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
                 for (int i = pageCount - 1; i >= 0; i--) {
                     final View v = getPageAt(i);
                     if (v == mDragView) continue;
-                    if (mForceDrawAllChildrenNextFrame ||
-                               (leftScreen <= i && i <= rightScreen && shouldDrawChild(v))) {
+                    if (leftScreen <= i && i <= rightScreen && shouldDrawChild(v)) {
                         drawChild(canvas, v, drawingTime);
                     }
                 }
@@ -1146,7 +1135,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
                     drawChild(canvas, mDragView, drawingTime);
                 }
 
-                mForceDrawAllChildrenNextFrame = false;
                 canvas.restore();
             }
         }