summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alan Ding <alanding@google.com> 2024-05-11 02:50:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-05-11 02:50:43 +0000
commitd5b17c2db74a5e0283c549e406d787376a2598e8 (patch)
tree810188ecef1feed5b54e46cbfdbf517e86d49957
parent83d510126109c65ba60b1310feca80cb0573c4f2 (diff)
parent788462918638f9741c7db881f85cd96e094d9c16 (diff)
Merge "DM: Propagate uniqueID when creating virtual displays" into main
-rw-r--r--services/core/java/com/android/server/display/DisplayControl.java15
-rw-r--r--services/core/java/com/android/server/display/VirtualDisplayAdapter.java15
-rw-r--r--services/core/jni/com_android_server_display_DisplayControl.cpp8
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java2
4 files changed, 23 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/display/DisplayControl.java b/services/core/java/com/android/server/display/DisplayControl.java
index 22f3bbd80a77..fa8299bd45fd 100644
--- a/services/core/java/com/android/server/display/DisplayControl.java
+++ b/services/core/java/com/android/server/display/DisplayControl.java
@@ -29,7 +29,7 @@ import java.util.Objects;
*/
public class DisplayControl {
private static native IBinder nativeCreateDisplay(String name, boolean secure,
- float requestedRefreshRate);
+ String uniqueId, float requestedRefreshRate);
private static native void nativeDestroyDisplay(IBinder displayToken);
private static native void nativeOverrideHdrTypes(IBinder displayToken, int[] modes);
private static native long[] nativeGetPhysicalDisplayIds();
@@ -43,20 +43,21 @@ public class DisplayControl {
/**
* Create a display in SurfaceFlinger.
*
- * @param name The name of the display
+ * @param name The name of the display.
* @param secure Whether this display is secure.
* @return The token reference for the display in SurfaceFlinger.
*/
public static IBinder createDisplay(String name, boolean secure) {
Objects.requireNonNull(name, "name must not be null");
- return nativeCreateDisplay(name, secure, 0.0f);
+ return nativeCreateDisplay(name, secure, "", 0.0f);
}
/**
* Create a display in SurfaceFlinger.
*
- * @param name The name of the display
+ * @param name The name of the display.
* @param secure Whether this display is secure.
+ * @param uniqueId The unique ID for the display.
* @param requestedRefreshRate The requested refresh rate in frames per second.
* For best results, specify a divisor of the physical refresh rate, e.g., 30 or 60 on
* 120hz display. If an arbitrary refresh rate is specified, the rate will be rounded
@@ -65,9 +66,10 @@ public class DisplayControl {
* @return The token reference for the display in SurfaceFlinger.
*/
public static IBinder createDisplay(String name, boolean secure,
- float requestedRefreshRate) {
+ String uniqueId, float requestedRefreshRate) {
Objects.requireNonNull(name, "name must not be null");
- return nativeCreateDisplay(name, secure, requestedRefreshRate);
+ Objects.requireNonNull(uniqueId, "uniqueId must not be null");
+ return nativeCreateDisplay(name, secure, uniqueId, requestedRefreshRate);
}
/**
@@ -79,7 +81,6 @@ public class DisplayControl {
if (displayToken == null) {
throw new IllegalArgumentException("displayToken must not be null");
}
-
nativeDestroyDisplay(displayToken);
}
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index bcdb442c3ad3..a29e8523952d 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -92,8 +92,9 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
Context context, Handler handler, Listener listener, DisplayManagerFlags featureFlags) {
this(syncRoot, context, handler, listener, new SurfaceControlDisplayFactory() {
@Override
- public IBinder createDisplay(String name, boolean secure, float requestedRefreshRate) {
- return DisplayControl.createDisplay(name, secure, requestedRefreshRate);
+ public IBinder createDisplay(String name, boolean secure, String uniqueId,
+ float requestedRefreshRate) {
+ return DisplayControl.createDisplay(name, secure, uniqueId, requestedRefreshRate);
}
@Override
@@ -126,7 +127,7 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
String name = virtualDisplayConfig.getName();
boolean secure = (flags & VIRTUAL_DISPLAY_FLAG_SECURE) != 0;
- IBinder displayToken = mSurfaceControlDisplayFactory.createDisplay(name, secure,
+ IBinder displayToken = mSurfaceControlDisplayFactory.createDisplay(name, secure, uniqueId,
virtualDisplayConfig.getRequestedRefreshRate());
MediaProjectionCallback mediaProjectionCallback = null;
if (projection != null) {
@@ -653,8 +654,9 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
/**
* Create a virtual display in SurfaceFlinger.
*
- * @param name The name of the display
+ * @param name The name of the display.
* @param secure Whether this display is secure.
+ * @param uniqueId The unique ID for the display.
* @param requestedRefreshRate
* The refresh rate, frames per second, to request on the virtual display.
* It should be a divisor of refresh rate of the leader physical display
@@ -663,8 +665,9 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
* the refresh rate of the leader physical display.
* @return The token reference for the display in SurfaceFlinger.
*/
- IBinder createDisplay(String name, boolean secure, float requestedRefreshRate);
-
+ IBinder createDisplay(String name, boolean secure, String uniqueId,
+ float requestedRefreshRate);
+
/**
* Destroy a display in SurfaceFlinger.
*
diff --git a/services/core/jni/com_android_server_display_DisplayControl.cpp b/services/core/jni/com_android_server_display_DisplayControl.cpp
index e65b9030195a..22c0f730ad7d 100644
--- a/services/core/jni/com_android_server_display_DisplayControl.cpp
+++ b/services/core/jni/com_android_server_display_DisplayControl.cpp
@@ -24,9 +24,11 @@
namespace android {
static jobject nativeCreateDisplay(JNIEnv* env, jclass clazz, jstring nameObj, jboolean secure,
- jfloat requestedRefreshRate) {
- ScopedUtfChars name(env, nameObj);
+ jstring uniqueIdStr, jfloat requestedRefreshRate) {
+ const ScopedUtfChars name(env, nameObj);
+ const ScopedUtfChars uniqueId(env, uniqueIdStr);
sp<IBinder> token(SurfaceComposerClient::createDisplay(String8(name.c_str()), bool(secure),
+ std::string(uniqueId.c_str()),
requestedRefreshRate));
return javaObjectForIBinder(env, token);
}
@@ -178,7 +180,7 @@ static jobject nativeGetPhysicalDisplayToken(JNIEnv* env, jclass clazz, jlong ph
static const JNINativeMethod sDisplayMethods[] = {
// clang-format off
- {"nativeCreateDisplay", "(Ljava/lang/String;ZF)Landroid/os/IBinder;",
+ {"nativeCreateDisplay", "(Ljava/lang/String;ZLjava/lang/String;F)Landroid/os/IBinder;",
(void*)nativeCreateDisplay },
{"nativeDestroyDisplay", "(Landroid/os/IBinder;)V",
(void*)nativeDestroyDisplay },
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
index 1666fef13685..54b2d4dd1429 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
@@ -282,7 +282,7 @@ public class DisplayManagerServiceTest {
return new VirtualDisplayAdapter(syncRoot, context, handler, displayAdapterListener,
new VirtualDisplayAdapter.SurfaceControlDisplayFactory() {
@Override
- public IBinder createDisplay(String name, boolean secure,
+ public IBinder createDisplay(String name, boolean secure, String uniqueId,
float requestedRefreshRate) {
return mMockDisplayToken;
}