From 34e9262efa2dd68bd970439a727a7f86c955dd9d Mon Sep 17 00:00:00 2001 From: John Reck Date: Mon, 20 Mar 2023 16:11:14 -0400 Subject: [PATCH] Prevent hdrSdrRatio from being <1.f Bug: 273807650 Test: speculative Change-Id: I5ecc9cafa67212f7ec6bc5eb860caa3143819675 --- core/java/android/view/SurfaceControl.java | 6 ++++-- .../com/android/server/display/LocalDisplayAdapter.java | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 4895aed60a3a5..0db52aaa8b3d7 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -3896,10 +3896,12 @@ public final class SurfaceControl implements Parcelable { float currentBufferRatio, float desiredRatio) { checkPreconditions(sc); if (!Float.isFinite(currentBufferRatio) || currentBufferRatio < 1.0f) { - throw new IllegalArgumentException("currentBufferRatio must be finite && >= 1.0f"); + throw new IllegalArgumentException( + "currentBufferRatio must be finite && >= 1.0f; got " + currentBufferRatio); } if (!Float.isFinite(desiredRatio) || desiredRatio < 1.0f) { - throw new IllegalArgumentException("desiredRatio must be finite && >= 1.0f"); + throw new IllegalArgumentException( + "desiredRatio must be finite && >= 1.0f; got " + desiredRatio); } nativeSetExtendedRangeBrightness(mNativeObject, sc.mNativeObject, currentBufferRatio, desiredRatio); diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index 8d0689ff8fe50..79984c9b53557 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -911,7 +911,8 @@ final class LocalDisplayAdapter extends DisplayAdapter { final float newHdrSdrRatio; if (displayNits != DisplayDeviceConfig.NITS_INVALID && sdrNits != DisplayDeviceConfig.NITS_INVALID) { - newHdrSdrRatio = displayNits / sdrNits; + // Ensure the ratio stays >= 1.0f as values below that are nonsensical + newHdrSdrRatio = Math.max(1.f, displayNits / sdrNits); } else { newHdrSdrRatio = Float.NaN; }