Merge "Fix the ambient lux which did not update for blocking zone" into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
61b61e49ed
@@ -52,9 +52,12 @@ import com.android.server.display.utils.AmbientFilterFactory;
|
|||||||
import com.android.server.utils.DeviceConfigInterface;
|
import com.android.server.utils.DeviceConfigInterface;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1160,7 +1163,8 @@ public class DisplayModeDirector {
|
|||||||
// mShouldObserveAmbientHighChange is true, screen is on, peak refresh rate
|
// mShouldObserveAmbientHighChange is true, screen is on, peak refresh rate
|
||||||
// changeable and low power mode off. After initialization, these states will
|
// changeable and low power mode off. After initialization, these states will
|
||||||
// be updated from the same handler thread.
|
// be updated from the same handler thread.
|
||||||
private boolean mDefaultDisplayOn = false;
|
private int mDefaultDisplayState = Display.STATE_UNKNOWN;
|
||||||
|
private boolean mIsDeviceActive = false;
|
||||||
private boolean mRefreshRateChangeable = false;
|
private boolean mRefreshRateChangeable = false;
|
||||||
private boolean mLowPowerModeEnabled = false;
|
private boolean mLowPowerModeEnabled = false;
|
||||||
|
|
||||||
@@ -1341,7 +1345,8 @@ public class DisplayModeDirector {
|
|||||||
pw.println(" BrightnessObserver");
|
pw.println(" BrightnessObserver");
|
||||||
pw.println(" mAmbientLux: " + mAmbientLux);
|
pw.println(" mAmbientLux: " + mAmbientLux);
|
||||||
pw.println(" mBrightness: " + mBrightness);
|
pw.println(" mBrightness: " + mBrightness);
|
||||||
pw.println(" mDefaultDisplayOn: " + mDefaultDisplayOn);
|
pw.println(" mDefaultDisplayState: " + mDefaultDisplayState);
|
||||||
|
pw.println(" mIsDeviceActive: " + mIsDeviceActive);
|
||||||
pw.println(" mLowPowerModeEnabled: " + mLowPowerModeEnabled);
|
pw.println(" mLowPowerModeEnabled: " + mLowPowerModeEnabled);
|
||||||
pw.println(" mRefreshRateChangeable: " + mRefreshRateChangeable);
|
pw.println(" mRefreshRateChangeable: " + mRefreshRateChangeable);
|
||||||
pw.println(" mShouldObserveDisplayLowChange: " + mShouldObserveDisplayLowChange);
|
pw.println(" mShouldObserveDisplayLowChange: " + mShouldObserveDisplayLowChange);
|
||||||
@@ -1567,14 +1572,17 @@ public class DisplayModeDirector {
|
|||||||
private void updateDefaultDisplayState() {
|
private void updateDefaultDisplayState() {
|
||||||
Display display = mContext.getSystemService(DisplayManager.class)
|
Display display = mContext.getSystemService(DisplayManager.class)
|
||||||
.getDisplay(Display.DEFAULT_DISPLAY);
|
.getDisplay(Display.DEFAULT_DISPLAY);
|
||||||
boolean defaultDisplayOn = display != null && display.getState() != Display.STATE_OFF;
|
if (display == null) {
|
||||||
setDefaultDisplayState(defaultDisplayOn);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setDefaultDisplayState(display.getState());
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void setDefaultDisplayState(boolean on) {
|
public void setDefaultDisplayState(int state) {
|
||||||
if (mDefaultDisplayOn != on) {
|
if (mDefaultDisplayState != state) {
|
||||||
mDefaultDisplayOn = on;
|
mDefaultDisplayState = state;
|
||||||
updateSensorStatus();
|
updateSensorStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1595,15 +1603,19 @@ public class DisplayModeDirector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDeviceActive() {
|
private boolean isDeviceActive() {
|
||||||
return mDefaultDisplayOn && mInjector.isDeviceInteractive(mContext);
|
mIsDeviceActive = mInjector.isDeviceInteractive(mContext);
|
||||||
|
return (mDefaultDisplayState == Display.STATE_ON)
|
||||||
|
&& mIsDeviceActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class LightSensorEventListener implements SensorEventListener {
|
private final class LightSensorEventListener implements SensorEventListener {
|
||||||
final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS;
|
final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS;
|
||||||
private float mLastSensorData;
|
private float mLastSensorData;
|
||||||
|
private long mTimestamp;
|
||||||
|
|
||||||
public void dumpLocked(PrintWriter pw) {
|
public void dumpLocked(PrintWriter pw) {
|
||||||
pw.println(" mLastSensorData: " + mLastSensorData);
|
pw.println(" mLastSensorData: " + mLastSensorData);
|
||||||
|
pw.println(" mTimestamp: " + formatTimestamp(mTimestamp));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1627,6 +1639,7 @@ public class DisplayModeDirector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long now = SystemClock.uptimeMillis();
|
long now = SystemClock.uptimeMillis();
|
||||||
|
mTimestamp = System.currentTimeMillis();
|
||||||
if (mAmbientFilter != null) {
|
if (mAmbientFilter != null) {
|
||||||
mAmbientFilter.addValue(now, mLastSensorData);
|
mAmbientFilter.addValue(now, mLastSensorData);
|
||||||
}
|
}
|
||||||
@@ -1653,6 +1666,12 @@ public class DisplayModeDirector {
|
|||||||
mHandler.removeCallbacks(mInjectSensorEventRunnable);
|
mHandler.removeCallbacks(mInjectSensorEventRunnable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String formatTimestamp(long time) {
|
||||||
|
SimpleDateFormat dateFormat =
|
||||||
|
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);
|
||||||
|
return dateFormat.format(new Date(time));
|
||||||
|
}
|
||||||
|
|
||||||
private void processSensorData(long now) {
|
private void processSensorData(long now) {
|
||||||
if (mAmbientFilter != null) {
|
if (mAmbientFilter != null) {
|
||||||
mAmbientLux = mAmbientFilter.getEstimate(now);
|
mAmbientLux = mAmbientFilter.getEstimate(now);
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import static org.mockito.Mockito.any;
|
|||||||
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;
|
||||||
|
import static org.mockito.internal.verification.VerificationModeFactory.times;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
@@ -410,7 +411,7 @@ public class DisplayModeDirectorTest {
|
|||||||
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
|
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
|
||||||
setPeakRefreshRate(90);
|
setPeakRefreshRate(90);
|
||||||
director.getSettingsObserver().setDefaultRefreshRate(90);
|
director.getSettingsObserver().setDefaultRefreshRate(90);
|
||||||
director.getBrightnessObserver().setDefaultDisplayState(true);
|
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
|
||||||
|
|
||||||
final FakeDeviceConfig config = mInjector.getDeviceConfig();
|
final FakeDeviceConfig config = mInjector.getDeviceConfig();
|
||||||
config.setRefreshRateInLowZone(90);
|
config.setRefreshRateInLowZone(90);
|
||||||
@@ -453,7 +454,7 @@ public class DisplayModeDirectorTest {
|
|||||||
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
|
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
|
||||||
setPeakRefreshRate(90 /*fps*/);
|
setPeakRefreshRate(90 /*fps*/);
|
||||||
director.getSettingsObserver().setDefaultRefreshRate(90);
|
director.getSettingsObserver().setDefaultRefreshRate(90);
|
||||||
director.getBrightnessObserver().setDefaultDisplayState(true);
|
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
|
||||||
|
|
||||||
final FakeDeviceConfig config = mInjector.getDeviceConfig();
|
final FakeDeviceConfig config = mInjector.getDeviceConfig();
|
||||||
config.setRefreshRateInHighZone(60);
|
config.setRefreshRateInHighZone(60);
|
||||||
@@ -490,6 +491,43 @@ public class DisplayModeDirectorTest {
|
|||||||
assertVoteForRefreshRateLocked(vote, 60 /*fps*/);
|
assertVoteForRefreshRateLocked(vote, 60 /*fps*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSensorRegistration() {
|
||||||
|
DisplayModeDirector director =
|
||||||
|
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
|
||||||
|
setPeakRefreshRate(90 /*fps*/);
|
||||||
|
director.getSettingsObserver().setDefaultRefreshRate(90);
|
||||||
|
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
|
||||||
|
|
||||||
|
Sensor lightSensor = createLightSensor();
|
||||||
|
SensorManager sensorManager = createMockSensorManager(lightSensor);
|
||||||
|
|
||||||
|
director.start(sensorManager);
|
||||||
|
ArgumentCaptor<SensorEventListener> listenerCaptor =
|
||||||
|
ArgumentCaptor.forClass(SensorEventListener.class);
|
||||||
|
Mockito.verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1)))
|
||||||
|
.registerListener(
|
||||||
|
listenerCaptor.capture(),
|
||||||
|
eq(lightSensor),
|
||||||
|
anyInt(),
|
||||||
|
any(Handler.class));
|
||||||
|
|
||||||
|
// Dispaly state changed from On to Doze
|
||||||
|
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_DOZE);
|
||||||
|
Mockito.verify(sensorManager)
|
||||||
|
.unregisterListener(listenerCaptor.capture());
|
||||||
|
|
||||||
|
// Dispaly state changed from Doze to On
|
||||||
|
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
|
||||||
|
Mockito.verify(sensorManager, times(2))
|
||||||
|
.registerListener(
|
||||||
|
listenerCaptor.capture(),
|
||||||
|
eq(lightSensor),
|
||||||
|
anyInt(),
|
||||||
|
any(Handler.class));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void assertVoteForRefreshRateLocked(Vote vote, float refreshRate) {
|
private void assertVoteForRefreshRateLocked(Vote vote, float refreshRate) {
|
||||||
assertThat(vote).isNotNull();
|
assertThat(vote).isNotNull();
|
||||||
final DisplayModeDirector.RefreshRateRange expectedRange =
|
final DisplayModeDirector.RefreshRateRange expectedRange =
|
||||||
|
|||||||
Reference in New Issue
Block a user