Plumb HDR capabilities to Display
Bug: 25684127
Change-Id: I0a4fcdc59aa1a7b295c8df03699466685300e735
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 621efa6..e7a920b 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -722,7 +722,10 @@
* @hide
*/
public HdrCapabilities getHdrCapabilities() {
- return new HdrCapabilities();
+ synchronized (this) {
+ updateDisplayInfoLocked();
+ return mDisplayInfo.hdrCapabilities;
+ }
}
/**
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index ee76274..27fe687c 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -178,6 +178,9 @@
/** The list of supported color transforms */
public Display.ColorTransform[] supportedColorTransforms = Display.ColorTransform.EMPTY_ARRAY;
+ /** The display's HDR capabilities */
+ public Display.HdrCapabilities hdrCapabilities;
+
/**
* The logical display density which is the basis for density-independent
* pixels.
@@ -290,6 +293,7 @@
&& defaultModeId == other.defaultModeId
&& colorTransformId == other.colorTransformId
&& defaultColorTransformId == other.defaultColorTransformId
+ && Objects.equal(hdrCapabilities, other.hdrCapabilities)
&& logicalDensityDpi == other.logicalDensityDpi
&& physicalXDpi == other.physicalXDpi
&& physicalYDpi == other.physicalYDpi
@@ -332,6 +336,7 @@
defaultColorTransformId = other.defaultColorTransformId;
supportedColorTransforms = Arrays.copyOf(
other.supportedColorTransforms, other.supportedColorTransforms.length);
+ hdrCapabilities = other.hdrCapabilities;
logicalDensityDpi = other.logicalDensityDpi;
physicalXDpi = other.physicalXDpi;
physicalYDpi = other.physicalYDpi;
@@ -375,6 +380,7 @@
for (int i = 0; i < nColorTransforms; i++) {
supportedColorTransforms[i] = Display.ColorTransform.CREATOR.createFromParcel(source);
}
+ hdrCapabilities = Display.HdrCapabilities.CREATOR.createFromParcel(source);
logicalDensityDpi = source.readInt();
physicalXDpi = source.readFloat();
physicalYDpi = source.readFloat();
@@ -418,6 +424,7 @@
for (int i = 0; i < supportedColorTransforms.length; i++) {
supportedColorTransforms[i].writeToParcel(dest, flags);
}
+ hdrCapabilities.writeToParcel(dest, flags);
dest.writeInt(logicalDensityDpi);
dest.writeFloat(physicalXDpi);
dest.writeFloat(physicalYDpi);
@@ -614,6 +621,8 @@
sb.append(defaultColorTransformId);
sb.append(", supportedColorTransforms ");
sb.append(Arrays.toString(supportedColorTransforms));
+ sb.append(", hdrCapabilities ");
+ sb.append(hdrCapabilities);
sb.append(", rotation ");
sb.append(rotation);
sb.append(", density ");
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index dc9014b..7b01267 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -88,6 +88,7 @@
private static native void nativeSetOverrideScalingMode(long nativeObject,
int scalingMode);
private static native IBinder nativeGetHandle(long nativeObject);
+ private static native Display.HdrCapabilities nativeGetHdrCapabilities(IBinder displayToken);
private final CloseGuard mCloseGuard = CloseGuard.get();
@@ -656,6 +657,13 @@
nativeSetDisplaySize(displayToken, width, height);
}
+ public static Display.HdrCapabilities getHdrCapabilities(IBinder displayToken) {
+ if (displayToken == null) {
+ throw new IllegalArgumentException("displayToken must not be null");
+ }
+ return nativeGetHdrCapabilities(displayToken);
+ }
+
public static IBinder createDisplay(String name, boolean secure) {
if (name == null) {
throw new IllegalArgumentException("name must not be null");
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 5d5f856..864a0bf 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -627,7 +627,7 @@
auto typesArray = env->NewIntArray(types.size());
env->SetIntArrayRegion(typesArray, 0, types.size(), types.data());
- return env->NewObject(gHdrCapabilitiesClassInfo.clazz, gPhysicalDisplayInfoClassInfo.ctor,
+ return env->NewObject(gHdrCapabilitiesClassInfo.clazz, gHdrCapabilitiesClassInfo.ctor,
typesArray, capabilities.getDesiredMaxLuminance(),
capabilities.getDesiredMaxAverageLuminance(), capabilities.getDesiredMinLuminance());
}
@@ -693,6 +693,8 @@
(void*)nativeGetActiveConfig },
{"nativeSetActiveConfig", "(Landroid/os/IBinder;I)Z",
(void*)nativeSetActiveConfig },
+ {"nativeGetHdrCapabilities", "(Landroid/os/IBinder;)Landroid/view/Display$HdrCapabilities;",
+ (void*)nativeGetHdrCapabilities },
{"nativeClearContentFrameStats", "(J)Z",
(void*)nativeClearContentFrameStats },
{"nativeGetContentFrameStats", "(JLandroid/view/WindowContentFrameStats;)Z",