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

Commit 1c2bfd52 authored by Surbhi Kadam's avatar Surbhi Kadam Committed by Android (Google) Code Review
Browse files

Merge "SurfaceControl: Add ignoreCornerRadius and ignoreShadows APIs to SurfaceControl" into main

parents f0f65221 c042e5b0
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
@@ -160,6 +160,10 @@ public final class SurfaceControl implements Parcelable {
            float l, float t, float r, float b);
    private static native void nativeSetCornerRadius(long transactionObj, long nativeObject,
            float cornerRadius);
    private static native void nativeSetClientDrawnCornerRadius(long transactionObj,
            long nativeObject, float clientDrawnCornerRadius);
    private static native void nativeSetClientDrawnShadows(long transactionObj,
            long nativeObject, float clientDrawnShadows);
    private static native void nativeSetBackgroundBlurRadius(long transactionObj, long nativeObject,
            int blurRadius);
    private static native void nativeSetLayerStack(long transactionObj, long nativeObject,
@@ -3654,6 +3658,66 @@ public final class SurfaceControl implements Parcelable {
            return this;
        }


        /**
         * Disables corner radius of a {@link SurfaceControl}. When the radius set by
         * {@link Transaction#setCornerRadius(SurfaceControl, float)} is equal to
         * clientDrawnCornerRadius the corner radius drawn by SurfaceFlinger is disabled.
         *
         * @param sc SurfaceControl
         * @param clientDrawnCornerRadius Corner radius drawn by the client
         * @return Itself.
         * @hide
         */
        @NonNull
        public Transaction setClientDrawnCornerRadius(@NonNull SurfaceControl sc,
                                                            float clientDrawnCornerRadius) {
            checkPreconditions(sc);
            if (SurfaceControlRegistry.sCallStackDebuggingEnabled) {
                SurfaceControlRegistry.getProcessInstance().checkCallStackDebugging(
                        "setClientDrawnCornerRadius", this, sc, "clientDrawnCornerRadius="
                        + clientDrawnCornerRadius);
            }
            if (Flags.ignoreCornerRadiusAndShadows()) {
                nativeSetClientDrawnCornerRadius(mNativeObject, sc.mNativeObject,
                                                                clientDrawnCornerRadius);
            } else {
                Log.w(TAG, "setClientDrawnCornerRadius was called but"
                            + "ignore_corner_radius_and_shadows flag is disabled");
            }

            return this;
        }

        /**
         * Disables shadows of a {@link SurfaceControl}. When the radius set by
         * {@link Transaction#setClientDrawnShadows(SurfaceControl, float)} is equal to
         * clientDrawnShadowRadius the shadows drawn by SurfaceFlinger is disabled.
         *
         * @param sc SurfaceControl
         * @param clientDrawnShadowRadius Shadow radius drawn by the client
         * @return Itself.
         * @hide
         */
        @NonNull
        public Transaction setClientDrawnShadows(@NonNull SurfaceControl sc,
                                                        float clientDrawnShadowRadius) {
            checkPreconditions(sc);
            if (SurfaceControlRegistry.sCallStackDebuggingEnabled) {
                SurfaceControlRegistry.getProcessInstance().checkCallStackDebugging(
                        "setClientDrawnShadows", this, sc,
                        "clientDrawnShadowRadius=" + clientDrawnShadowRadius);
            }
            if (Flags.ignoreCornerRadiusAndShadows()) {
                nativeSetClientDrawnShadows(mNativeObject, sc.mNativeObject,
                                                        clientDrawnShadowRadius);
            } else {
                Log.w(TAG, "setClientDrawnShadows was called but"
                            + "ignore_corner_radius_and_shadows flag is disabled");
            }
            return this;
        }

        /**
         * Sets the background blur radius of the {@link SurfaceControl}.
         *
+8 −0
Original line number Diff line number Diff line
@@ -90,6 +90,14 @@ flag {
    bug: "308662081"
}

flag {
  name: "ignore_corner_radius_and_shadows"
  namespace: "window_surfaces"
  description: "Ignore the corner radius and shadows of a SurfaceControl"
  bug: "375624570"
  is_fixed_read_only: true
} # ignore_corner_radius_and_shadows

flag {
    name: "jank_api"
    namespace: "window_surfaces"
+20 −0
Original line number Diff line number Diff line
@@ -1113,6 +1113,22 @@ static void nativeSetCornerRadius(JNIEnv* env, jclass clazz, jlong transactionOb
    transaction->setCornerRadius(ctrl, cornerRadius);
}

static void nativeSetClientDrawnCornerRadius(JNIEnv* env, jclass clazz, jlong transactionObj,
                                             jlong nativeObject, jfloat clientDrawnCornerRadius) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);

    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
    transaction->setClientDrawnCornerRadius(ctrl, clientDrawnCornerRadius);
}

static void nativeSetClientDrawnShadows(JNIEnv* env, jclass clazz, jlong transactionObj,
                                        jlong nativeObject, jfloat clientDrawnShadowRadius) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);

    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
    transaction->setClientDrawnShadowRadius(ctrl, clientDrawnShadowRadius);
}

static void nativeSetBackgroundBlurRadius(JNIEnv* env, jclass clazz, jlong transactionObj,
         jlong nativeObject, jint blurRadius) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
@@ -2547,6 +2563,10 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetCrop },
    {"nativeSetCornerRadius", "(JJF)V",
            (void*)nativeSetCornerRadius },
    {"nativeSetClientDrawnCornerRadius", "(JJF)V",
            (void*) nativeSetClientDrawnCornerRadius },
    {"nativeSetClientDrawnShadows", "(JJF)V",
            (void*) nativeSetClientDrawnShadows },
    {"nativeSetBackgroundBlurRadius", "(JJI)V",
            (void*)nativeSetBackgroundBlurRadius },
    {"nativeSetLayerStack", "(JJI)V",