From 589d64833a4d996d6c4c0bb2cd70d2a6a694a102 Mon Sep 17 00:00:00 2001 From: bquezada Date: Wed, 26 May 2021 18:19:50 +0000 Subject: [PATCH] Add batching to Flip to Screen Off. This reduces power drain when the screen is on and the phone is idle. Bug: 189253126 Test: atest FaceDownDetectorTest Change-Id: I1a7712b691654b5d0552171cc7419f34154da300 --- core/res/res/values/config.xml | 3 +++ core/res/res/values/symbols.xml | 1 + .../android/server/power/FaceDownDetector.java | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 28f18a4124ded..61028d9bbeb3d 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1792,6 +1792,9 @@ true + + 2000000 + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d86c6e7270480..9ebab8fda5890 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -276,6 +276,7 @@ + diff --git a/services/core/java/com/android/server/power/FaceDownDetector.java b/services/core/java/com/android/server/power/FaceDownDetector.java index 816c81ddf3059..b237ca27e62d8 100644 --- a/services/core/java/com/android/server/power/FaceDownDetector.java +++ b/services/core/java/com/android/server/power/FaceDownDetector.java @@ -77,6 +77,8 @@ public class FaceDownDetector implements SensorEventListener { private boolean mIsEnabled; + private int mSensorMaxLatencyMicros; + /** * DeviceConfig flag name, determines how long to disable sensor when user interacts while * device is flipped. @@ -202,7 +204,11 @@ public class FaceDownDetector implements SensorEventListener { if (mActive != shouldBeActive) { if (shouldBeActive) { mSensorManager.registerListener( - this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); + this, + mAccelerometer, + SensorManager.SENSOR_DELAY_NORMAL, + mSensorMaxLatencyMicros + ); if (mPreviousResultType == SCREEN_OFF_RESULT) { logScreenOff(); } @@ -226,6 +232,7 @@ public class FaceDownDetector implements SensorEventListener { pw.println(" mFaceDown=" + mFaceDown); pw.println(" mActive=" + mActive); pw.println(" mLastFlipTime=" + mLastFlipTime); + pw.println(" mSensorMaxLatencyMicros=" + mSensorMaxLatencyMicros); pw.println(" mUserInteractionBackoffMillis=" + mUserInteractionBackoffMillis); pw.println(" mPreviousResultTime=" + mPreviousResultTime); pw.println(" mPreviousResultType=" + mPreviousResultType); @@ -356,6 +363,11 @@ public class FaceDownDetector implements SensorEventListener { 3600_000); } + private int getSensorMaxLatencyMicros() { + return mContext.getResources().getInteger( + com.android.internal.R.integer.config_flipToScreenOffMaxLatencyMicros); + } + private float getFloatFlagValue(String key, float defaultValue, float min, float max) { final float value = DeviceConfig.getFloat(NAMESPACE_ATTENTION_MANAGER_SERVICE, key, @@ -416,6 +428,7 @@ public class FaceDownDetector implements SensorEventListener { mZAccelerationThreshold = getZAccelerationThreshold(); mZAccelerationThresholdLenient = mZAccelerationThreshold + 1.0f; mTimeThreshold = getTimeThreshold(); + mSensorMaxLatencyMicros = getSensorMaxLatencyMicros(); mUserInteractionBackoffMillis = getUserInteractionBackoffMillis(); final boolean oldEnabled = mIsEnabled; mIsEnabled = isEnabled();