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

Commit c812a890 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Modified logBrightnessEvent to capture Lux bucket. Added a mapping from...

Merge "Modified logBrightnessEvent to capture Lux bucket. Added a mapping from lux value to corresponding bucket." into main
parents 7d05e3ad d5540bfa
Loading
Loading
Loading
Loading
+48 −1
Original line number Original line Diff line number Diff line
@@ -234,6 +234,28 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BUCKET_INDEX__RANGE_2750_3000,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__BUCKET_INDEX__RANGE_2750_3000,
    };
    };


    private static final float[] LUX_BUCKET_BOUNDARIES = {
        0f, 0.1f, 0.3f, 1f, 3f, 10f, 30f, 100f, 300f, 1000f,
        3000f, 10000f, 30000f, 100000f};

    private static final int[] LUX_RANGE_INDEX = {
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_UNKNOWN,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_0_01,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_01_03,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_03_1,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1_3,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3_10,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10_30,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30_100,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100_300,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_300_1000,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1000_3000,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3000_10000,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10000_30000,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30000_100000,
        FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100000_INF,
    };

    private final String mTag;
    private final String mTag;


    private final Object mLock = new Object();
    private final Object mLock = new Object();
@@ -2922,6 +2944,29 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        return FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__ENTIRE_REASON__REASON_UNKNOWN;
        return FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__ENTIRE_REASON__REASON_UNKNOWN;
    }
    }


    /**
     * Maps a given lux value to the corresponding bucket index.
     * The buckets are defined by LUX_BUCKET_BOUNDARIES.
     * The bucket represents the range [left, right), where 'left' is the previous
     * boundary and 'right' is the current one.
     *
     * @param lux The ambient light value in lux.
     * @return The corresponding bucket index from LUX_RANGE_INDEX.
     */
    static int mapLuxToProtoEnumBucket(float lux) {

        for (int i = 0; i < LUX_BUCKET_BOUNDARIES.length; i++) {
            if (lux < LUX_BUCKET_BOUNDARIES[i]) {
                return LUX_RANGE_INDEX[i];
            }
        }

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

    private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness,
    private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness,
            DisplayBrightnessState brightnessState) {
            DisplayBrightnessState brightnessState) {
        int modifier = event.getReason().getModifier();
        int modifier = event.getReason().getModifier();
@@ -2940,6 +2985,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        float appliedThermalCapNits =
        float appliedThermalCapNits =
                event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
                event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
                ? -1f : mDisplayBrightnessController.convertToAdjustedNits(event.getThermalMax());
                ? -1f : mDisplayBrightnessController.convertToAdjustedNits(event.getThermalMax());
        int luxBucket = mapLuxToProtoEnumBucket(event.getLux());
        if (mIsDisplayInternal) {
        if (mIsDisplayInternal) {
            FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
            FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
                    mDisplayBrightnessController
                    mDisplayBrightnessController
@@ -2968,7 +3014,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    (flags & BrightnessEvent.FLAG_DOZE_SCALE) > 0,
                    (flags & BrightnessEvent.FLAG_DOZE_SCALE) > 0,
                    (flags & BrightnessEvent.FLAG_USER_SET) > 0,
                    (flags & BrightnessEvent.FLAG_USER_SET) > 0,
                    event.getAutoBrightnessMode() == AUTO_BRIGHTNESS_MODE_IDLE,
                    event.getAutoBrightnessMode() == AUTO_BRIGHTNESS_MODE_IDLE,
                    (flags & BrightnessEvent.FLAG_LOW_POWER_MODE) > 0);
                    (flags & BrightnessEvent.FLAG_LOW_POWER_MODE) > 0,
                    luxBucket);
        }
        }
    }
    }


+110 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.display

import androidx.test.filters.SmallTest
import com.android.internal.util.FrameworkStatsLog
import com.google.common.truth.Truth.assertThat
import com.google.testing.junit.testparameterinjector.TestParameter
import com.google.testing.junit.testparameterinjector.TestParameterInjector
import org.junit.Test
import org.junit.runner.RunWith

@SmallTest
@RunWith(TestParameterInjector::class)
class DisplayPowerControllerStatsTest {

