Merge "Inform SurfaceFlinger about displays which receive input" into sc-v2-dev am: d4fcf3ac04
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14669172 Change-Id: Ie21a5a6dfb9ff66ee9eb349f166d1fcccd87dcbe
This commit is contained in:
@@ -34,7 +34,6 @@ import android.annotation.Size;
|
|||||||
import android.annotation.TestApi;
|
import android.annotation.TestApi;
|
||||||
import android.compat.annotation.UnsupportedAppUsage;
|
import android.compat.annotation.UnsupportedAppUsage;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BLASTBufferQueue;
|
|
||||||
import android.graphics.ColorSpace;
|
import android.graphics.ColorSpace;
|
||||||
import android.graphics.GraphicBuffer;
|
import android.graphics.GraphicBuffer;
|
||||||
import android.graphics.Matrix;
|
import android.graphics.Matrix;
|
||||||
@@ -163,6 +162,8 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
IBinder displayToken, long nativeSurfaceObject);
|
IBinder displayToken, long nativeSurfaceObject);
|
||||||
private static native void nativeSetDisplayLayerStack(long transactionObj,
|
private static native void nativeSetDisplayLayerStack(long transactionObj,
|
||||||
IBinder displayToken, int layerStack);
|
IBinder displayToken, int layerStack);
|
||||||
|
private static native void nativeSetDisplayFlags(long transactionObj,
|
||||||
|
IBinder displayToken, int flags);
|
||||||
private static native void nativeSetDisplayProjection(long transactionObj,
|
private static native void nativeSetDisplayProjection(long transactionObj,
|
||||||
IBinder displayToken, int orientation,
|
IBinder displayToken, int orientation,
|
||||||
int l, int t, int r, int b,
|
int l, int t, int r, int b,
|
||||||
@@ -545,6 +546,15 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
private static final int SURFACE_OPAQUE = 0x02;
|
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 modes.
|
||||||
/**
|
/**
|
||||||
* Display power mode off: used while blanking the screen.
|
* Display power mode off: used while blanking the screen.
|
||||||
@@ -3165,6 +3175,17 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
return this;
|
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
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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,
|
static void nativeSetDisplayProjection(JNIEnv* env, jclass clazz,
|
||||||
jlong transactionObj,
|
jlong transactionObj,
|
||||||
jobject tokenObj, jint orientation,
|
jobject tokenObj, jint orientation,
|
||||||
@@ -1863,6 +1874,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
|
|||||||
(void*)nativeSetDisplaySurface },
|
(void*)nativeSetDisplaySurface },
|
||||||
{"nativeSetDisplayLayerStack", "(JLandroid/os/IBinder;I)V",
|
{"nativeSetDisplayLayerStack", "(JLandroid/os/IBinder;I)V",
|
||||||
(void*)nativeSetDisplayLayerStack },
|
(void*)nativeSetDisplayLayerStack },
|
||||||
|
{"nativeSetDisplayFlags", "(JLandroid/os/IBinder;I)V",
|
||||||
|
(void*)nativeSetDisplayFlags },
|
||||||
{"nativeSetDisplayProjection", "(JLandroid/os/IBinder;IIIIIIIII)V",
|
{"nativeSetDisplayProjection", "(JLandroid/os/IBinder;IIIIIIIII)V",
|
||||||
(void*)nativeSetDisplayProjection },
|
(void*)nativeSetDisplayProjection },
|
||||||
{"nativeSetDisplaySize", "(JLandroid/os/IBinder;II)V",
|
{"nativeSetDisplaySize", "(JLandroid/os/IBinder;II)V",
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ abstract class DisplayDevice {
|
|||||||
// The display device does not manage these properties itself, they are set by
|
// 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.
|
// the display manager service. The display device shouldn't really be looking at these.
|
||||||
private int mCurrentLayerStack = -1;
|
private int mCurrentLayerStack = -1;
|
||||||
|
private int mCurrentFlags = 0;
|
||||||
private int mCurrentOrientation = -1;
|
private int mCurrentOrientation = -1;
|
||||||
private Rect mCurrentLayerStackRect;
|
private Rect mCurrentLayerStackRect;
|
||||||
private Rect mCurrentDisplayRect;
|
private Rect mCurrentDisplayRect;
|
||||||
@@ -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.
|
* Sets the display projection while in a transaction.
|
||||||
*
|
*
|
||||||
@@ -298,6 +312,7 @@ abstract class DisplayDevice {
|
|||||||
pw.println("mUniqueId=" + mUniqueId);
|
pw.println("mUniqueId=" + mUniqueId);
|
||||||
pw.println("mDisplayToken=" + mDisplayToken);
|
pw.println("mDisplayToken=" + mDisplayToken);
|
||||||
pw.println("mCurrentLayerStack=" + mCurrentLayerStack);
|
pw.println("mCurrentLayerStack=" + mCurrentLayerStack);
|
||||||
|
pw.println("mCurrentFlags=" + mCurrentFlags);
|
||||||
pw.println("mCurrentOrientation=" + mCurrentOrientation);
|
pw.println("mCurrentOrientation=" + mCurrentOrientation);
|
||||||
pw.println("mCurrentLayerStackRect=" + mCurrentLayerStackRect);
|
pw.println("mCurrentLayerStackRect=" + mCurrentLayerStackRect);
|
||||||
pw.println("mCurrentDisplayRect=" + mCurrentDisplayRect);
|
pw.println("mCurrentDisplayRect=" + mCurrentDisplayRect);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.server.display;
|
package com.android.server.display;
|
||||||
|
|
||||||
|
import static com.android.server.display.DisplayDeviceInfo.TOUCH_NONE;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
@@ -512,6 +514,11 @@ final class LogicalDisplay {
|
|||||||
boolean isBlanked) {
|
boolean isBlanked) {
|
||||||
// Set the layer stack.
|
// Set the layer stack.
|
||||||
device.setLayerStackLocked(t, isBlanked ? BLANK_LAYER_STACK : mLayerStack);
|
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.
|
// Set the color mode and allowed display mode.
|
||||||
if (device == mPrimaryDisplayDevice) {
|
if (device == mPrimaryDisplayDevice) {
|
||||||
|
|||||||
@@ -177,6 +177,11 @@ public class StubTransaction extends SurfaceControl.Transaction {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SurfaceControl.Transaction setDisplayFlags(IBinder displayToken, int flags) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SurfaceControl.Transaction setDisplayProjection(IBinder displayToken,
|
public SurfaceControl.Transaction setDisplayProjection(IBinder displayToken,
|
||||||
int orientation, Rect layerStackRect, Rect displayRect) {
|
int orientation, Rect layerStackRect, Rect displayRect) {
|
||||||
|
|||||||
Reference in New Issue
Block a user