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

Commit 854e442c authored by Devina Naraindas Sainani's avatar Devina Naraindas Sainani Committed by Android (Google) Code Review
Browse files

Merge "Display: Capture brightness adjustment events" into main

parents 05d00f83 080d2276
Loading
Loading
Loading
Loading
+43 −4
Original line number Diff line number Diff line
@@ -2957,6 +2957,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
     * @return The corresponding bucket index from LUX_RANGE_INDEX.
     */
    static int mapLuxToProtoEnumBucket(float lux) {
        if (lux < 0) {
            if (DEBUG) {
                Slog.d(TAG, "Invalid lux value: " + lux + ". Returning LUX_RANGE_UNKNOWN.");
            }
            return FrameworkStatsLog
                .DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_UNKNOWN;
        }

        for (int i = 0; i < LUX_BUCKET_BOUNDARIES.length; i++) {
            if (lux < LUX_BUCKET_BOUNDARIES[i]) {
@@ -2965,11 +2972,37 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }

        // If the lux value is greater than or equal to the last boundary, it falls into
        // the last bucket: [100000, +inf).
        // the last bucket: [100000, inf).
        return FrameworkStatsLog
            .DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100000_INF;
    }

    /**
     * Determines the direction of a brightness adjustment for logging purposes,
     *
     * @param currentBrightnessInNits The brightness level in nits *after* the adjustment.
     * @param lastReportedBrightnessInNits The brightness level in nits *before* this adjustment.
     * @return An enum value indicating if the brightness was increased, decreased, or unknown.
     */
    static int getBrightnessAdjustmentDirection(
            float currentBrightnessInNits,
            float lastReportedBrightnessInNits) {

        // Determine increase or decrease
        if (currentBrightnessInNits > lastReportedBrightnessInNits) {
            return FrameworkStatsLog
                    .DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_INCREASE;
        } else if (currentBrightnessInNits < lastReportedBrightnessInNits) {
            return FrameworkStatsLog
                    .DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_DECREASE;
        } else {
            // No significant change. Brightness adjusted in the middle of the range, but the value
            // didn't change for unknown reason (e.g. hardware limit, slight unintended movement).
            return FrameworkStatsLog
                    .DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_UNKNOWN;
        }
    }

    private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness,
            DisplayBrightnessState brightnessState) {
        int modifier = event.getReason().getModifier();
@@ -2979,6 +3012,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        boolean brightnessIsMax = unmodifiedBrightness == event.getHbmMax();
        float brightnessInNits =
                mDisplayBrightnessController.convertToAdjustedNits(event.getBrightness());
        float initialBrightnessInNits =
                mDisplayBrightnessController.convertToAdjustedNits(event.getInitialBrightness());
        float appliedLowPowerMode = event.isLowPowerModeSet() ? event.getPowerFactor() : -1f;
        int appliedRbcStrength  = event.isRbcEnabled() ? event.getRbcStrength() : -1;
        float appliedHbmMaxNits =
@@ -2989,10 +3024,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
                ? -1f : mDisplayBrightnessController.convertToAdjustedNits(event.getThermalMax());
        int luxBucket = mapLuxToProtoEnumBucket(event.getLux());
        int brightnessAdjustmentDirection = getBrightnessAdjustmentDirection(
                brightnessInNits,
                initialBrightnessInNits
                );
        if (mIsDisplayInternal) {
            FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
                    mDisplayBrightnessController
                            .convertToAdjustedNits(event.getInitialBrightness()),
                    initialBrightnessInNits,
                    brightnessInNits,
                    event.getLux(),
                    event.getPhysicalDisplayId(),
@@ -3018,7 +3056,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    (flags & BrightnessEvent.FLAG_USER_SET) > 0,
                    event.getAutoBrightnessMode() == AUTO_BRIGHTNESS_MODE_IDLE,
                    (flags & BrightnessEvent.FLAG_LOW_POWER_MODE) > 0,
                    luxBucket);
                    luxBucket,
                    brightnessAdjustmentDirection);
        }
    }

+78 −1
Original line number Diff line number Diff line
@@ -34,6 +34,15 @@ class DisplayPowerControllerStatsTest {
        assertThat(result).isEqualTo(testCase.expectedBucket)
    }

    @Test
    fun testGetBrightnessDirection(@TestParameter testCase: BrightnessDirectionTestCase) {
        val result = DisplayPowerController.getBrightnessAdjustmentDirection(
            testCase.currentBrightnessInNits,
            testCase.lastReportedBrightnessInNits,
        )
        assertThat(result).isEqualTo(testCase.expectedDirection)
    }

    enum class LuxBucketTestCase(
        val luxValue: Float,
        val expectedBucket: Int
@@ -107,4 +116,72 @@ class DisplayPowerControllerStatsTest {
        LUX_100000_TO_INF_LOWER_BOUND(100000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100000_INF),
        LUX_100000_TO_INF_HIGH_VALUE(1000000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100000_INF),
    }

    enum class BrightnessDirectionTestCase(
        val currentBrightnessInNits: Float,
        val lastReportedBrightnessInNits: Float,
        val expectedDirection: Int
    ) {
        // --- Cases for DIRECTION_UNKNOWN ---
        // No change
        NO_CHANGE_EXACT(
            currentBrightnessInNits = 50f,
            lastReportedBrightnessInNits = 50f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_UNKNOWN
        ),

        // --- Cases for DIRECTION_INCREASE ---
        INCREASE_NORMAL(
            currentBrightnessInNits = 120f,
            lastReportedBrightnessInNits = 100f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_INCREASE
        ),
        INCREASE_VERY_SMALL_INCREMENT(
            currentBrightnessInNits = 50.0001f,
            lastReportedBrightnessInNits = 50.0000f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_INCREASE
        ),
        INCREASE_SMALL_INCREMENT(
            currentBrightnessInNits = 100.1f,
            lastReportedBrightnessInNits = 100.0f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_INCREASE
        ),
        INCREASE_FROM_MIN(
            currentBrightnessInNits = 0.5f,
            lastReportedBrightnessInNits = 0.0f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_INCREASE
        ),
        INCREASE_VERY_LARGE(
            currentBrightnessInNits = 5000f,
            lastReportedBrightnessInNits = 100f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_INCREASE
        ),

        // --- Cases for DIRECTION_DECREASE ---
        DECREASE_NORMAL(
            currentBrightnessInNits = 80f,
            lastReportedBrightnessInNits = 100f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_DECREASE
        ),
        DECREASE_VERY_SMALL_DECREMENT(
            currentBrightnessInNits = 50.0000f,
            lastReportedBrightnessInNits = 50.0001f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_DECREASE
        ),
        DECREASE_SMALL_DECREMENT(
            currentBrightnessInNits = 99.9f,
            lastReportedBrightnessInNits = 100.0f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_DECREASE
        ),
        DECREASE_TO_MIN(
            currentBrightnessInNits = 0.0f,
            lastReportedBrightnessInNits = 0.5f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_DECREASE
        ),
        DECREASE_VERY_LARGE(
            currentBrightnessInNits = 50f,
            lastReportedBrightnessInNits = 1000f,
            expectedDirection = FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BRIGHTNESS_DIRECTION__DIRECTION_DECREASE
        ),
    }
}