設定オープンインターフェイスも構成可能である場合に画面screen_off睡眠と睡眠は、対応する設定時間を有します。当然のデフォルトのデフォルトに対応する値を見て内部SettingsProvider、特定の製品、口座へのオーバーレイの状況を取ります。
例えば、それはdef_sleep_timeout閉じスリープ機能を示しながら、-1、ここdef_screen_off_timeout 60年代です。言い換えれば、機械は、スクリーンセーバに超える1分は、睡眠や画面のHDMI出力信号は常に持っていたされませんではないでしょう。
/p-base/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_screen_off_timeout">60000</integer>
<integer name="def_sleep_timeout">-1</integer>
タイムコードミリ秒単位の参照するには60000ミリ秒、。
状況オーバーレイ
デフォルトのスリープ時間がありスクリーンセーバー時間は睡眠に10秒、何の関係もありませんスクリーンセーバーに10秒、数10で、20代です。
<integer name="def_sleep_timeout">20000</integer>
<integer name="def_screen_off_timeout">10000</integer>
1000 UID、以下のログを参照して記載されたシステムが開始され、Process.SYSTEM_UIDを指します。
08-22 05:09:51.244 3067 3092 I PowerManagerService: Nap time (uid 1000)...
08-22 05:09:51.245 3067 3092 I DreamManagerService: Entering dreamland.
08-22 05:09:51.245 3067 3092 I PowerManagerService: Dreaming...
08-22 05:10:01.243 3067 3092 I PowerManagerService: Going to sleep due to screen timeout (uid 1000)...
08-22 05:10:01.244 3067 3092 I DreamManagerService: Gently waking up from dream.
08-22 05:10:01.245 3067 3092 I PowerManagerService: Sleeping (uid 1000)...
08-22 05:10:01.247 2892 2954 E : getRealActiveConfig to config(0).
08-22 05:10:01.248 3067 3088 I DreamManagerService: Performing gentle wake from dream.
各更新システム電力状態にウェイクアップまたは睡眠時間は、再び、現在のユーザの活動に基づいて計算される場合。nextTimeout状態は、ユーザの状態に基づいて適切な処置を行ってたときに来る次の更新を満たすようにするときのキーの機能は、主に、次のタイムアウトnextTimeoutとユーザー状態mUserActivitySummaryを計算updateUserActivitySummaryLocked、夢、薄暗い、またはスリープです。条件は、前の計算を上書きする場合は、この状態の計算は、層によって暗い層であることに注意してくださいは、計算が続きます。一方、システムがスリープ順番に行くも、薄暗いことが夢、居眠り、睡眠なければなりません。
/**
* Updates the value of mUserActivitySummary to summarize the user requested
* state of the system such as whether the screen should be bright or dim.
* Note that user activity is ignored when the system is asleep.
*
* This function must have no other side-effects.
*/
private void updateUserActivitySummaryLocked(long now, int dirty) {
// Update the status of the user activity timeout timer.
if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY
| DIRTY_WAKEFULNESS | DIRTY_SETTINGS)) != 0) {
mHandler.removeMessages(MSG_USER_ACTIVITY_TIMEOUT);
long nextTimeout = 0;
if (mWakefulness == WAKEFULNESS_AWAKE
|| mWakefulness == WAKEFULNESS_DREAMING
|| mWakefulness == WAKEFULNESS_DOZING) {
final long sleepTimeout = getSleepTimeoutLocked();
final long screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout);
final long screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
final boolean userInactiveOverride = mUserInactiveOverrideFromWindowManager;
final long nextProfileTimeout = getNextProfileTimeoutLocked(now);
mUserActivitySummary = 0;
if (mLastUserActivityTime >= mLastWakeTime) {
nextTimeout = mLastUserActivityTime
+ screenOffTimeout - screenDimDuration;
if (now < nextTimeout) {
mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
} else {
nextTimeout = mLastUserActivityTime + screenOffTimeout;
if (now < nextTimeout) {
mUserActivitySummary = USER_ACTIVITY_SCREEN_DIM;
}
}
}
if (mUserActivitySummary == 0
&& mLastUserActivityTimeNoChangeLights >= mLastWakeTime) {
nextTimeout = mLastUserActivityTimeNoChangeLights + screenOffTimeout;
if (now < nextTimeout) {
if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_BRIGHT
|| mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_VR) {
mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
} else if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_DIM) {
mUserActivitySummary = USER_ACTIVITY_SCREEN_DIM;
}
}
}
if (mUserActivitySummary == 0) {
if (sleepTimeout >= 0) {
final long anyUserActivity = Math.max(mLastUserActivityTime,
mLastUserActivityTimeNoChangeLights);
if (anyUserActivity >= mLastWakeTime) {
nextTimeout = anyUserActivity + sleepTimeout;
if (now < nextTimeout) {
mUserActivitySummary = USER_ACTIVITY_SCREEN_DREAM;
}
}
} else {
mUserActivitySummary = USER_ACTIVITY_SCREEN_DREAM;
nextTimeout = -1;
}
}
if (mUserActivitySummary != USER_ACTIVITY_SCREEN_DREAM && userInactiveOverride) {
if ((mUserActivitySummary &
(USER_ACTIVITY_SCREEN_BRIGHT | USER_ACTIVITY_SCREEN_DIM)) != 0) {
// Device is being kept awake by recent user activity
if (nextTimeout >= now && mOverriddenTimeout == -1) {
// Save when the next timeout would have occurred
mOverriddenTimeout = nextTimeout;
}
}
mUserActivitySummary = USER_ACTIVITY_SCREEN_DREAM;
nextTimeout = -1;
}
if (nextProfileTimeout > 0) {
nextTimeout = Math.min(nextTimeout, nextProfileTimeout);
}
if (mUserActivitySummary != 0 && nextTimeout >= 0) {
scheduleUserInactivityTimeout(nextTimeout);
}
} else {
mUserActivitySummary = 0;
}
if (DEBUG_SPEW) {
Slog.d(TAG, "updateUserActivitySummaryLocked: mWakefulness="
+ PowerManagerInternal.wakefulnessToString(mWakefulness)
+ ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)
+ ", nextTimeout=" + TimeUtils.formatUptime(nextTimeout));
}
}
}
次のようにmUserActivitySummary値は、それが素敵に見えるでしょうデバッグのオープンPowerManagerServiceにこの状態の必要性を変更します。0x1のから見ることができます - スイッチング>を0x4この状態 - > 0x2の。
// Summarizes the user activity state.
private static final int USER_ACTIVITY_SCREEN_BRIGHT = 1 << 0;
private static final int USER_ACTIVITY_SCREEN_DIM = 1 << 1;
private static final int USER_ACTIVITY_SCREEN_DREAM = 1 << 2;
入り口パラメータをupdateUserActivitySummaryLocked 今、私たちはその見ることができる時間は、システムが時間の経過後に開始されるSYSTEM_TIME_MONOTONIC時間のシステムです。すべての回の操作は、この時間を基準に行われます。
設定値から、システムのスリープタイムアウトを取得し、最小値は、画面の最小値は、一般に、オフスクリーンの最小値よりも睡眠時間小さくない10S、あるオフ大画面を破壊する選択。mSleepTimeoutSettingはから入手できます。セットアップメニューの設定を、「メニューへのPutのSLEEPデバイスの」それはスリープ状態になる時間を指定します。
private long getSleepTimeoutLocked() {
final long timeout = mSleepTimeoutSetting;
if (timeout <= 0) {
return -1;
}
return Math.max(timeout, mMinimumScreenOffTimeoutConfig);
}
デフォルト値があまりにも設定されていない場合は初期設定では、SettingsProviderからデータを読み込み、内部updateSettingsLocked。
mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,
Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,
UserHandle.USER_CURRENT);
mSleepTimeoutSetting = Settings.Secure.getIntForUser(resolver,
Settings.Secure.SLEEP_TIMEOUT, DEFAULT_SLEEP_TIMEOUT,
UserHandle.USER_CURRENT);
システムオフスクリーンタイムアウトを取った後、これは主にスリープタイムアウトを選択し、より小さなシステムオフスクリーン時間です。例えば、スクリーンの前にオフである10S、およびその逆、または10Sことは、睡眠が20代であり、10秒です。一般内の2つの上記の条件を満足する場合。mScreenOffTimeoutSetting設定メニューでまたは、設定可能なスクリーンセーバーメニュー」 - スタートのメニューを。マシンのさまざまな種類があるかもしれません、メニューの配置位置は同じではありません。
private long getScreenOffTimeoutLocked(long sleepTimeout) {
long timeout = mScreenOffTimeoutSetting;
if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) {
timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin);
}
if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {
timeout = Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);
}
if (sleepTimeout >= 0) {
timeout = Math.min(timeout, sleepTimeout);
}
return Math.max(timeout, mMinimumScreenOffTimeoutConfig);
}
最小値は、フレームワーク/塩基内部セットconfig.xmlに画面から外れています
<integer name="config_minimumScreenOffTimeout">10000</integer>
リファレンスログイン
ドリーミングからmWakefulnessに眠っ居眠りに、USER_ACTIVITY_SCREEN_DREAMからNothingにmUserActivitySummary。
08-22 06:22:02.828 3064 5660 D PowerManagerService: updateUserActivitySummaryLocked: mWakefulness=Dreaming, mUserActivitySummary=0x4, nextTimeout=146181 (in 264 ms)
08-22 06:22:02.828 3064 5660 D PowerManagerService: updateDisplayPowerStateLocked: mDisplayReady=true, policy=3, mWakefulness=2, mWakeLockSummary=0x3, mUserActivitySummary=0x4, mBootCompleted=true, screenBrightnessOverride=-1, useAutoBrightness=false, mScreenBrightnessBoostInProgress=false, mIsVrModeEnabled= false, sQuiescent=false
08-22 06:22:03.093 3064 3089 D PowerManagerService: handleUserActivityTimeout
08-22 06:22:03.093 3064 3089 D PowerManagerService: updateUserActivitySummaryLocked: mWakefulness=Dreaming, mUserActivitySummary=0x0, nextTimeout=146181 (1 ms ago)
08-22 06:22:03.093 3064 3089 D PowerManagerService: updateDisplayPowerStateLocked: mDisplayReady=true, policy=3, mWakefulness=2, mWakeLockSummary=0x3, mUserActivitySummary=0x0, mBootCompleted=true, screenBrightnessOverride=-1, useAutoBrightness=false, mScreenBrightnessBoostInProgress=false, mIsVrModeEnabled= false, sQuiescent=false
08-22 06:22:03.093 3064 3089 D PowerManagerService: goToSleepNoUpdateLocked: eventTime=146182, reason=2, flags=0, uid=1000
08-22 06:22:03.093 3064 3089 I PowerManagerService: Going to sleep due to screen timeout (uid 1000)...
08-22 06:22:03.094 3064 3089 D PowerManagerService: updateWakeLockSummaryLocked: mWakefulness=Dozing, mWakeLockSummary=0x3
08-22 06:22:03.094 3064 3089 D PowerManagerService: updateUserActivitySummaryLocked: mWakefulness=Dozing, mUserActivitySummary=0x0, nextTimeout=146181 (2 ms ago)
08-22 06:22:03.094 3064 3089 D PowerManagerService: updateDisplayPowerStateLocked: mDisplayReady=true, policy=3, mWakefulness=3, mWakeLockSummary=0x3, mUserActivitySummary=0x0, mBootCompleted=true, screenBrightnessOverride=-1, useAutoBrightness=false, mScreenBrightnessBoostInProgress=false, mIsVrModeEnabled= false, sQuiescent=false
08-22 06:22:03.094 3064 3089 I DreamManagerService: Gently waking up from dream.
08-22 06:22:03.095 3064 3089 D PowerManagerService: reallyGoToSleepNoUpdateLocked: eventTime=146184, uid=1000
08-22 06:22:03.095 3064 3089 I PowerManagerService: Sleeping (uid 1000)...
08-22 06:22:03.095 3064 3089 D PowerManagerService: updateWakeLockSummaryLocked: mWakefulness=Asleep, mWakeLockSummary=0x1
08-22 06:22:03.095 3064 3089 D PowerManagerService: updateUserActivitySummaryLocked: mWakefulness=Asleep, mUserActivitySummary=0x0, nextTimeout=0 (146185 ms ago)
08-22 06:22:03.096 3064 3089 D PowerManagerService: updateDisplayPowerStateLocked: mDisplayReady=false, policy=0, mWakefulness=0, mWakeLockSummary=0x1, mUserActivitySummary=0x0, mBootCompleted=true, screenBrightnessOverride=-1, useAutoBrightness=false, mScreenBrightnessBoostInProgress=false, mIsVrModeEnabled= false, sQuiescent=false
08-22 06:22:03.096 3064 3085 I DreamManagerService: Performing gentle wake from dream.