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

Commit 020e5c49 authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Android (Google) Code Review
Browse files

Merge "Improving AmbientFilter usage in tests" into main

parents b5bf456d 71761eae
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -2334,7 +2334,7 @@ public class DisplayModeDirector {

                if (lightSensor != null && lightSensor != mLightSensor) {
                    final Resources res = mContext.getResources();
                    mAmbientFilter = AmbientFilterFactory.createBrightnessFilter(TAG, res);
                    mAmbientFilter = mInjector.getAmbientFilter(res);
                    mLightSensor = lightSensor;
                }
            } else {
@@ -3158,6 +3158,8 @@ public class DisplayModeDirector {

        @Nullable
        VotesStatsReporter getVotesStatsReporter();

        AmbientFilter getAmbientFilter(Resources res);
    }

    @VisibleForTesting
@@ -3302,6 +3304,11 @@ public class DisplayModeDirector {
            return new VotesStatsReporter(supportsFrameRateOverride());
        }

        @Override
        public AmbientFilter getAmbientFilter(Resources res) {
            return AmbientFilterFactory.createBrightnessFilter(TAG, res);
        }

        private DisplayManager getDisplayManager() {
            if (mDisplayManager == null) {
                mDisplayManager = mContext.getSystemService(DisplayManager.class);
+7 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static android.hardware.display.DisplayManager.DeviceConfig.KEY_REFRESH_R

import static com.android.server.display.TestUtilsKt.createSensor;
import static com.android.server.display.TestUtilsKt.createSensorEvent;
import static com.android.server.display.utils.TestUtilsKt.createLastValueAmbientFilter;

import static com.google.common.truth.Truth.assertThat;

@@ -98,6 +99,7 @@ import com.android.server.display.config.RefreshRateData;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.mode.DisplayModeDirector.BrightnessObserver;
import com.android.server.display.mode.DisplayModeDirector.DesiredDisplayModeSpecs;
import com.android.server.display.utils.AmbientFilter;
import com.android.server.sensors.SensorManagerInternal;
import com.android.server.sensors.SensorManagerInternal.ProximityActiveListener;
import com.android.server.statusbar.StatusBarManagerInternal;
@@ -1587,7 +1589,6 @@ public class DisplayModeDirectorTest {
                        any(Handler.class));
        SensorEventListener sensorListener = listenerCaptor.getValue();
        sensorListener.onSensorChanged(createSensorEvent(lightSensor, 8));
        waitForIdleSync();
        assertEquals(null, director.getBrightnessObserver().getIdleScreenRefreshRateConfig());

        // Configure DDC with idle screen timeout
@@ -1601,19 +1602,16 @@ public class DisplayModeDirectorTest {

        // Sensor reads 5 lux
        sensorListener.onSensorChanged(createSensorEvent(lightSensor, 5));
        waitForIdleSync();
        assertEquals(new SurfaceControl.IdleScreenRefreshRateConfig(-1),
                director.getBrightnessObserver().getIdleScreenRefreshRateConfig());

        // Sensor reads 50 lux
        sensorListener.onSensorChanged(createSensorEvent(lightSensor, 50));
        waitForIdleSync();
        assertEquals(new IdleScreenRefreshRateConfig(1000),
                director.getBrightnessObserver().getIdleScreenRefreshRateConfig());

        // Sensor reads 200 lux
        sensorListener.onSensorChanged(createSensorEvent(lightSensor, 200));
        waitForIdleSync();
        assertEquals(new SurfaceControl.IdleScreenRefreshRateConfig(800),
                director.getBrightnessObserver().getIdleScreenRefreshRateConfig());
    }
@@ -3992,6 +3990,11 @@ public class DisplayModeDirectorTest {
            return null;
        }

        @Override
        public AmbientFilter getAmbientFilter(Resources res) {
            return createLastValueAmbientFilter();
        }

        protected Display createDisplay(int id) {
            return new Display(DisplayManagerGlobal.getInstance(), id, mDisplayInfo,
                    ApplicationProvider.getApplicationContext().getResources());
+12 −11
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 * Copyright (C) 2025 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.
@@ -14,14 +14,15 @@
 * limitations under the License.
 */

package com.android.server.display.utils;
package com.android.server.display.utils

public class AmbientFilterStubber extends AmbientFilter {
    public AmbientFilterStubber() {
        super(null, 1);
fun createLastValueAmbientFilter(): AmbientFilter =
    object : AmbientFilter("LastValueAmbientFilter", 1) {
        override fun filter(time: Long, buffer: RollingBuffer): Float {
            return if (buffer.isEmpty) {
                -1f
            } else {
                buffer.getValue(buffer.size() - 1)
            }

    protected float filter(long time, RollingBuffer buffer) {
        return 0f;
        }
    }
 No newline at end of file
+20 −24
Original line number Diff line number Diff line
@@ -17,10 +17,10 @@
package com.android.server.display.whitebalance;

import static com.android.server.display.TestUtilsKt.createSensor;
import static com.android.server.display.utils.TestUtilsKt.createLastValueAmbientFilter;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
@@ -43,7 +43,6 @@ import com.android.internal.R;
import com.android.internal.util.test.LocalServiceKeeperRule;
import com.android.server.display.color.ColorDisplayService;
import com.android.server.display.utils.AmbientFilter;
import com.android.server.display.utils.AmbientFilterStubber;

import com.google.common.collect.ImmutableList;

@@ -54,7 +53,6 @@ import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import java.util.List;
@@ -185,7 +183,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float luxOverride = 0.1f; luxOverride <= 10000; luxOverride *= 10) {
            setEstimatedBrightnessAndUpdate(controller, luxOverride);
@@ -205,7 +203,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float t = 0.0f; t <= 1.0f; t += 0.1f) {
            setEstimatedBrightnessAndUpdate(controller,
@@ -237,7 +235,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float t = 0.0f; t <= 1.0f; t += 0.1f) {
            float luxOverride = mix(brightness0, brightness1, t);
@@ -274,7 +272,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        setEstimatedBrightnessAndUpdate(controller, 0.0f);
        assertEquals(controller.mPendingAmbientColorTemperature,
@@ -293,7 +291,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float luxOverride = 0.1f; luxOverride <= 10000; luxOverride *= 10) {
            setEstimatedBrightnessAndUpdate(controller, luxOverride);
@@ -311,7 +309,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float luxOverride = 0.1f; luxOverride <= 10000; luxOverride *= 10) {
            setEstimatedBrightnessAndUpdate(controller, luxOverride);
@@ -331,7 +329,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float t = 0.0f; t <= 1.0f; t += 0.1f) {
            setEstimatedBrightnessAndUpdate(controller,
@@ -364,7 +362,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 6000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float t = 0.0f; t <= 1.0f; t += 0.1f) {
            float luxOverride = mix(brightness0, brightness1, t);
@@ -403,7 +401,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = 8000.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float luxOverride = 0.1f; luxOverride <= 10000; luxOverride *= 10) {
            setEstimatedBrightnessAndUpdate(controller, luxOverride);
@@ -428,7 +426,7 @@ public final class AmbientLuxTest {
        DisplayWhiteBalanceController controller =
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        controller.setStrongModeEnabled(true);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float ambientTempFraction = 0.0f; ambientTempFraction <= 1.0f;
                ambientTempFraction += 0.1f) {
@@ -460,7 +458,7 @@ public final class AmbientLuxTest {
                DisplayWhiteBalanceFactory.create(mHandler, mSensorManagerMock, mResourcesSpy);
        final float ambientColorTemperature = -1.0f;
        setEstimatedColorTemperature(controller, ambientColorTemperature);
        controller.mBrightnessFilter = spy(new AmbientFilterStubber());
        controller.mBrightnessFilter = createLastValueAmbientFilter();

        for (float t = 0.0f; t <= 1.0f; t += 0.1f) {
            setEstimatedBrightnessAndUpdate(controller,
@@ -512,13 +510,11 @@ public final class AmbientLuxTest {
    }

    private void mockResourcesFloat(int id, float floatValue) {
        doAnswer(new Answer<Void>() {
            public Void answer(InvocationOnMock invocation) {
        doAnswer((Answer<Void>) invocation -> {
            TypedValue value = (TypedValue) invocation.getArgument(1);
            value.type = TypedValue.TYPE_FLOAT;
            value.data = Float.floatToIntBits(floatValue);
            return null;
            }
        }).when(mResourcesSpy).getValue(
                eq(id),
                any(TypedValue.class), eq(true));
@@ -526,14 +522,14 @@ public final class AmbientLuxTest {

    private void setEstimatedColorTemperature(DisplayWhiteBalanceController controller,
                                              float ambientColorTemperature) {
        AmbientFilter colorTemperatureFilter = spy(new AmbientFilterStubber());
        AmbientFilter colorTemperatureFilter = createLastValueAmbientFilter();
        controller.mColorTemperatureFilter = colorTemperatureFilter;
        when(colorTemperatureFilter.getEstimate(anyLong())).thenReturn(ambientColorTemperature);
        colorTemperatureFilter.addValue(System.currentTimeMillis(), ambientColorTemperature);
    }

    private void setEstimatedBrightnessAndUpdate(DisplayWhiteBalanceController controller,
                                                 float brightness) {
        when(controller.mBrightnessFilter.getEstimate(anyLong())).thenReturn(brightness);
        controller.mBrightnessFilter.addValue(System.currentTimeMillis(), brightness);
        controller.updateAmbientColorTemperature();
    }