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

Commit 65aaec3d authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Lazily allocate seldom-used data structures"

parents 2a0451e5 16c03184
Loading
Loading
Loading
Loading
+44 −16
Original line number Original line Diff line number Diff line
@@ -59,11 +59,11 @@ class GLES20Canvas extends HardwareCanvas {
    private int mWidth;
    private int mWidth;
    private int mHeight;
    private int mHeight;
    
    
    private final float[] mPoint = new float[2];
    private float[] mPoint;
    private final float[] mLine = new float[4];
    private float[] mLine;
    
    
    private final Rect mClipBounds = new Rect();
    private Rect mClipBounds;
    private final RectF mPathBounds = new RectF();
    private RectF mPathBounds;


    private DrawFilter mFilter;
    private DrawFilter mFilter;


@@ -442,6 +442,31 @@ class GLES20Canvas extends HardwareCanvas {
    private static native void nInterrupt(int renderer);
    private static native void nInterrupt(int renderer);
    private static native void nResume(int renderer);
    private static native void nResume(int renderer);


    ///////////////////////////////////////////////////////////////////////////
    // Support
    ///////////////////////////////////////////////////////////////////////////

    private Rect getInternalClipBounds() {
        if (mClipBounds == null) mClipBounds = new Rect();
        return mClipBounds;
    }


    private RectF getPathBounds() {
        if (mPathBounds == null) mPathBounds = new RectF();
        return mPathBounds;
    }

    private float[] getPointStorage() {
        if (mPoint == null) mPoint = new float[2];
        return mPoint;
    }

    private float[] getLineStorage() {
        if (mLine == null) mLine = new float[4];
        return mLine;
    }

    ///////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////
    // Clipping
    // Clipping
    ///////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////
@@ -530,9 +555,10 @@ class GLES20Canvas extends HardwareCanvas {


    @Override
    @Override
    public boolean quickReject(Path path, EdgeType type) {
    public boolean quickReject(Path path, EdgeType type) {
        path.computeBounds(mPathBounds, true);
        RectF pathBounds = getPathBounds();
        return nQuickReject(mRenderer, mPathBounds.left, mPathBounds.top,
        path.computeBounds(pathBounds, true);
                mPathBounds.right, mPathBounds.bottom);
        return nQuickReject(mRenderer, pathBounds.left, pathBounds.top,
                pathBounds.right, pathBounds.bottom);
    }
    }


    @Override
    @Override
@@ -967,11 +993,12 @@ class GLES20Canvas extends HardwareCanvas {


    @Override
    @Override
    public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {
    public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {
        mLine[0] = startX;
        float[] line = getLineStorage();
        mLine[1] = startY;
        line[0] = startX;
        mLine[2] = stopX;
        line[1] = startY;
        mLine[3] = stopY;
        line[2] = stopX;
        drawLines(mLine, 0, 4, paint);
        line[3] = stopY;
        drawLines(line, 0, 4, paint);
    }
    }


    @Override
    @Override
@@ -1012,7 +1039,7 @@ class GLES20Canvas extends HardwareCanvas {


    @Override
    @Override
    public void drawPaint(Paint paint) {
    public void drawPaint(Paint paint) {
        final Rect r = mClipBounds;
        final Rect r = getInternalClipBounds();
        nGetClipBounds(mRenderer, r);
        nGetClipBounds(mRenderer, r);
        drawRect(r.left, r.top, r.right, r.bottom, paint);
        drawRect(r.left, r.top, r.right, r.bottom, paint);
    }
    }
@@ -1089,9 +1116,10 @@ class GLES20Canvas extends HardwareCanvas {


    @Override
    @Override
    public void drawPoint(float x, float y, Paint paint) {
    public void drawPoint(float x, float y, Paint paint) {
        mPoint[0] = x;
        float[] point = getPointStorage();
        mPoint[1] = y;
        point[0] = x;
        drawPoints(mPoint, 0, 2, paint);
        point[1] = y;
        drawPoints(point, 0, 2, paint);
    }
    }


    @Override
    @Override
+21 −6
Original line number Original line Diff line number Diff line
@@ -30,9 +30,9 @@ class GLES20DisplayList extends DisplayList {
    // alive as long as the DisplayList is alive.  The Bitmap and DisplayList lists
    // alive as long as the DisplayList is alive.  The Bitmap and DisplayList lists
    // are populated by the GLES20RecordingCanvas during appropriate drawing calls and are
    // are populated by the GLES20RecordingCanvas during appropriate drawing calls and are
    // cleared at the start of a new drawing frame or when the view is detached from the window.
    // cleared at the start of a new drawing frame or when the view is detached from the window.
    final ArrayList<Bitmap> mBitmaps = new ArrayList<Bitmap>(10);
    private ArrayList<Bitmap> mBitmaps;
    final ArrayList<NinePatch> mNinePatches = new ArrayList<NinePatch>(10);
    private ArrayList<NinePatch> mNinePatches;
    final ArrayList<DisplayList> mChildDisplayLists = new ArrayList<DisplayList>();
    private ArrayList<DisplayList> mChildDisplayLists;


    private GLES20RecordingCanvas mCanvas;
    private GLES20RecordingCanvas mCanvas;
    private boolean mValid;
    private boolean mValid;
@@ -89,9 +89,24 @@ class GLES20DisplayList extends DisplayList {
    }
    }


    void clearReferences() {
    void clearReferences() {
        mBitmaps.clear();
        if (mBitmaps != null) mBitmaps.clear();
        mNinePatches.clear();
        if (mNinePatches != null) mNinePatches.clear();
        mChildDisplayLists.clear();
        if (mChildDisplayLists != null) mChildDisplayLists.clear();
    }

    ArrayList<Bitmap> getBitmaps() {
        if (mBitmaps == null) mBitmaps = new ArrayList<Bitmap>(5);
        return mBitmaps;
    }

    ArrayList<NinePatch> getNinePatches() {
        if (mNinePatches == null) mNinePatches = new ArrayList<NinePatch>(5);
        return mNinePatches;
    }

    ArrayList<DisplayList> getChildDisplayLists() {
        if (mChildDisplayLists == null) mChildDisplayLists = new ArrayList<DisplayList>();
        return mChildDisplayLists;
    }
    }


    @Override
    @Override
+9 −9
Original line number Original line Diff line number Diff line
@@ -74,7 +74,7 @@ class GLES20RecordingCanvas extends GLES20Canvas {
        if (paint != null) {
        if (paint != null) {
            final Shader shader = paint.getShader();
            final Shader shader = paint.getShader();
            if (shader instanceof BitmapShader) {
            if (shader instanceof BitmapShader) {
                mDisplayList.mBitmaps.add(((BitmapShader) shader).mBitmap);
                mDisplayList.getBitmaps().add(((BitmapShader) shader).mBitmap);
            }
            }
        }
        }
    }
    }
@@ -82,36 +82,36 @@ class GLES20RecordingCanvas extends GLES20Canvas {
    @Override
    @Override
    public void drawPatch(NinePatch patch, RectF dst, Paint paint) {
    public void drawPatch(NinePatch patch, RectF dst, Paint paint) {
        super.drawPatch(patch, dst, paint);
        super.drawPatch(patch, dst, paint);
        mDisplayList.mBitmaps.add(patch.getBitmap());
        mDisplayList.getBitmaps().add(patch.getBitmap());
        mDisplayList.mNinePatches.add(patch);
        mDisplayList.getNinePatches().add(patch);
        // Shaders in the Paint are ignored when drawing a Bitmap
        // Shaders in the Paint are ignored when drawing a Bitmap
    }
    }


    @Override
    @Override
    public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) {
    public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) {
        super.drawBitmap(bitmap, left, top, paint);
        super.drawBitmap(bitmap, left, top, paint);
        mDisplayList.mBitmaps.add(bitmap);
        mDisplayList.getBitmaps().add(bitmap);
        // Shaders in the Paint are ignored when drawing a Bitmap
        // Shaders in the Paint are ignored when drawing a Bitmap
    }
    }


    @Override
    @Override
    public void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) {
    public void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) {
        super.drawBitmap(bitmap, matrix, paint);
        super.drawBitmap(bitmap, matrix, paint);
        mDisplayList.mBitmaps.add(bitmap);
        mDisplayList.getBitmaps().add(bitmap);
        // Shaders in the Paint are ignored when drawing a Bitmap
        // Shaders in the Paint are ignored when drawing a Bitmap
    }
    }


    @Override
    @Override
    public void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) {
    public void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) {
        super.drawBitmap(bitmap, src, dst, paint);
        super.drawBitmap(bitmap, src, dst, paint);
        mDisplayList.mBitmaps.add(bitmap);
        mDisplayList.getBitmaps().add(bitmap);
        // Shaders in the Paint are ignored when drawing a Bitmap
        // Shaders in the Paint are ignored when drawing a Bitmap
    }
    }


    @Override
    @Override
    public void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) {
    public void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) {
        super.drawBitmap(bitmap, src, dst, paint);
        super.drawBitmap(bitmap, src, dst, paint);
        mDisplayList.mBitmaps.add(bitmap);
        mDisplayList.getBitmaps().add(bitmap);
        // Shaders in the Paint are ignored when drawing a Bitmap
        // Shaders in the Paint are ignored when drawing a Bitmap
    }
    }


