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

Commit e439c27f authored by Vishnu Nair's avatar Vishnu Nair Committed by Android (Google) Code Review
Browse files

Merge changes Ib82af697,If9141213 into main

* changes:
  Specify max framerate when hinting surfaceflinger
  Add oneway Transaction#apply
parents 408e0893 49ccf2c7
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -123,7 +123,8 @@ public final class SurfaceControl implements Parcelable {
    private static native long nativeMirrorSurface(long mirrorOfObject);
    private static native long nativeCreateTransaction();
    private static native long nativeGetNativeTransactionFinalizer();
    private static native void nativeApplyTransaction(long transactionObj, boolean sync);
    private static native void nativeApplyTransaction(long transactionObj, boolean sync,
            boolean oneWay);
    private static native void nativeMergeTransaction(long transactionObj,
            long otherTransactionObj);
    private static native void nativeClearTransaction(long transactionObj);
@@ -2785,9 +2786,21 @@ public final class SurfaceControl implements Parcelable {
         * as a new transaction.
         */
        public void apply() {
            apply(false);
            apply(/*sync*/ false);
        }

        /**
         * Applies the transaction as a one way binder call. This transaction will be applied out
         * of order with other transactions that are applied synchronously. This method is not
         * safe. It should only be used when the order does not matter.
         *
         * @hide
         */
        public void applyAsyncUnsafe() {
            apply(/*sync*/ false, /*oneWay*/ true);
        }


        /**
         * Clear the transaction object, without applying it.
         *
@@ -2817,9 +2830,13 @@ public final class SurfaceControl implements Parcelable {
         * @hide
         */
        public void apply(boolean sync) {
            apply(sync, /*oneWay*/ false);
        }

        private void apply(boolean sync, boolean oneWay) {
            applyResizedSurfaces();
            notifyReparentedSurfaces();
            nativeApplyTransaction(mNativeObject, sync);
            nativeApplyTransaction(mNativeObject, sync, oneWay);
        }

        /**
@@ -4373,7 +4390,7 @@ public final class SurfaceControl implements Parcelable {
        void applyGlobalTransaction(boolean sync) {
            applyResizedSurfaces();
            notifyReparentedSurfaces();
            nativeApplyTransaction(mNativeObject, sync);
            nativeApplyTransaction(mNativeObject, sync, /*oneWay*/ false);
        }

        @Override
+14 −10
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.window;

import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.Surface.FRAME_RATE_CATEGORY_DEFAULT;
import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH;
import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN;
import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF;

@@ -29,8 +31,6 @@ import android.os.Trace;
import android.util.Log;
import android.view.SurfaceControl;

