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

Commit 816f71b7 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Move LayerType to RenderNode"

parents c0daabbe 25fbb3fa
Loading
Loading
Loading
Loading
+2 −47
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package android.view;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;

import com.android.internal.util.VirtualRefBasePtr;
@@ -34,34 +33,18 @@ import com.android.internal.util.VirtualRefBasePtr;
 * @hide
 */
final class HardwareLayer {
    private static final int LAYER_TYPE_TEXTURE = 1;
    private static final int LAYER_TYPE_DISPLAY_LIST = 2;

    private HardwareRenderer mRenderer;
    private VirtualRefBasePtr mFinalizer;
    private RenderNode mDisplayList;
    private final int mLayerType;

    private HardwareLayer(HardwareRenderer renderer, long deferredUpdater, int type) {
    private HardwareLayer(HardwareRenderer renderer, long deferredUpdater) {
        if (renderer == null || deferredUpdater == 0) {
            throw new IllegalArgumentException("Either hardware renderer: " + renderer
                    + " or deferredUpdater: " + deferredUpdater + " is invalid");
        }
        mRenderer = renderer;
        mLayerType = type;
        mFinalizer = new VirtualRefBasePtr(deferredUpdater);
    }

    private void assertType(int type) {
        if (mLayerType != type) {
            throw new IllegalAccessError("Method not appropriate for this layer type! " + mLayerType);
        }
    }

    boolean hasDisplayList() {
        return mDisplayList != null;
    }

    /**
     * Update the paint used when drawing this layer.
     *
@@ -90,11 +73,6 @@ final class HardwareLayer {
            // Already destroyed
            return;
        }

        if (mDisplayList != null) {
            mDisplayList.destroyDisplayListData();
            mDisplayList = null;
        }
        mRenderer.onLayerDestroyed(this);
        mRenderer = null;
        mFinalizer.release();
@@ -105,21 +83,6 @@ final class HardwareLayer {
        return mFinalizer.get();
    }

    public RenderNode startRecording() {
        assertType(LAYER_TYPE_DISPLAY_LIST);

        if (mDisplayList == null) {
            mDisplayList = RenderNode.create("HardwareLayer");
        }
        return mDisplayList;
    }

    public void endRecording(Rect dirtyRect) {
        nUpdateRenderLayer(mFinalizer.get(), mDisplayList.getNativeDisplayList(),
                dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
        mRenderer.pushLayerUpdate(this);
    }

    /**
     * Copies this layer into the specified bitmap.
     *
@@ -160,7 +123,6 @@ final class HardwareLayer {
     * Indicates that this layer has lost its texture.
     */
    public void detachSurfaceTexture(final SurfaceTexture surface) {
        assertType(LAYER_TYPE_TEXTURE);
        mRenderer.safelyRun(new Runnable() {
            @Override
            public void run() {
@@ -177,13 +139,11 @@ final class HardwareLayer {
    }

    public void setSurfaceTexture(SurfaceTexture surface) {
        assertType(LAYER_TYPE_TEXTURE);
        nSetSurfaceTexture(mFinalizer.get(), surface, false);
        mRenderer.pushLayerUpdate(this);
    }

    public void updateSurfaceTexture() {
        assertType(LAYER_TYPE_TEXTURE);
        nUpdateSurfaceTexture(mFinalizer.get());
        mRenderer.pushLayerUpdate(this);
    }
@@ -192,18 +152,13 @@ final class HardwareLayer {
     * This should only be used by HardwareRenderer! Do not call directly
     */
    SurfaceTexture createSurfaceTexture() {
        assertType(LAYER_TYPE_TEXTURE);
        SurfaceTexture st = new SurfaceTexture(nGetTexName(mFinalizer.get()));
        nSetSurfaceTexture(mFinalizer.get(), st, true);
        return st;
    }

    static HardwareLayer adoptTextureLayer(HardwareRenderer renderer, long layer) {
        return new HardwareLayer(renderer, layer, LAYER_TYPE_TEXTURE);
    }

    static HardwareLayer adoptDisplayListLayer(HardwareRenderer renderer, long layer) {
        return new HardwareLayer(renderer, layer, LAYER_TYPE_DISPLAY_LIST);
        return new HardwareLayer(renderer, layer);
    }

    private static native void nOnTextureDestroyed(long layerUpdater);
+0 −10
Original line number Diff line number Diff line
@@ -373,16 +373,6 @@ public abstract class HardwareRenderer {
     */
    abstract HardwareLayer createTextureLayer();

    /**
     * Creates a new hardware layer.
     *
     * @param width The minimum width of the layer
     * @param height The minimum height of the layer
     *
     * @return A hardware layer
     */
    abstract HardwareLayer createDisplayListLayer(int width, int height);

    /**
     * Creates a new {@link SurfaceTexture} that can be used to render into the
     * specified hardware layer.
+9 −5
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.view;
import android.annotation.NonNull;
import android.graphics.Matrix;
import android.graphics.Outline;
import android.graphics.Paint;

import java.util.ArrayList;
import java.util.List;
@@ -322,11 +323,13 @@ public class RenderNode {
     * handled in the drawLayer operation directly (and more efficiently).
     *
     * @param caching true if the display list represents a hardware layer, false otherwise.
     *
     * @hide
     */
    public boolean setCaching(boolean caching) {
        return nSetCaching(mNativeRenderNode, caching);
    public boolean setLayerType(int layerType) {
        return nSetLayerType(mNativeRenderNode, layerType);
    }

    public boolean setLayerPaint(Paint paint) {
        return nSetLayerPaint(mNativeRenderNode, paint != null ? paint.mNativePaint : 0);
    }

    /**
@@ -902,7 +905,8 @@ public class RenderNode {
    private static native boolean nSetCameraDistance(long renderNode, float distance);
    private static native boolean nSetPivotY(long renderNode, float pivotY);
    private static native boolean nSetPivotX(long renderNode, float pivotX);
    private static native boolean nSetCaching(long renderNode, boolean caching);
    private static native boolean nSetLayerType(long renderNode, int layerType);
    private static native boolean nSetLayerPaint(long renderNode, long paint);
    private static native boolean nSetClipToBounds(long renderNode, boolean clipToBounds);
    private static native boolean nSetProjectBackwards(long renderNode, boolean shouldProject);
    private static native boolean nSetProjectionReceiver(long renderNode, boolean shouldRecieve);
+5 −5
Original line number Diff line number Diff line
@@ -275,6 +275,11 @@ public class TextureView extends View {
        }
    }

    @Override
    public void setLayerPaint(Paint paint) {
        setLayerType(/* ignored */ 0, paint);
    }

    /**
     * Always returns {@link #LAYER_TYPE_HARDWARE}.
     */
@@ -332,11 +337,6 @@ public class TextureView extends View {
        }
    }

    @Override
    boolean destroyLayer(boolean valid) {
        return false;
    }

    /**
     * @hide
     */
+0 −6
Original line number Diff line number Diff line
@@ -256,12 +256,6 @@ public class ThreadedRenderer extends HardwareRenderer {
        nInvokeFunctor(mNativeProxy, functor, waitForCompletion);
    }

    @Override
    HardwareLayer createDisplayListLayer(int width, int height) {
        long layer = nCreateDisplayListLayer(mNativeProxy, width, height);
        return HardwareLayer.adoptDisplayListLayer(this, layer);
    }

    @Override
    HardwareLayer createTextureLayer() {
        long layer = nCreateTextureLayer(mNativeProxy);
Loading