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

Commit 8bc319f6 authored by Anton Ivanov's avatar Anton Ivanov
Browse files

JNI glue for addTransactionBarrier().

Bug: 356936695
Test: unit
Flag: EXEMPT not used yet.
Change-Id: I26556442635be0b9a27c55b72da001cda27aa92e
parent 0be57dd5
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import android.gui.BoxShadowSettings;
import android.gui.DropInputMode;
import android.gui.EarlyWakeupInfo;
import android.gui.StalledTransactionInfo;
import android.gui.TransactionBarrier;
import android.gui.TrustedOverlay;
import android.hardware.DataSpace;
import android.hardware.DisplayLuts;
@@ -267,6 +268,7 @@ public final class SurfaceControl implements Parcelable {
            Parcel data);
    private static native void nativeAddWindowInfosReportedListener(long transactionObj,
            Runnable listener);
    private static native void nativeAddTransactionBarrier(long transactionObj, Parcel barrier);
    private static native boolean nativeGetDisplayBrightnessSupport(IBinder displayToken);
    private static native boolean nativeSetDisplayBrightness(IBinder displayToken,
            float sdrBrightness, float sdrBrightnessNits, float displayBrightness,
@@ -3596,6 +3598,22 @@ public final class SurfaceControl implements Parcelable {
            return this;
        }

        /**
         * Adds a transaction barrier.
         *
         * @param barrier Transaction Barrier.
         *
         * @hide
         */
        @NonNull
        public Transaction addTransactionBarrier(@NonNull TransactionBarrier barrier) {
            Parcel barrierParcel = Parcel.obtain();
            barrier.writeToParcel(barrierParcel, 0);
            barrierParcel.setDataPosition(0);
            nativeAddTransactionBarrier(mNativeObject, barrierParcel);
            return this;
        }

        /**
         * Specify how the buffer associated with this Surface is mapped in to the
         * parent coordinate space. The source frame will be scaled to fit the destination
+24 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <android/gui/BnWindowInfosReportedListener.h>
#include <android/gui/EdgeExtensionParameters.h>
#include <android/gui/JankData.h>
#include <android/gui/TransactionBarrier.h>
#include <android/hardware/display/IDeviceProductInfoConstants.h>
#include <android/os/IInputConstants.h>
#include <android_runtime/AndroidRuntime.h>
@@ -61,6 +62,7 @@
#include <ui/StaticDisplayInfo.h>
#include <utils/LightRefBase.h>
#include <utils/Log.h>
#include <utils/String16.h>

#include <memory>

@@ -1046,6 +1048,26 @@ static void nativeSetInputWindowInfo(JNIEnv* env, jclass clazz, jlong transactio
    transaction->setInputWindowInfo(ctrl, std::move(info));
}

static void nativeAddTransactionBarrier(JNIEnv* env, jclass clazz, jlong transactionObj,
                                        jobject barrierObj) {
    Parcel* barrierParcel = parcelForJavaObject(env, barrierObj);
    if (barrierParcel == NULL) {
        doThrowNPE(env);
        return;
    }
    gui::TransactionBarrier barrier;
    status_t err = barrier.readFromParcel(barrierParcel);
    if (err != NO_ERROR) {
        jniThrowException(env, "java/lang/IllegalArgumentException",
                          "TransactionBarrier parcel has wrong format");
        return;
    }

    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);

    transaction->addTransactionBarrier(std::move(barrier));
}

static void nativeAddWindowInfosReportedListener(JNIEnv* env, jclass clazz, jlong transactionObj,
                                                 jobject runnable) {
    auto listener = sp<WindowInfosReportedListenerWrapper>::make(env, runnable);
@@ -2776,6 +2798,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetDesiredHdrHeadroom },
    {"nativeSetCachingHint", "(JJI)V",
            (void*)nativeSetCachingHint },
    {"nativeAddTransactionBarrier", "(JLandroid/os/Parcel;)V",
            (void*)nativeAddTransactionBarrier },
    {"nativeAddWindowInfosReportedListener", "(JLjava/lang/Runnable;)V",
            (void*)nativeAddWindowInfosReportedListener },
    {"nativeGetDisplayBrightnessSupport", "(Landroid/os/IBinder;)Z",