import com.android.internal.annotations.VisibleForTesting;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Random;
@@ -148,7 +148,6 @@ public class SystemPerformanceHinter {
     * Constructor for the hinter.
     * @hide
     */
    @VisibleForTesting
    public SystemPerformanceHinter(@NonNull Context context,
            @Nullable DisplayRootProvider displayRootProvider,
            @Nullable Supplier<SurfaceControl.Transaction> transactionSupplier) {
@@ -208,11 +207,14 @@ public class SystemPerformanceHinter {
        boolean transactionChanged = false;
        // Per-display flags
        if (nowEnabled(oldPerDisplayFlags, newPerDisplayFlags, HINT_SF_FRAME_RATE)) {
            mTransaction.setFrameRateSelectionStrategy(
                    mDisplayRootProvider.getRootForDisplay(session.displayId),
            SurfaceControl displaySurfaceControl = mDisplayRootProvider.getRootForDisplay(
                    session.displayId);
            mTransaction.setFrameRateSelectionStrategy(displaySurfaceControl,
                    FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN);
            mTransaction.setFrameRateCategory(displaySurfaceControl, FRAME_RATE_CATEGORY_HIGH);
            transactionChanged = true;
            Trace.beginAsyncSection("PerfHint-framerate-" + session.reason, session.traceCookie);
            Trace.beginAsyncSection("PerfHint-framerate-" + session.displayId + "-"
                    + session.reason, session.traceCookie);
        }

        // Global flags
@@ -226,7 +228,7 @@ public class SystemPerformanceHinter {
            Trace.beginAsyncSection("PerfHint-adpf-" + session.reason, session.traceCookie);
        }
        if (transactionChanged) {
            mTransaction.apply();
            mTransaction.applyAsyncUnsafe();
        }
    }

@@ -245,9 +247,11 @@ public class SystemPerformanceHinter {
        boolean transactionChanged = false;
        // Per-display flags
        if (nowDisabled(oldPerDisplayFlags, newPerDisplayFlags, HINT_SF_FRAME_RATE)) {
            mTransaction.setFrameRateSelectionStrategy(
                    mDisplayRootProvider.getRootForDisplay(session.displayId),
            SurfaceControl displaySurfaceControl = mDisplayRootProvider.getRootForDisplay(
                    session.displayId);
            mTransaction.setFrameRateSelectionStrategy(displaySurfaceControl,
                    FRAME_RATE_SELECTION_STRATEGY_SELF);
            mTransaction.setFrameRateCategory(displaySurfaceControl, FRAME_RATE_CATEGORY_DEFAULT);
            transactionChanged = true;
            Trace.endAsyncSection("PerfHint-framerate-" + session.reason, session.traceCookie);
        }
@@ -263,7 +267,7 @@ public class SystemPerformanceHinter {
            Trace.endAsyncSection("PerfHint-adpf-" + session.reason, session.traceCookie);
        }
        if (transactionChanged) {
            mTransaction.apply();
            mTransaction.applyAsyncUnsafe();
        }
    }

+4 −3
Original line number Diff line number Diff line
@@ -469,9 +469,10 @@ static void nativeSetDefaultBufferSize(JNIEnv* env, jclass clazz, jlong nativeOb
    }
}

static void nativeApplyTransaction(JNIEnv* env, jclass clazz, jlong transactionObj, jboolean sync) {
static void nativeApplyTransaction(JNIEnv* env, jclass clazz, jlong transactionObj, jboolean sync,
                                   jboolean oneWay) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
    transaction->apply(sync);
    transaction->apply(sync, oneWay);
}

static void nativeMergeTransaction(JNIEnv* env, jclass clazz,
@@ -2119,7 +2120,7 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetDefaultBufferSize},
    {"nativeCreateTransaction", "()J",
            (void*)nativeCreateTransaction },
    {"nativeApplyTransaction", "(JZ)V",
    {"nativeApplyTransaction", "(JZZ)V",
            (void*)nativeApplyTransaction },
    {"nativeGetNativeTransactionFinalizer", "()J",
            (void*)nativeGetNativeTransactionFinalizer },
+55 −15
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.window;

import static android.os.PerformanceHintManager.Session.CPU_LOAD_RESET;
import static android.os.PerformanceHintManager.Session.CPU_LOAD_UP;
import static android.view.Surface.FRAME_RATE_CATEGORY_DEFAULT;
import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH;
import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN;
import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF;
import static android.window.SystemPerformanceHinter.HINT_ADPF;
@@ -150,7 +152,10 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN));
        verify(mTransaction).apply();
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_HIGH));
        verify(mTransaction).applyAsyncUnsafe();
    }

    @Test
@@ -164,7 +169,10 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_SELF));
        verify(mTransaction).apply();
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_DEFAULT));
        verify(mTransaction).applyAsyncUnsafe();
    }

    @Test
@@ -177,7 +185,7 @@ public class SystemPerformanceHinterTests {

        // Verify we call SF
        verify(mTransaction).setEarlyWakeupStart();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
    }

    @Test
@@ -189,7 +197,7 @@ public class SystemPerformanceHinterTests {

        // Verify we call SF
        verify(mTransaction).setEarlyWakeupEnd();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
    }

    @Test
@@ -231,8 +239,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN));
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_HIGH));
        verify(mTransaction).setEarlyWakeupStart();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP));
    }

@@ -248,8 +259,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_SELF));
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_DEFAULT));
        verify(mTransaction).setEarlyWakeupEnd();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET));
    }

