Customer reported that they set screen off timer as 2 seconds, however, the result is 6 seconds enter into suspend mode.
1. I tried to reproduce this issue by blow actions:
a. Power up Android, input Screen-off timer to 2 seconds in console.
$ sqlite3 /data/data/com.android.providers.settings/databases/settings.db sqlite> update system set value="2000" where name="screen_off_timeout"; sqlite> .quit
b. Unlock the screen and wait for suspend message, about 6 seconds, I can see suspend message output from console. It shows what I see is exactly same as customer’s.
2. Locate the reason.
In “frameworks/base/services/java/com/android/server/PowerManagerService.java”, function private void setTimeoutLocked(long now, final long originalTimeoutOverride, int nextState), we can see below code. For nextState = SCREEN_BRIGHT, it will wait for mKeylightDelay and then enter next state.
switch (nextState) { case SCREEN_BRIGHT: when = now + mKeylightDelay; break; case SCREEN_DIM: if (mDimDelay >= 0) { when = now + mDimDelay; break; } else { Slog.w(TAG, "mDimDelay=" + mDimDelay + " while trying to dim"); } case SCREEN_OFF: synchronized (mLocks) { when = now + mScreenOffDelay; } break; default: when = now; break; }
I checked code, mKeylightDelay get its value “LONG_KEYLIGHT_DELAY” in function private void setScreenOffTimeoutsLocked(). And we can see macro definition in this file.
// time since last state: time since last event: // The short keylight delay comes from secure settings; this is the default. private static final int SHORT_KEYLIGHT_DELAY_DEFAULT = 6000; // t+6 sec private static final int MEDIUM_KEYLIGHT_DELAY = 15000; // t+15 sec private static final int LONG_KEYLIGHT_DELAY = 6000; // t+6 sec private static final int LONG_DIM_TIME = 7000; // t+N-5 sec
From above definition, we can see that is Android default design method, and we know why we will wait 6 seconds to enter suspend mode even we set screen-off timer as 2 seconds.
3. Solution.
a. We should keep minimum screen-off timer as 6 seconds, just following Android default design method.
b. I tried to modify the macro definition like below, and have a test, it can enter into suspend mode within 2 seconds. However, user experience is not good. Because 2 seconds is too short, e-reader panel response is slow, it is very easy to enter suspend mode, we have to wakeup it frequency.
b. I tried to modify the macro definition like below, and have a test, it can enter into suspend mode within 2 seconds. However, user experience is not good. Because 2 seconds is too short, e-reader panel response is slow, it is very easy to enter suspend mode, we have to wakeup it frequency.
// time since last state: time since last event: // The short keylight delay comes from secure settings; this is the default. private static final int SHORT_KEYLIGHT_DELAY_DEFAULT = 1000; // t+6 sec private static final int MEDIUM_KEYLIGHT_DELAY = 9000; // t+15 sec private static final int LONG_KEYLIGHT_DELAY = 1000; // t+6 sec private static final int LONG_DIM_TIME = 2000; // t+N-5 sec
Please tradeoff it.
No comments:
Post a Comment