    @Test
    fun testMapLuxToProtoEnumBucket(@TestParameter testCase: LuxBucketTestCase) {
        val result = DisplayPowerController.mapLuxToProtoEnumBucket(testCase.luxValue)
        assertThat(result).isEqualTo(testCase.expectedBucket)
    }

    enum class LuxBucketTestCase(
        val luxValue: Float,
        val expectedBucket: Int
    ) {
        // [0, 0.1)
        LUX_0_0_TO_0_1_LOWER_BOUND(0.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_0_01),
        LUX_0_0_TO_0_1_MID_RANGE(0.05f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_0_01),
        LUX_0_0_TO_0_1_UPPER_BOUND(0.0999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_0_01),

        // [0.1, 0.3)
        LUX_0_1_TO_0_3_LOWER_BOUND(0.1f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_01_03),
        LUX_0_1_TO_0_3_MID_RANGE(0.2f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_01_03),
        LUX_0_1_TO_0_3_UPPER_BOUND(0.2999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_01_03),

        // [0.3, 1)
        LUX_0_3_TO_1_LOWER_BOUND(0.3f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_03_1),
        LUX_0_3_TO_1_MID_RANGE(0.5f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_03_1),
        LUX_0_3_TO_1_UPPER_BOUND(0.9999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_03_1),

        // [1, 3)
        LUX_1_TO_3_LOWER_BOUND(1.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1_3),
        LUX_1_TO_3_MID_RANGE(2.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1_3),
        LUX_1_TO_3_UPPER_BOUND(2.9999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1_3),

        // [3, 10)
        LUX_3_TO_10_LOWER_BOUND(3.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3_10),
        LUX_3_TO_10_MID_RANGE(5.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3_10),
        LUX_3_TO_10_UPPER_BOUND(9.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3_10),

        // [10, 30)
        LUX_10_TO_30_LOWER_BOUND(10.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10_30),
        LUX_10_TO_30_MID_RANGE(20.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10_30),
        LUX_10_TO_30_UPPER_BOUND(29.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10_30),

        // [30, 100)
        LUX_30_TO_100_LOWER_BOUND(30.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30_100),
        LUX_30_TO_100_MID_RANGE(50.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30_100),
        LUX_30_TO_100_UPPER_BOUND(99.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30_100),

        // [100, 300)
        LUX_100_TO_300_LOWER_BOUND(100.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100_300),
        LUX_100_TO_300_MID_RANGE(200.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100_300),
        LUX_100_TO_300_UPPER_BOUND(299.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_100_300),

        // [300, 1000)
        LUX_300_TO_1000_LOWER_BOUND(300.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_300_1000),
        LUX_300_TO_1000_MID_RANGE(500.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_300_1000),
        LUX_300_TO_1000_UPPER_BOUND(999.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_300_1000),

        // [1000, 3000)
        LUX_1000_TO_3000_LOWER_BOUND(1000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1000_3000),
        LUX_1000_TO_3000_MID_RANGE(2000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1000_3000),
        LUX_1000_TO_3000_UPPER_BOUND(2999.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_1000_3000),

        // [3000, 10000)
        LUX_3000_TO_10000_LOWER_BOUND(3000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3000_10000),
        LUX_3000_TO_10000_MID_RANGE(5000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3000_10000),
        LUX_3000_TO_10000_UPPER_BOUND(9999.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_3000_10000),

        // [10000, 30000)
        LUX_10000_TO_30000_LOWER_BOUND(10000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10000_30000),
        LUX_10000_TO_30000_MID_RANGE(20000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10000_30000),
        LUX_10000_TO_30000_UPPER_BOUND(29999.999f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_10000_30000),

        // [30000, 100000)
        LUX_30000_TO_100000_LOWER_BOUND(30000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30000_100000),
        LUX_30000_TO_100000_MID_RANGE(50000.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30000_100000),
        LUX_30000_TO_100000_UPPER_BOUND(99999.0f, FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__LUX_BUCKET__LUX_RANGE_30000_100000),

        // >= 100000
        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),
    }
}
 No newline at end of file