@@ -265,8 +279,11 @@ public class SystemPerformanceHinterTests {
            verify(mTransaction).setFrameRateSelectionStrategy(
                    eq(mDefaultDisplayRoot),
                    eq(FRAME_RATE_SELECTION_STRATEGY_SELF));
            verify(mTransaction).setFrameRateCategory(
                    eq(mDefaultDisplayRoot),
                    eq(FRAME_RATE_CATEGORY_DEFAULT));
            verify(mTransaction).setEarlyWakeupEnd();
            verify(mTransaction).apply();
            verify(mTransaction).applyAsyncUnsafe();
            verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET));
        }
    }
@@ -280,8 +297,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN));
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_HIGH));
        verify(mTransaction).setEarlyWakeupStart();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP));
        reset(mTransaction);
        reset(mAdpfSession);
@@ -290,15 +310,17 @@ public class SystemPerformanceHinterTests {
                mHinter.startSession(HINT_ALL, DEFAULT_DISPLAY_ID, TEST_OTHER_REASON);
        // Verify we never call SF and perf manager since session1 is already running
        verify(mTransaction, never()).setFrameRateSelectionStrategy(any(), anyInt());
        verify(mTransaction, never()).setFrameRateCategory(any(), anyInt());
        verify(mTransaction, never()).setEarlyWakeupEnd();
        verify(mTransaction, never()).apply();
        verify(mTransaction, never()).applyAsyncUnsafe();
        verify(mAdpfSession, never()).sendHint(anyInt());

        session2.close();
        // Verify we have not cleaned up because session1 is still running
        verify(mTransaction, never()).setFrameRateSelectionStrategy(any(), anyInt());
        verify(mTransaction, never()).setFrameRateCategory(any(), anyInt());
        verify(mTransaction, never()).setEarlyWakeupEnd();
        verify(mTransaction, never()).apply();
        verify(mTransaction, never()).applyAsyncUnsafe();
        verify(mAdpfSession, never()).sendHint(anyInt());

        session1.close();
@@ -306,8 +328,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_SELF));
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_DEFAULT));
        verify(mTransaction).setEarlyWakeupEnd();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET));
    }

@@ -321,8 +346,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN));
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_HIGH));
        verify(mTransaction).setEarlyWakeupStart();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP));
        reset(mTransaction);
        reset(mAdpfSession);
@@ -333,8 +361,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mSecondaryDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN));
        verify(mTransaction).setFrameRateCategory(
                eq(mSecondaryDisplayRoot),
                eq(FRAME_RATE_CATEGORY_HIGH));
        verify(mTransaction, never()).setEarlyWakeupStart();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession, never()).sendHint(anyInt());
        reset(mTransaction);
        reset(mAdpfSession);
@@ -345,11 +376,17 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_SELF));
        verify(mTransaction).setFrameRateCategory(
                eq(mDefaultDisplayRoot),
                eq(FRAME_RATE_CATEGORY_DEFAULT));
        verify(mTransaction, never()).setFrameRateSelectionStrategy(
                eq(mSecondaryDisplayRoot),
                anyInt());
        verify(mTransaction, never()).setFrameRateCategory(
                eq(mSecondaryDisplayRoot),
                anyInt());
        verify(mTransaction, never()).setEarlyWakeupEnd();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession, never()).sendHint(anyInt());
        reset(mTransaction);
        reset(mAdpfSession);
@@ -362,8 +399,11 @@ public class SystemPerformanceHinterTests {
        verify(mTransaction).setFrameRateSelectionStrategy(
                eq(mSecondaryDisplayRoot),
                eq(FRAME_RATE_SELECTION_STRATEGY_SELF));
        verify(mTransaction).setFrameRateCategory(
                eq(mSecondaryDisplayRoot),
                eq(FRAME_RATE_CATEGORY_DEFAULT));
        verify(mTransaction).setEarlyWakeupEnd();
        verify(mTransaction).apply();
        verify(mTransaction).applyAsyncUnsafe();
        verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET));
    }