Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 238513aa authored by Long Ling's avatar Long Ling
Browse files

HBM_ON_HDR stats requires HBM enabled for HDR playback

Report FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR
event when HBM is enabled for HDR playback.

Bug: 202869195
Test: atest HighBrightnessModeControllerTest
Change-Id: I19680e0d144dea46bcd57f26e88261059f3b0fa5
parent 94f47074
Loading
Loading
Loading
Loading
+22 −2
Original line number Original line Diff line number Diff line
@@ -91,6 +91,7 @@ class HighBrightnessModeController {
    private int mHeight;
    private int mHeight;
    private float mAmbientLux;
    private float mAmbientLux;
    private int mDisplayStatsId;
    private int mDisplayStatsId;
    private int mHbmStatsState = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF;


    /**
    /**
     * If HBM is currently running, this is the start time for the current HBM session.
     * If HBM is currently running, this is the start time for the current HBM session.
@@ -278,6 +279,7 @@ class HighBrightnessModeController {
        pw.println("  mHbmMode=" + BrightnessInfo.hbmToString(mHbmMode)
        pw.println("  mHbmMode=" + BrightnessInfo.hbmToString(mHbmMode)
                + (mHbmMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR
                + (mHbmMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR
                ? "(" + getHdrBrightnessValue() + ")" : ""));
                ? "(" + getHdrBrightnessValue() + ")" : ""));
        pw.println("  mHbmStatsState=" + hbmStatsStateToString(mHbmStatsState));
        pw.println("  mHbmData=" + mHbmData);
        pw.println("  mHbmData=" + mHbmData);
        pw.println("  mAmbientLux=" + mAmbientLux
        pw.println("  mAmbientLux=" + mAmbientLux
                + (mIsAutoBrightnessEnabled ? "" : " (old/invalid)"));
                + (mIsAutoBrightnessEnabled ? "" : " (old/invalid)"));
@@ -444,8 +446,8 @@ class HighBrightnessModeController {


    private void updateHbmMode() {
    private void updateHbmMode() {
        int newHbmMode = calculateHighBrightnessMode();
        int newHbmMode = calculateHighBrightnessMode();
        if (mHbmMode != newHbmMode) {
        updateHbmStats(mHbmMode, newHbmMode);
        updateHbmStats(mHbmMode, newHbmMode);
        if (mHbmMode != newHbmMode) {
            mHbmMode = newHbmMode;
            mHbmMode = newHbmMode;
            mHbmChangeCallback.run();
            mHbmChangeCallback.run();
        }
        }
@@ -453,11 +455,16 @@ class HighBrightnessModeController {


    private void updateHbmStats(int mode, int newMode) {
    private void updateHbmStats(int mode, int newMode) {
        int state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF;
        int state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF;
        if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR) {
        if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR
                && getHdrBrightnessValue() > mHbmData.transitionPoint) {
            state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR;
            state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR;
        } else if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT) {
        } else if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT) {
            state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT;
            state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT;
        }
        }
        if (state == mHbmStatsState) {
            return;
        }
        mHbmStatsState = state;


        int reason =
        int reason =
                FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_TRANSITION_REASON_UNKNOWN;
                FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_TRANSITION_REASON_UNKNOWN;
@@ -491,6 +498,19 @@ class HighBrightnessModeController {
        mInjector.reportHbmStateChange(mDisplayStatsId, state, reason);
        mInjector.reportHbmStateChange(mDisplayStatsId, state, reason);
    }
    }


    private String hbmStatsStateToString(int hbmStatsState) {
        switch (hbmStatsState) {
        case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF:
            return "HBM_OFF";
        case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR:
            return "HBM_ON_HDR";
        case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT:
            return "HBM_ON_SUNLIGHT";
        default:
            return String.valueOf(hbmStatsState);
        }
    }

    private int calculateHighBrightnessMode() {
    private int calculateHighBrightnessMode() {
        if (!deviceSupportsHbm()) {
        if (!deviceSupportsHbm()) {
            return BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF;
            return BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF;
+20 −0
Original line number Original line Diff line number Diff line
@@ -28,7 +28,9 @@ import static com.android.server.display.AutomaticBrightnessController
import static com.android.server.display.HighBrightnessModeController.HBM_TRANSITION_POINT_INVALID;
import static com.android.server.display.HighBrightnessModeController.HBM_TRANSITION_POINT_INVALID;


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;
@@ -503,6 +505,24 @@ public class HighBrightnessModeControllerTest {
            eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_SV_OFF_LUX_DROP));
            eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_SV_OFF_LUX_DROP));
    }
    }


    @Test
    public void tetHbmStats_NbmHdrNoReport() {
        final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock());
        final int displayStatsId = mDisplayUniqueId.hashCode();

        hbmc.setAutoBrightnessEnabled(AUTO_BRIGHTNESS_ENABLED);
        hbmc.onBrightnessChanged(DEFAULT_MIN);
        hbmc.getHdrListener().onHdrInfoChanged(null /*displayToken*/, 1 /*numberOfHdrLayers*/,
                DISPLAY_WIDTH, DISPLAY_HEIGHT, 0 /*flags*/);
        advanceTime(0);
        assertEquals(HIGH_BRIGHTNESS_MODE_HDR, hbmc.getHighBrightnessMode());

        // Verify Stats HBM_ON_HDR not report
        verify(mInjectorMock, never()).reportHbmStateChange(eq(displayStatsId),
            eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR),
            anyInt());
    }

    @Test
    @Test
    public void testHbmStats_ThermalOff() throws Exception {
    public void testHbmStats_ThermalOff() throws Exception {
        final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock());
        final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock());