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

Commit 25fbb3fa authored by John Reck's avatar John Reck
Browse files

Move LayerType to RenderNode

Change-Id: Icb79a5015cb0362b1f3a66d09007450730135a97
parent a447d29c
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