From 8bf6f311e8a6b711e576d2a48d174d508d85f714 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Sat, 23 Jan 2016 14:40:35 -0800 Subject: [PATCH] Removing unnecessary new object creation in dispatchDraw dispatchDraw was calling getVisiblePages which in turn calls getDescendantCoordRelativeToParent and created multiple new abjects Change-Id: I401fec076183979d30dfdbbdc02a57bd79f3886d --- src/com/android/launcher3/PagedView.java | 38 ++++++++---------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 900d5e84a8..2dcff35b5e 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -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,22 +1052,26 @@ 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) { + // 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); + + if (sTmpRectF.left > visibleRight || sTmpRectF.right < visibleLeft) { if (range[0] == -1) { continue; } else { @@ -1080,15 +1079,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } } - sTmpIntPoint[0] = currPage.getMeasuredWidth(); - Utilities.getDescendantCoordRelativeToParent(currPage, this, sTmpIntPoint, false); - if (sTmpIntPoint[0] < 0) { - 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(); } }