Loading core/java/android/view/SurfaceControl.java +22 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.annotation.Size; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.graphics.Bitmap; import android.graphics.BLASTBufferQueue; import android.graphics.ColorSpace; import android.graphics.GraphicBuffer; import android.graphics.Matrix; Loading Loading @@ -163,6 +162,8 @@ public final class SurfaceControl implements Parcelable { IBinder displayToken, long nativeSurfaceObject); private static native void nativeSetDisplayLayerStack(long transactionObj, IBinder displayToken, int layerStack); private static native void nativeSetDisplayFlags(long transactionObj, IBinder displayToken, int flags); private static native void nativeSetDisplayProjection(long transactionObj, IBinder displayToken, int orientation, int l, int t, int r, int b, Loading Loading @@ -545,6 +546,15 @@ public final class SurfaceControl implements Parcelable { */ private static final int SURFACE_OPAQUE = 0x02; /* flags used with setDisplayFlags() (keep in sync with DisplayDevice.h) */ /** * DisplayDevice flag: This display's transform is sent to inputflinger and used for input * dispatch. This flag is used to disambiguate displays which share a layerstack. * @hide */ public static final int DISPLAY_RECEIVES_INPUT = 0x01; // Display power modes. /** * Display power mode off: used while blanking the screen. Loading Loading @@ -3165,6 +3175,17 @@ public final class SurfaceControl implements Parcelable { return this; } /** * @hide */ public Transaction setDisplayFlags(IBinder displayToken, int flags) { if (displayToken == null) { throw new IllegalArgumentException("displayToken must not be null"); } nativeSetDisplayFlags(mNativeObject, displayToken, flags); return this; } /** * @hide */ Loading core/jni/android_view_SurfaceControl.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -1006,6 +1006,17 @@ static void nativeSetDisplayLayerStack(JNIEnv* env, jclass clazz, } } static void nativeSetDisplayFlags(JNIEnv* env, jclass clazz, jlong transactionObj, jobject tokenObj, jint flags) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return; { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); transaction->setDisplayFlags(token, flags); } } static void nativeSetDisplayProjection(JNIEnv* env, jclass clazz, jlong transactionObj, jobject tokenObj, jint orientation, Loading Loading @@ -1863,6 +1874,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetDisplaySurface }, {"nativeSetDisplayLayerStack", "(JLandroid/os/IBinder;I)V", (void*)nativeSetDisplayLayerStack }, {"nativeSetDisplayFlags", "(JLandroid/os/IBinder;I)V", (void*)nativeSetDisplayFlags }, {"nativeSetDisplayProjection", "(JLandroid/os/IBinder;IIIIIIIII)V", (void*)nativeSetDisplayProjection }, {"nativeSetDisplaySize", "(JLandroid/os/IBinder;II)V", Loading services/core/java/com/android/server/display/DisplayDevice.java +15 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ abstract class DisplayDevice { // The display device does not manage these properties itself, they are set by // the display manager service. The display device shouldn't really be looking at these. private int mCurrentLayerStack = -1; private int mCurrentFlags = 0; private int mCurrentOrientation = -1; private Rect mCurrentLayerStackRect; private Rect mCurrentDisplayRect; Loading Loading @@ -211,6 +212,19 @@ abstract class DisplayDevice { } } /** * Sets the display flags while in a transaction. * * Valid display flags: * {@link SurfaceControl#DISPLAY_RECEIVES_INPUT} */ public final void setDisplayFlagsLocked(SurfaceControl.Transaction t, int flags) { if (mCurrentFlags != flags) { mCurrentFlags = flags; t.setDisplayFlags(mDisplayToken, flags); } } /** * Sets the display projection while in a transaction. * Loading Loading @@ -298,6 +312,7 @@ abstract class DisplayDevice { pw.println("mUniqueId=" + mUniqueId); pw.println("mDisplayToken=" + mDisplayToken); pw.println("mCurrentLayerStack=" + mCurrentLayerStack); pw.println("mCurrentFlags=" + mCurrentFlags); pw.println("mCurrentOrientation=" + mCurrentOrientation); pw.println("mCurrentLayerStackRect=" + mCurrentLayerStackRect); pw.println("mCurrentDisplayRect=" + mCurrentDisplayRect); Loading services/core/java/com/android/server/display/LogicalDisplay.java +7 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.display; import static com.android.server.display.DisplayDeviceInfo.TOUCH_NONE; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -512,6 +514,11 @@ final class LogicalDisplay { boolean isBlanked) { // Set the layer stack. device.setLayerStackLocked(t, isBlanked ? BLANK_LAYER_STACK : mLayerStack); // Also inform whether the device is the same one sent to inputflinger for its layerstack. // TODO(b/188914255): Remove once input can dispatch against device vs layerstack. device.setDisplayFlagsLocked(t, device.getDisplayDeviceInfoLocked().touch != TOUCH_NONE ? SurfaceControl.DISPLAY_RECEIVES_INPUT : 0); // Set the color mode and allowed display mode. if (device == mPrimaryDisplayDevice) { Loading services/tests/wmtests/src/com/android/server/wm/StubTransaction.java +5 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,11 @@ public class StubTransaction extends SurfaceControl.Transaction { return this; } @Override public SurfaceControl.Transaction setDisplayFlags(IBinder displayToken, int flags) { return this; } @Override public SurfaceControl.Transaction setDisplayProjection(IBinder displayToken, int orientation, Rect layerStackRect, Rect displayRect) { Loading Loading
core/java/android/view/SurfaceControl.java +22 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.annotation.Size; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.graphics.Bitmap; import android.graphics.BLASTBufferQueue; import android.graphics.ColorSpace; import android.graphics.GraphicBuffer; import android.graphics.Matrix; Loading Loading @@ -163,6 +162,8 @@ public final class SurfaceControl implements Parcelable { IBinder displayToken, long nativeSurfaceObject); private static native void nativeSetDisplayLayerStack(long transactionObj, IBinder displayToken, int layerStack); private static native void nativeSetDisplayFlags(long transactionObj, IBinder displayToken, int flags); private static native void nativeSetDisplayProjection(long transactionObj, IBinder displayToken, int orientation, int l, int t, int r, int b, Loading Loading @@ -545,6 +546,15 @@ public final class SurfaceControl implements Parcelable { */ private static final int SURFACE_OPAQUE = 0x02; /* flags used with setDisplayFlags() (keep in sync with DisplayDevice.h) */ /** * DisplayDevice flag: This display's transform is sent to inputflinger and used for input * dispatch. This flag is used to disambiguate displays which share a layerstack. * @hide */ public static final int DISPLAY_RECEIVES_INPUT = 0x01; // Display power modes. /** * Display power mode off: used while blanking the screen. Loading Loading @@ -3165,6 +3175,17 @@ public final class SurfaceControl implements Parcelable { return this; } /** * @hide */ public Transaction setDisplayFlags(IBinder displayToken, int flags) { if (displayToken == null) { throw new IllegalArgumentException("displayToken must not be null"); } nativeSetDisplayFlags(mNativeObject, displayToken, flags); return this; } /** * @hide */ Loading
core/jni/android_view_SurfaceControl.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -1006,6 +1006,17 @@ static void nativeSetDisplayLayerStack(JNIEnv* env, jclass clazz, } } static void nativeSetDisplayFlags(JNIEnv* env, jclass clazz, jlong transactionObj, jobject tokenObj, jint flags) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return; { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); transaction->setDisplayFlags(token, flags); } } static void nativeSetDisplayProjection(JNIEnv* env, jclass clazz, jlong transactionObj, jobject tokenObj, jint orientation, Loading Loading @@ -1863,6 +1874,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetDisplaySurface }, {"nativeSetDisplayLayerStack", "(JLandroid/os/IBinder;I)V", (void*)nativeSetDisplayLayerStack }, {"nativeSetDisplayFlags", "(JLandroid/os/IBinder;I)V", (void*)nativeSetDisplayFlags }, {"nativeSetDisplayProjection", "(JLandroid/os/IBinder;IIIIIIIII)V", (void*)nativeSetDisplayProjection }, {"nativeSetDisplaySize", "(JLandroid/os/IBinder;II)V", Loading
services/core/java/com/android/server/display/DisplayDevice.java +15 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ abstract class DisplayDevice { // The display device does not manage these properties itself, they are set by // the display manager service. The display device shouldn't really be looking at these. private int mCurrentLayerStack = -1; private int mCurrentFlags = 0; private int mCurrentOrientation = -1; private Rect mCurrentLayerStackRect; private Rect mCurrentDisplayRect; Loading Loading @@ -211,6 +212,19 @@ abstract class DisplayDevice { } } /** * Sets the display flags while in a transaction. * * Valid display flags: * {@link SurfaceControl#DISPLAY_RECEIVES_INPUT} */ public final void setDisplayFlagsLocked(SurfaceControl.Transaction t, int flags) { if (mCurrentFlags != flags) { mCurrentFlags = flags; t.setDisplayFlags(mDisplayToken, flags); } } /** * Sets the display projection while in a transaction. * Loading Loading @@ -298,6 +312,7 @@ abstract class DisplayDevice { pw.println("mUniqueId=" + mUniqueId); pw.println("mDisplayToken=" + mDisplayToken); pw.println("mCurrentLayerStack=" + mCurrentLayerStack); pw.println("mCurrentFlags=" + mCurrentFlags); pw.println("mCurrentOrientation=" + mCurrentOrientation); pw.println("mCurrentLayerStackRect=" + mCurrentLayerStackRect); pw.println("mCurrentDisplayRect=" + mCurrentDisplayRect); Loading
services/core/java/com/android/server/display/LogicalDisplay.java +7 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.display; import static com.android.server.display.DisplayDeviceInfo.TOUCH_NONE; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -512,6 +514,11 @@ final class LogicalDisplay { boolean isBlanked) { // Set the layer stack. device.setLayerStackLocked(t, isBlanked ? BLANK_LAYER_STACK : mLayerStack); // Also inform whether the device is the same one sent to inputflinger for its layerstack. // TODO(b/188914255): Remove once input can dispatch against device vs layerstack. device.setDisplayFlagsLocked(t, device.getDisplayDeviceInfoLocked().touch != TOUCH_NONE ? SurfaceControl.DISPLAY_RECEIVES_INPUT : 0); // Set the color mode and allowed display mode. if (device == mPrimaryDisplayDevice) { Loading
services/tests/wmtests/src/com/android/server/wm/StubTransaction.java +5 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,11 @@ public class StubTransaction extends SurfaceControl.Transaction { return this; } @Override public SurfaceControl.Transaction setDisplayFlags(IBinder displayToken, int flags) { return this; } @Override public SurfaceControl.Transaction setDisplayProjection(IBinder displayToken, int orientation, Rect layerStackRect, Rect displayRect) { Loading