Loading core/java/android/view/SurfaceControl.java +18 −6 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.graphics.Region; import android.gui.BorderSettings; import android.gui.BoxShadowSettings; import android.gui.DropInputMode; import android.gui.EarlyWakeupInfo; import android.gui.StalledTransactionInfo; import android.gui.TrustedOverlay; import android.hardware.DataSpace; Loading @@ -69,6 +70,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Parcel; import android.os.Parcelable; import android.os.Trace; import android.util.ArrayMap; import android.util.Log; import android.util.Slog; Loading Loading @@ -129,8 +131,8 @@ public final class SurfaceControl implements Parcelable { long otherTransactionObj); private static native void nativeClearTransaction(long transactionObj); private static native void nativeSetAnimationTransaction(long transactionObj); private static native void nativeSetEarlyWakeupStart(long transactionObj); private static native void nativeSetEarlyWakeupEnd(long transactionObj); private static native void nativeSetEarlyWakeupStart(long transactionObj, Parcel request); private static native void nativeSetEarlyWakeupEnd(long transactionObj, Parcel request); private static native long nativeGetTransactionId(long transactionObj); private static native void nativeSetLayer(long transactionObj, long nativeObject, int zorder); Loading Loading @@ -4139,8 +4141,13 @@ public final class SurfaceControl implements Parcelable { * @hide */ @RequiresPermission(Manifest.permission.WAKEUP_SURFACE_FLINGER) public Transaction setEarlyWakeupStart() { nativeSetEarlyWakeupStart(mNativeObject); public Transaction setEarlyWakeupStart(@NonNull EarlyWakeupInfo info) { Parcel infoParcel = Parcel.obtain(); info.writeToParcel(infoParcel, 0); infoParcel.setDataPosition(0); nativeSetEarlyWakeupStart(mNativeObject, infoParcel); Trace.instantForTrack(Trace.TRACE_TAG_APP, "EarlyWakeup", "setEarlyWakeupStart: called by " + info.trace + " with " + info.token); return this; } Loading @@ -4150,8 +4157,13 @@ public final class SurfaceControl implements Parcelable { * @hide */ @RequiresPermission(Manifest.permission.WAKEUP_SURFACE_FLINGER) public Transaction setEarlyWakeupEnd() { nativeSetEarlyWakeupEnd(mNativeObject); public Transaction setEarlyWakeupEnd(@NonNull EarlyWakeupInfo info) { Parcel infoParcel = Parcel.obtain(); info.writeToParcel(infoParcel, 0); infoParcel.setDataPosition(0); nativeSetEarlyWakeupEnd(mNativeObject, infoParcel); Trace.instantForTrack(Trace.TRACE_TAG_APP, "EarlyWakeup", "setEarlyWakeupEnd: called by " + info.trace + " with " + info.token); return this; } Loading core/java/android/view/SyncRtSurfaceTransactionApplier.java +13 −7 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.view; import android.annotation.SuppressLint; import android.graphics.Matrix; import android.graphics.Rect; import android.gui.EarlyWakeupInfo; import android.view.SurfaceControl.Transaction; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -139,10 +140,10 @@ public class SyncRtSurfaceTransactionApplier { } } if ((params.flags & FLAG_EARLY_WAKEUP_START) != 0) { t.setEarlyWakeupStart(); t.setEarlyWakeupStart(params.earlyWakeupInfo); } if ((params.flags & FLAG_EARLY_WAKEUP_END) != 0) { t.setEarlyWakeupEnd(); t.setEarlyWakeupEnd(params.earlyWakeupInfo); } if ((params.flags & FLAG_OPAQUE) != 0) { t.setOpaque(params.surface, params.opaque); Loading Loading @@ -193,6 +194,7 @@ public class SyncRtSurfaceTransactionApplier { boolean visible; boolean opaque; Transaction mergeTransaction; EarlyWakeupInfo earlyWakeupInfo; /** * @param surface The surface to modify. Loading Loading @@ -297,7 +299,8 @@ public class SyncRtSurfaceTransactionApplier { * wakes up earlier to compose surfaces. * @return this Builder */ public Builder withEarlyWakeupStart() { public Builder withEarlyWakeupStart(EarlyWakeupInfo earlyWakeupInfo) { this.earlyWakeupInfo = earlyWakeupInfo; flags |= FLAG_EARLY_WAKEUP_START; return this; } Loading @@ -306,7 +309,8 @@ public class SyncRtSurfaceTransactionApplier { * Removes the early wake up hint set by earlyWakeupStart. * @return this Builder */ public Builder withEarlyWakeupEnd() { public Builder withEarlyWakeupEnd(EarlyWakeupInfo earlyWakeupInfo) { this.earlyWakeupInfo = earlyWakeupInfo; flags |= FLAG_EARLY_WAKEUP_END; return this; } Loading @@ -327,15 +331,14 @@ public class SyncRtSurfaceTransactionApplier { public SurfaceParams build() { return new SurfaceParams(surface, flags, alpha, matrix, windowCrop, layer, cornerRadius, backgroundBlurRadius, backgroundBlurScale, visible, mergeTransaction, opaque); mergeTransaction, opaque, earlyWakeupInfo); } } private SurfaceParams(SurfaceControl surface, int params, float alpha, Matrix matrix, Rect windowCrop, int layer, float cornerRadius, int backgroundBlurRadius, float backgroundBlurScale, boolean visible, Transaction mergeTransaction, boolean opaque) { Transaction mergeTransaction, boolean opaque, EarlyWakeupInfo earlyWakeupInfo) { this.flags = params; this.surface = surface; this.alpha = alpha; Loading @@ -348,6 +351,7 @@ public class SyncRtSurfaceTransactionApplier { this.visible = visible; this.mergeTransaction = mergeTransaction; this.opaque = opaque; this.earlyWakeupInfo = earlyWakeupInfo; } private final int flags; Loading Loading @@ -380,5 +384,7 @@ public class SyncRtSurfaceTransactionApplier { public final Transaction mergeTransaction; public final boolean opaque; public final EarlyWakeupInfo earlyWakeupInfo; } } core/java/android/window/SystemPerformanceHinter.java +9 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.gui.EarlyWakeupInfo; import android.os.Binder; import android.os.PerformanceHintManager; import android.os.Trace; import android.util.Log; Loading Loading @@ -166,6 +168,9 @@ public class SystemPerformanceHinter { private @Nullable PerformanceHintManager.Session mAdpfSession; private @Nullable DisplayRootProvider mDisplayRootProvider; /** Token for early wakeup requests to SurfaceFlinger. */ private final EarlyWakeupInfo mEarlyWakeupInfo = new EarlyWakeupInfo(); /** * Constructor for the hinter. * @hide Loading @@ -186,6 +191,8 @@ public class SystemPerformanceHinter { mTransaction = transactionSupplier != null ? transactionSupplier.get() : new SurfaceControl.Transaction(); mEarlyWakeupInfo.token = new Binder(); mEarlyWakeupInfo.trace = SystemPerformanceHinter.class.getName(); } /** Loading Loading @@ -265,7 +272,7 @@ public class SystemPerformanceHinter { // Global flags if (nowEnabled(oldGlobalFlags, newGlobalFlags, HINT_SF_EARLY_WAKEUP)) { mTransaction.setEarlyWakeupStart(); mTransaction.setEarlyWakeupStart(mEarlyWakeupInfo); transactionChanged = true; if (isTraceEnabled) { asyncTraceBegin(HINT_SF_EARLY_WAKEUP, Display.INVALID_DISPLAY); Loading Loading @@ -315,7 +322,7 @@ public class SystemPerformanceHinter { // Global flags if (nowDisabled(oldGlobalFlags, newGlobalFlags, HINT_SF_EARLY_WAKEUP)) { mTransaction.setEarlyWakeupEnd(); mTransaction.setEarlyWakeupEnd(mEarlyWakeupInfo); transactionChanged = true; if (isTraceEnabled) { asyncTraceEnd(HINT_SF_EARLY_WAKEUP); Loading core/jni/android_view_SurfaceControl.cpp +36 −8 Original line number Diff line number Diff line Loading @@ -579,14 +579,42 @@ static void nativeSetAnimationTransaction(JNIEnv* env, jclass clazz, jlong trans transaction->setAnimationTransaction(); } static void nativeSetEarlyWakeupStart(JNIEnv* env, jclass clazz, jlong transactionObj) { static void nativeSetEarlyWakeupStart(JNIEnv* env, jclass clazz, jlong transactionObj, jobject infoObj) { Parcel* infoParcel = parcelForJavaObject(env, infoObj); if (infoParcel == NULL) { doThrowNPE(env); return; } gui::EarlyWakeupInfo earlyWakeupInfo; status_t err = earlyWakeupInfo.readFromParcel(infoParcel); if (err != NO_ERROR) { jniThrowException(env, "java/lang/IllegalArgumentException", "EarlyWakeupInfo parcel has wrong format"); return; } auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); transaction->setEarlyWakeupStart(); transaction->setEarlyWakeupStart(earlyWakeupInfo); } static void nativeSetEarlyWakeupEnd(JNIEnv* env, jclass clazz, jlong transactionObj, jobject infoObj) { Parcel* infoParcel = parcelForJavaObject(env, infoObj); if (infoParcel == NULL) { doThrowNPE(env); return; } gui::EarlyWakeupInfo earlyWakeupInfo; status_t err = earlyWakeupInfo.readFromParcel(infoParcel); if (err != NO_ERROR) { jniThrowException(env, "java/lang/IllegalArgumentException", "EarlyWakeupInfo parcel has wrong format"); return; } static void nativeSetEarlyWakeupEnd(JNIEnv* env, jclass clazz, jlong transactionObj) { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); transaction->setEarlyWakeupEnd(); transaction->setEarlyWakeupEnd(earlyWakeupInfo); } static jlong nativeGetTransactionId(JNIEnv* env, jclass clazz, jlong transactionObj) { Loading Loading @@ -2571,9 +2599,9 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeMergeTransaction }, {"nativeSetAnimationTransaction", "(J)V", (void*)nativeSetAnimationTransaction }, {"nativeSetEarlyWakeupStart", "(J)V", {"nativeSetEarlyWakeupStart", "(JLandroid/os/Parcel;)V", (void*)nativeSetEarlyWakeupStart }, {"nativeSetEarlyWakeupEnd", "(J)V", {"nativeSetEarlyWakeupEnd", "(JLandroid/os/Parcel;)V", (void*)nativeSetEarlyWakeupEnd }, {"nativeGetTransactionId", "(J)J", (void*)nativeGetTransactionId }, Loading core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java +14 −13 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import android.gui.EarlyWakeupInfo; import android.os.PerformanceHintManager; import android.platform.test.annotations.Presubmit; import android.view.SurfaceControl; Loading Loading @@ -190,7 +191,7 @@ public class SystemPerformanceHinterTests { assertEquals(0, mRootProvider.getCount); // Verify we call SF verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); } Loading @@ -202,7 +203,7 @@ public class SystemPerformanceHinterTests { session.close(); // Verify we call SF verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); } Loading Loading @@ -249,7 +250,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); } Loading @@ -270,7 +271,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading @@ -291,7 +292,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading @@ -310,7 +311,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); reset(mTransaction); Loading @@ -321,7 +322,7 @@ public class SystemPerformanceHinterTests { // 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(), anyBoolean()); verify(mTransaction, never()).setEarlyWakeupEnd(); verify(mTransaction, never()).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction, never()).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); Loading @@ -329,7 +330,7 @@ public class SystemPerformanceHinterTests { // Verify we have not cleaned up because session1 is still running verify(mTransaction, never()).setFrameRateSelectionStrategy(any(), anyInt()); verify(mTransaction, never()).setFrameRateCategory(any(), anyInt(), anyBoolean()); verify(mTransaction, never()).setEarlyWakeupEnd(); verify(mTransaction, never()).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction, never()).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); Loading @@ -342,7 +343,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading @@ -361,7 +362,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); reset(mTransaction); Loading @@ -377,7 +378,7 @@ public class SystemPerformanceHinterTests { eq(mSecondaryDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction, never()).setEarlyWakeupStart(); verify(mTransaction, never()).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); reset(mTransaction); Loading @@ -400,7 +401,7 @@ public class SystemPerformanceHinterTests { eq(mSecondaryDisplayRoot), anyInt(), eq(false)); verify(mTransaction, never()).setEarlyWakeupEnd(); verify(mTransaction, never()).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); reset(mTransaction); Loading @@ -418,7 +419,7 @@ public class SystemPerformanceHinterTests { eq(mSecondaryDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading Loading
core/java/android/view/SurfaceControl.java +18 −6 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.graphics.Region; import android.gui.BorderSettings; import android.gui.BoxShadowSettings; import android.gui.DropInputMode; import android.gui.EarlyWakeupInfo; import android.gui.StalledTransactionInfo; import android.gui.TrustedOverlay; import android.hardware.DataSpace; Loading @@ -69,6 +70,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Parcel; import android.os.Parcelable; import android.os.Trace; import android.util.ArrayMap; import android.util.Log; import android.util.Slog; Loading Loading @@ -129,8 +131,8 @@ public final class SurfaceControl implements Parcelable { long otherTransactionObj); private static native void nativeClearTransaction(long transactionObj); private static native void nativeSetAnimationTransaction(long transactionObj); private static native void nativeSetEarlyWakeupStart(long transactionObj); private static native void nativeSetEarlyWakeupEnd(long transactionObj); private static native void nativeSetEarlyWakeupStart(long transactionObj, Parcel request); private static native void nativeSetEarlyWakeupEnd(long transactionObj, Parcel request); private static native long nativeGetTransactionId(long transactionObj); private static native void nativeSetLayer(long transactionObj, long nativeObject, int zorder); Loading Loading @@ -4139,8 +4141,13 @@ public final class SurfaceControl implements Parcelable { * @hide */ @RequiresPermission(Manifest.permission.WAKEUP_SURFACE_FLINGER) public Transaction setEarlyWakeupStart() { nativeSetEarlyWakeupStart(mNativeObject); public Transaction setEarlyWakeupStart(@NonNull EarlyWakeupInfo info) { Parcel infoParcel = Parcel.obtain(); info.writeToParcel(infoParcel, 0); infoParcel.setDataPosition(0); nativeSetEarlyWakeupStart(mNativeObject, infoParcel); Trace.instantForTrack(Trace.TRACE_TAG_APP, "EarlyWakeup", "setEarlyWakeupStart: called by " + info.trace + " with " + info.token); return this; } Loading @@ -4150,8 +4157,13 @@ public final class SurfaceControl implements Parcelable { * @hide */ @RequiresPermission(Manifest.permission.WAKEUP_SURFACE_FLINGER) public Transaction setEarlyWakeupEnd() { nativeSetEarlyWakeupEnd(mNativeObject); public Transaction setEarlyWakeupEnd(@NonNull EarlyWakeupInfo info) { Parcel infoParcel = Parcel.obtain(); info.writeToParcel(infoParcel, 0); infoParcel.setDataPosition(0); nativeSetEarlyWakeupEnd(mNativeObject, infoParcel); Trace.instantForTrack(Trace.TRACE_TAG_APP, "EarlyWakeup", "setEarlyWakeupEnd: called by " + info.trace + " with " + info.token); return this; } Loading
core/java/android/view/SyncRtSurfaceTransactionApplier.java +13 −7 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.view; import android.annotation.SuppressLint; import android.graphics.Matrix; import android.graphics.Rect; import android.gui.EarlyWakeupInfo; import android.view.SurfaceControl.Transaction; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -139,10 +140,10 @@ public class SyncRtSurfaceTransactionApplier { } } if ((params.flags & FLAG_EARLY_WAKEUP_START) != 0) { t.setEarlyWakeupStart(); t.setEarlyWakeupStart(params.earlyWakeupInfo); } if ((params.flags & FLAG_EARLY_WAKEUP_END) != 0) { t.setEarlyWakeupEnd(); t.setEarlyWakeupEnd(params.earlyWakeupInfo); } if ((params.flags & FLAG_OPAQUE) != 0) { t.setOpaque(params.surface, params.opaque); Loading Loading @@ -193,6 +194,7 @@ public class SyncRtSurfaceTransactionApplier { boolean visible; boolean opaque; Transaction mergeTransaction; EarlyWakeupInfo earlyWakeupInfo; /** * @param surface The surface to modify. Loading Loading @@ -297,7 +299,8 @@ public class SyncRtSurfaceTransactionApplier { * wakes up earlier to compose surfaces. * @return this Builder */ public Builder withEarlyWakeupStart() { public Builder withEarlyWakeupStart(EarlyWakeupInfo earlyWakeupInfo) { this.earlyWakeupInfo = earlyWakeupInfo; flags |= FLAG_EARLY_WAKEUP_START; return this; } Loading @@ -306,7 +309,8 @@ public class SyncRtSurfaceTransactionApplier { * Removes the early wake up hint set by earlyWakeupStart. * @return this Builder */ public Builder withEarlyWakeupEnd() { public Builder withEarlyWakeupEnd(EarlyWakeupInfo earlyWakeupInfo) { this.earlyWakeupInfo = earlyWakeupInfo; flags |= FLAG_EARLY_WAKEUP_END; return this; } Loading @@ -327,15 +331,14 @@ public class SyncRtSurfaceTransactionApplier { public SurfaceParams build() { return new SurfaceParams(surface, flags, alpha, matrix, windowCrop, layer, cornerRadius, backgroundBlurRadius, backgroundBlurScale, visible, mergeTransaction, opaque); mergeTransaction, opaque, earlyWakeupInfo); } } private SurfaceParams(SurfaceControl surface, int params, float alpha, Matrix matrix, Rect windowCrop, int layer, float cornerRadius, int backgroundBlurRadius, float backgroundBlurScale, boolean visible, Transaction mergeTransaction, boolean opaque) { Transaction mergeTransaction, boolean opaque, EarlyWakeupInfo earlyWakeupInfo) { this.flags = params; this.surface = surface; this.alpha = alpha; Loading @@ -348,6 +351,7 @@ public class SyncRtSurfaceTransactionApplier { this.visible = visible; this.mergeTransaction = mergeTransaction; this.opaque = opaque; this.earlyWakeupInfo = earlyWakeupInfo; } private final int flags; Loading Loading @@ -380,5 +384,7 @@ public class SyncRtSurfaceTransactionApplier { public final Transaction mergeTransaction; public final boolean opaque; public final EarlyWakeupInfo earlyWakeupInfo; } }
core/java/android/window/SystemPerformanceHinter.java +9 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.gui.EarlyWakeupInfo; import android.os.Binder; import android.os.PerformanceHintManager; import android.os.Trace; import android.util.Log; Loading Loading @@ -166,6 +168,9 @@ public class SystemPerformanceHinter { private @Nullable PerformanceHintManager.Session mAdpfSession; private @Nullable DisplayRootProvider mDisplayRootProvider; /** Token for early wakeup requests to SurfaceFlinger. */ private final EarlyWakeupInfo mEarlyWakeupInfo = new EarlyWakeupInfo(); /** * Constructor for the hinter. * @hide Loading @@ -186,6 +191,8 @@ public class SystemPerformanceHinter { mTransaction = transactionSupplier != null ? transactionSupplier.get() : new SurfaceControl.Transaction(); mEarlyWakeupInfo.token = new Binder(); mEarlyWakeupInfo.trace = SystemPerformanceHinter.class.getName(); } /** Loading Loading @@ -265,7 +272,7 @@ public class SystemPerformanceHinter { // Global flags if (nowEnabled(oldGlobalFlags, newGlobalFlags, HINT_SF_EARLY_WAKEUP)) { mTransaction.setEarlyWakeupStart(); mTransaction.setEarlyWakeupStart(mEarlyWakeupInfo); transactionChanged = true; if (isTraceEnabled) { asyncTraceBegin(HINT_SF_EARLY_WAKEUP, Display.INVALID_DISPLAY); Loading Loading @@ -315,7 +322,7 @@ public class SystemPerformanceHinter { // Global flags if (nowDisabled(oldGlobalFlags, newGlobalFlags, HINT_SF_EARLY_WAKEUP)) { mTransaction.setEarlyWakeupEnd(); mTransaction.setEarlyWakeupEnd(mEarlyWakeupInfo); transactionChanged = true; if (isTraceEnabled) { asyncTraceEnd(HINT_SF_EARLY_WAKEUP); Loading
core/jni/android_view_SurfaceControl.cpp +36 −8 Original line number Diff line number Diff line Loading @@ -579,14 +579,42 @@ static void nativeSetAnimationTransaction(JNIEnv* env, jclass clazz, jlong trans transaction->setAnimationTransaction(); } static void nativeSetEarlyWakeupStart(JNIEnv* env, jclass clazz, jlong transactionObj) { static void nativeSetEarlyWakeupStart(JNIEnv* env, jclass clazz, jlong transactionObj, jobject infoObj) { Parcel* infoParcel = parcelForJavaObject(env, infoObj); if (infoParcel == NULL) { doThrowNPE(env); return; } gui::EarlyWakeupInfo earlyWakeupInfo; status_t err = earlyWakeupInfo.readFromParcel(infoParcel); if (err != NO_ERROR) { jniThrowException(env, "java/lang/IllegalArgumentException", "EarlyWakeupInfo parcel has wrong format"); return; } auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); transaction->setEarlyWakeupStart(); transaction->setEarlyWakeupStart(earlyWakeupInfo); } static void nativeSetEarlyWakeupEnd(JNIEnv* env, jclass clazz, jlong transactionObj, jobject infoObj) { Parcel* infoParcel = parcelForJavaObject(env, infoObj); if (infoParcel == NULL) { doThrowNPE(env); return; } gui::EarlyWakeupInfo earlyWakeupInfo; status_t err = earlyWakeupInfo.readFromParcel(infoParcel); if (err != NO_ERROR) { jniThrowException(env, "java/lang/IllegalArgumentException", "EarlyWakeupInfo parcel has wrong format"); return; } static void nativeSetEarlyWakeupEnd(JNIEnv* env, jclass clazz, jlong transactionObj) { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); transaction->setEarlyWakeupEnd(); transaction->setEarlyWakeupEnd(earlyWakeupInfo); } static jlong nativeGetTransactionId(JNIEnv* env, jclass clazz, jlong transactionObj) { Loading Loading @@ -2571,9 +2599,9 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeMergeTransaction }, {"nativeSetAnimationTransaction", "(J)V", (void*)nativeSetAnimationTransaction }, {"nativeSetEarlyWakeupStart", "(J)V", {"nativeSetEarlyWakeupStart", "(JLandroid/os/Parcel;)V", (void*)nativeSetEarlyWakeupStart }, {"nativeSetEarlyWakeupEnd", "(J)V", {"nativeSetEarlyWakeupEnd", "(JLandroid/os/Parcel;)V", (void*)nativeSetEarlyWakeupEnd }, {"nativeGetTransactionId", "(J)J", (void*)nativeGetTransactionId }, Loading
core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java +14 −13 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import android.gui.EarlyWakeupInfo; import android.os.PerformanceHintManager; import android.platform.test.annotations.Presubmit; import android.view.SurfaceControl; Loading Loading @@ -190,7 +191,7 @@ public class SystemPerformanceHinterTests { assertEquals(0, mRootProvider.getCount); // Verify we call SF verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); } Loading @@ -202,7 +203,7 @@ public class SystemPerformanceHinterTests { session.close(); // Verify we call SF verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); } Loading Loading @@ -249,7 +250,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); } Loading @@ -270,7 +271,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading @@ -291,7 +292,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading @@ -310,7 +311,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); reset(mTransaction); Loading @@ -321,7 +322,7 @@ public class SystemPerformanceHinterTests { // 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(), anyBoolean()); verify(mTransaction, never()).setEarlyWakeupEnd(); verify(mTransaction, never()).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction, never()).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); Loading @@ -329,7 +330,7 @@ public class SystemPerformanceHinterTests { // Verify we have not cleaned up because session1 is still running verify(mTransaction, never()).setFrameRateSelectionStrategy(any(), anyInt()); verify(mTransaction, never()).setFrameRateCategory(any(), anyInt(), anyBoolean()); verify(mTransaction, never()).setEarlyWakeupEnd(); verify(mTransaction, never()).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction, never()).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); Loading @@ -342,7 +343,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading @@ -361,7 +362,7 @@ public class SystemPerformanceHinterTests { eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction).setEarlyWakeupStart(); verify(mTransaction).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); reset(mTransaction); Loading @@ -377,7 +378,7 @@ public class SystemPerformanceHinterTests { eq(mSecondaryDisplayRoot), eq(FRAME_RATE_CATEGORY_HIGH), eq(false)); verify(mTransaction, never()).setEarlyWakeupStart(); verify(mTransaction, never()).setEarlyWakeupStart(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); reset(mTransaction); Loading @@ -400,7 +401,7 @@ public class SystemPerformanceHinterTests { eq(mSecondaryDisplayRoot), anyInt(), eq(false)); verify(mTransaction, never()).setEarlyWakeupEnd(); verify(mTransaction, never()).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); reset(mTransaction); Loading @@ -418,7 +419,7 @@ public class SystemPerformanceHinterTests { eq(mSecondaryDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), eq(false)); verify(mTransaction).setEarlyWakeupEnd(); verify(mTransaction).setEarlyWakeupEnd(any(EarlyWakeupInfo.class)); verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } Loading