@@ -134,7 +134,7 @@ class GLES20RecordingCanvas extends GLES20Canvas {
            int vertOffset, int[] colors, int colorOffset, Paint paint) {
            int vertOffset, int[] colors, int colorOffset, Paint paint) {
        super.drawBitmapMesh(bitmap, meshWidth, meshHeight, verts, vertOffset,
        super.drawBitmapMesh(bitmap, meshWidth, meshHeight, verts, vertOffset,
                colors, colorOffset, paint);
                colors, colorOffset, paint);
        mDisplayList.mBitmaps.add(bitmap);
        mDisplayList.getBitmaps().add(bitmap);
        // Shaders in the Paint are ignored when drawing a Bitmap
        // Shaders in the Paint are ignored when drawing a Bitmap
    }
    }


@@ -147,7 +147,7 @@ class GLES20RecordingCanvas extends GLES20Canvas {
    @Override
    @Override
    public int drawDisplayList(DisplayList displayList, Rect dirty, int flags) {
    public int drawDisplayList(DisplayList displayList, Rect dirty, int flags) {
        int status = super.drawDisplayList(displayList, dirty, flags);
        int status = super.drawDisplayList(displayList, dirty, flags);
        mDisplayList.mChildDisplayLists.add(displayList);
        mDisplayList.getChildDisplayLists().add(displayList);
        return status;
        return status;
    }
    }


+15 −18
Original line number Original line Diff line number Diff line
@@ -40,7 +40,6 @@ import android.graphics.Shader;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.hardware.display.DisplayManagerGlobal;
import android.hardware.display.DisplayManagerGlobal;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder;
@@ -3054,18 +3053,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    private int[] mDrawableState = null;
    private int[] mDrawableState = null;
    /**
     * Set to true when drawing cache is enabled and cannot be created.
     *
     * @hide
     */
    public boolean mCachingFailed;
    private Bitmap mDrawingCache;
    private Bitmap mUnscaledDrawingCache;
    private HardwareLayer mHardwareLayer;
    DisplayList mDisplayList;
    /**
    /**
     * When this view has focus and the next focus is {@link #FOCUS_LEFT},
     * When this view has focus and the next focus is {@link #FOCUS_LEFT},
     * the user may specify which view to go to next.
     * the user may specify which view to go to next.
@@ -3258,6 +3245,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    int mLayerType = LAYER_TYPE_NONE;
    int mLayerType = LAYER_TYPE_NONE;
    Paint mLayerPaint;
    Paint mLayerPaint;
    Rect mLocalDirtyRect;
    Rect mLocalDirtyRect;
    private HardwareLayer mHardwareLayer;
    /**
     * Set to true when drawing cache is enabled and cannot be created.
     *
     * @hide
     */
    public boolean mCachingFailed;
    private Bitmap mDrawingCache;
    private Bitmap mUnscaledDrawingCache;
    DisplayList mDisplayList;
    /**
    /**
     * Set to true when the view is sending hover accessibility events because it
     * Set to true when the view is sending hover accessibility events because it
@@ -3309,8 +3308,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        mUserPaddingStart = UNDEFINED_PADDING;
        mUserPaddingStart = UNDEFINED_PADDING;
        mUserPaddingEnd = UNDEFINED_PADDING;
        mUserPaddingEnd = UNDEFINED_PADDING;
        if (!sUseBrokenMakeMeasureSpec && context.getApplicationInfo().targetSdkVersion <=
        if (!sUseBrokenMakeMeasureSpec && context != null &&
                Build.VERSION_CODES.JELLY_BEAN_MR1 ) {
                context.getApplicationInfo().targetSdkVersion <= JELLY_BEAN_MR1) {
            // Older apps may need this compatibility hack for measurement.
            // Older apps may need this compatibility hack for measurement.
            sUseBrokenMakeMeasureSpec = true;
            sUseBrokenMakeMeasureSpec = true;
        }
        }
@@ -4872,7 +4871,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * Note: Called from the default {@link AccessibilityDelegate}.
     * Note: Called from the default {@link AccessibilityDelegate}.
     */
     */
    void onPopulateAccessibilityEventInternal(AccessibilityEvent event) {
    void onPopulateAccessibilityEventInternal(AccessibilityEvent event) {
    }
    }
    /**
    /**
@@ -8598,8 +8596,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    void setFlags(int flags, int mask) {
    void setFlags(int flags, int mask) {
        final boolean accessibilityEnabled =
        final boolean accessibilityEnabled =
                AccessibilityManager.getInstance(mContext).isEnabled();
                AccessibilityManager.getInstance(mContext).isEnabled();
        final boolean oldIncludeForAccessibility = accessibilityEnabled
        final boolean oldIncludeForAccessibility = accessibilityEnabled && includeForAccessibility();
                ? includeForAccessibility() : false;
        int old = mViewFlags;
        int old = mViewFlags;
        mViewFlags = (mViewFlags & ~mask) | (flags & mask);
        mViewFlags = (mViewFlags & ~mask) | (flags & mask);