Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8bf6f311 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Removing unnecessary new object creation in dispatchDraw

dispatchDraw was calling getVisiblePages which in turn calls
getDescendantCoordRelativeToParent and created multiple new abjects

Change-Id: I401fec076183979d30dfdbbdc02a57bd79f3886d
parent a5cfbe80
Loading
Loading
Loading
Loading
+13 −25
Original line number Diff line number Diff line
@@ -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();
            }
        }