Fix the issue of using SilkFx crash on non-HDR-supported phone.

- ideally on non-HDR-supported phone, `Display#isHdrSdrRatioAvailable`
  should be false, while it's not the case in such phone now. The reason
  is hdrSdrRatio always gets updated. We should reject such update if
  there is no SdrHdrRatioMap loaded.

Bug: 280804824
Test: play with SilkFX; LocalDisplayAdapterTest
Change-Id: If162fc15cae033d056f22d02625ad955006dd65a
This commit is contained in:
Sally Qi
2023-05-23 13:14:41 -07:00
parent c6eeba236f
commit dbbae482ba
3 changed files with 12 additions and 1 deletions

View File

@@ -888,6 +888,13 @@ public class DisplayDeviceConfig {
return mBacklightToNitsSpline.interpolate(backlight);
}
/**
* @return true if there is sdrHdrRatioMap, false otherwise.
*/
public boolean hasSdrToHdrRatioSpline() {
return mSdrToHdrRatioSpline != null;
}
/**
* Calculate the HDR brightness for the specified SDR brightenss, restricted by the
* maxDesiredHdrSdrRatio (the ratio between the HDR luminance and SDR luminance)

View File

@@ -888,7 +888,9 @@ final class LocalDisplayAdapter extends DisplayAdapter {
BrightnessSynchronizer.brightnessFloatToInt(
sdrBrightnessState));
handleHdrSdrNitsChanged(nits, sdrNits);
if (getDisplayDeviceConfig().hasSdrToHdrRatioSpline()) {
handleHdrSdrNitsChanged(nits, sdrNits);
}
} finally {
Trace.traceEnd(Trace.TRACE_TAG_POWER);

View File

@@ -27,6 +27,7 @@ import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
@@ -981,6 +982,7 @@ public class LocalDisplayAdapterTest {
DisplayDevice displayDevice = mListener.addedDisplays.get(0);
// Turn on / initialize
assumeTrue(displayDevice.getDisplayDeviceConfig().hasSdrToHdrRatioSpline());
Runnable changeStateRunnable = displayDevice.requestDisplayStateLocked(Display.STATE_ON, 0,
0);
changeStateRunnable.run();