dumpsys power 简介
一. dump 代码位置
frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
@NeverCompile // Avoid size overhead of debugging code.
private void dumpInternal(PrintWriter pw) {
pw.println("POWER MANAGER (dumpsys power)\n");
....}
二. dump 内容解析
1. Power Manager State:
Power Manager State:
//Settings.Global.POWER_MANAGER_CONSTANTS
Settings power_manager_constants://缓存进程禁用持有唤醒锁
no_cached_wake_locks=true//内部状态标志,0x0 表示没有需要保存或处理的待更改设置
mDirty=0x0//mWakefulness的状态,属于dozing状态。状态类型:Asleep/Awake/Dreaming/Dozing
mWakefulness=Dozing//设备Wakefulness状态(譬如:从Dozing到Awake)的切换过程, false 表示已经切换完成。true 表示正在切换中.
mWakefulnessChanging=false//设备口被插入
mIsPowered=true//mPlugType 类型: BATTERY_PLUGGED_AC(1),BATTERY_PLUGGED_USB(2),BATTERY_PLUGGED_WIRELESS(3),BATTERY_PLUGGED_DOCK(4)
//USB 充电mPlugType=2
//电池电量100,表示已经充满了.
mBatteryLevel=100//统计在屏保(Dreams)状态时,消耗的电池电量.
mDreamsBatteryLevelDrain=0//mDockState类型:EXTRA_DOCK_STATE_UNDOCKED(0),EXTRA_DOCK_STATE_DESK(1),EXTRA_DOCK_STATE_CAR(2),EXTRA_DOCK_STATE_LE_DESK(3),EXTRA_DOCK_STATE_HE_DESK(4)
//EXTRA_DOCK_STATE_UNDOCKED:表示设备未接入任何底座
//EXTRA_DOCK_STATE_DESK:表示桌面底座模式
//EXTRA_DOCK_STATE_CAR:表示车载底座模式
//EXTRA_DOCK_STATE_LE_DESK:表示低功耗桌面底座模式
//EXTRA_DOCK_STATE_HE_DESK:表示数字式(高端)底座
mDockState=0//USB充电时,是否保持常亮,false表示充电时,不保持常亮。
mStayOn=false
//距离传感器检测物体是否接近,false 表示没有物体接近
mProximityPositive=false//表示是否走到PHASE_BOOT_COMPLETED 阶段
mBootCompleted=true//表示是否走到PHASE_SYSTEM_SERVICES_READY 阶段
mSystemReady=true//未初始化,表示未被充电时,电池还能撑到什么时间
mEnhancedDischargeTimeElapsed=0//上次记录EnhancedDischarge的时间点
mLastEnhancedDischargeTimeUpdatedElapsed=0//未初始化
mEnhancedDischargePredictionIsPersonalized=false//Android 框架是否允许内核使用自动挂起功能。框架控制总开关
mUseAutoSuspend=true//上层向native层下挂起的状态
mHalAutoSuspendModeEnabled=true//当前状态是否处于交互式.true (启用): 表示设备需要进入高响应、低延迟的状态。表示设备可以进入低功耗、低性能的状态
mHalInteractiveModeEnabled=false//mWakeLockSummary属于WAKE_LOCK_PROXIMITY_SCREEN_OFF
//Summarizes的所有状态
//WAKE_LOCK_CPU(1 << 0),
//WAKE_LOCK_SCREEN_BRIGHT(1 << 1),
//WAKE_LOCK_SCREEN_DIM(1 << 2),
//WAKE_LOCK_BUTTON_BRIGHT(1 << 3),
//WAKE_LOCK_PROXIMITY_SCREEN_OFF(1 << 4)
//WAKE_LOCK_STAY_AWAKE = 1 << 5
//WAKE_LOCK_DOZE = 1 << 6
//WAKE_LOCK_DRAW = 1 << 7
//WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE = 1 << 8;
mWakeLockSummary=0x40//表示最新一次执行“长时唤醒锁”的任务的等待时间
mNotifyLongScheduled=+12s978ms//表示"长时唤醒锁", 在1m20s719ms之前已经触发
mNotifyLongDispatched=-1m20s719ms//下次检查"长时唤醒锁"的时间,(none)表示没有"长时唤醒锁"需要检查的
mNotifyLongNextCheck=(none)//延迟释放 {@link #PROXIMITY_SCREEN_OFF_WAKE_LOCK} 唤醒锁,直到接近传感器检测到无物体贴近
//false表示当WakeLock释放时,flag没有持有PowerManager.RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY
mRequestWaitForNegativeProximity=false//系统最近没有因为距离传感器检测到有物体靠近(Positive)而拦截(阻止)一次电源键的按下事件。
mInterceptedPowerKeyForProximity=false//"Sandman"是一个比喻,源自西方文化中向儿童的眼睛撒沙子以催其入睡的精灵
//管理设备从awake(唤醒)状态到asleep(睡眠)状态的过渡。
//如果这个值在设备本应激活时却为 true,可能表明系统正“卡”在准备睡眠的途中,这反而可能是一个需要调查的问题
mSandmanScheduled=false//是否处于低电量,false表示不属于低电量
mBatteryLevelLow=false//是否处于light doze, false 表示不处于light doze
mLightDeviceIdleMode=false//是否处于deep doze,false 表示不处于deep doze
mDeviceIdleMode=false//doze 白名单列表
mDeviceIdleWhitelist=[1000, 1001, 2000, 10044, 10045, 10047, 10051, 10056, 10057, 10062, 10064, 10065, 10095, 10106, 10111, 10143, 10175, 10182]
//临时白名单列表
mDeviceIdleTempWhitelist=[]//低功耗待机模式,设备正在经历上述所有最严格的限制:无网络、无唤醒锁、作业延迟。这是最强级别的省电状态。默认系统配置都是关闭的.
mLowPowerStandbyActive=false//设备最后一次被唤醒时间是开机之后过了16939975 ms
mLastWakeTime=72958152 (16939975 ms ago)//设备最后一次进入睡眠是 16938505 ms 前
mLastSleepTime=72959622 (16938505 ms ago)//休眠的原因是按了power键
mLastSleepReason=power_button//系统最后一次从全局睡眠(完全休眠)中被唤醒的时间点
mLastGlobalWakeTimeRealtime=72958166 (16939961 ms ago)//系统最后一次进入全局睡眠(完全休眠)的时间点
mLastGlobalSleepTimeRealtime=72959797 (16938330 ms ago)//提频到Boost.INTERACTION的时间戳
mLastInteractivePowerHintTime=72958152 (16939975 ms ago)// 记录上次提升屏幕亮度的时间
mLastScreenBrightnessBoostTime=0 (89898127 ms ago)//记录是否正在提升屏幕亮度
mScreenBrightnessBoostInProgress=false//阻止系统挂起(进入睡眠)的唤醒锁
//是调用mWakeLockSuspendBlocker.acquire();
mHoldingWakeLockSuspendBlocker=false//持有阻止屏幕关闭的阻挡器
//是调用mDisplaySuspendBlocker.acquire(HOLDING_DISPLAY_SUSPEND_BLOCKER);
//false 表示没可以阻止屏幕关闭的阻挡器
mHoldingDisplaySuspendBlocker=false//设备传感器检测到屏幕朝下的时间记录
mLastFlipTime=0// 当前设备数九屏幕朝下
mIsFaceDown=false
2. Settings and Configuration
Settings and Configuration:
//与显示配置解耦。允许系统独立于屏幕状态来控制内核的自动挂起(Auto-Suspend)节能机制,提供更灵活的电源管理。
mDecoupleHalAutoSuspendModeFromDisplayConfig=true//与显示配置解耦。允许系统独立于屏幕状态来控制内核的交互模式(Interactive Mode),这通常与上面的配置一起使用。
mDecoupleHalInteractiveModeFromDisplayConfig=true//若设备在插入或拔出电源时应唤醒,则为真。
//设备配置为在插拔电源时唤醒。
mWakeUpWhenPluggedOrUnpluggedConfig=true
//在剧场模式下是否唤醒设备,false 表示不唤醒
mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig=false//剧场模式是否启用
mTheaterModeEnabled=false//和config_keepDreamingWhenUnplugging配置有关,默认都是flase 和是否存在屏保组件
//表示在屏保运行时拔掉电源,屏保不会继续保持. mKeepDreamingWhenUnplugging=false//若设备因接近传感器触发而关闭屏幕时应进入挂起状态,则为真
//配置为因距离感应(如贴脸打电话)而熄屏时,允许系统挂起(Suspend)。
mSuspendWhenScreenOffDueToProximityConfig=true//设备支持屏保功能。
mDreamsSupportedConfig=true//默认开启屏保
mDreamsEnabledByDefaultConfig=true// 屏保在设备进入睡眠时的默认激活策略
mDreamsActivatedOnSleepByDefaultConfig=false
mDreamsActivatedOnDockByDefaultConfig=true// 若设备在未接通电源时仍可运行屏保,则为真。
//配置为在电池供电时不允许启动屏保,以防耗电
mDreamsEnabledOnBatteryConfig=false// 允许在通电状态下启动屏保的最低电池电量。
// 使用 -1 可禁用此安全功能。//在充电时启动屏保没有最低电量要求(-1 表示禁用此限制)
mDreamsBatteryLevelMinimumWhenPoweredConfig=-1// 允许在未接通电源时启动屏保的最低电池电量。
// 使用 -1 可禁用此安全功能。//在电池供电时,只有当电量 >= 15% 时才允许启动屏保
mDreamsBatteryLevelMinimumWhenNotPoweredConfig=15//如果屏保使电量下降超过 5%,则停止屏保
mDreamsBatteryLevelDrainCutoffConfig=5//用户或系统设置中已开启屏保功能。
mDreamsEnabledSetting=true//用户设置中选择“在睡眠时启动屏保”。
mDreamsActivateOnSleepSetting=false//用户设置中选择“在插入底座时启动屏保”。
mDreamsActivateOnDockSetting=true// 若需等待屏幕关闭转换完成后才启动低功耗保持状态(doze),则为真。
mDozeAfterScreenOff=true
//设备配置为在 Doze 状态下屏幕不保持亮度(应是熄灭的)。
mBrightWhenDozingConfig=false//系统允许设置的最短屏幕超时时间为 10 秒。
mMinimumScreenOffTimeoutConfig=10000//屏幕从亮到完全熄灭的变暗过程最长持续 7 秒。
mMaximumScreenDimDurationConfig=7000//屏幕变暗时的时间比例.
mMaximumScreenDimRatioConfig=0.20000005// "专注模式"超时时长的默认值。-1 表示禁用
//Attentive Mode(专注模式)是一种设备状态,在这种状态下,系统预期用户可能会在较长时间内与设备进行间歇性交互,但又不希望屏幕一直以正常超时时间关闭
// 表示默认值没有配置
mAttentiveTimeoutConfig=-1
// 使用Settings.Secure.ATTENTIVE_TIMEOUT
mAttentiveTimeoutSetting=-1//专注模式的持续时间默认值
mAttentiveWarningDurationConfig=30000//当前设置的屏幕自动关闭超时时间
mScreenOffTimeoutSetting=1800000//设置系统睡眠超时(-1 表示禁用)
mSleepTimeoutSetting=-1// 根据设备管理策略规定的屏幕关闭超时时长最大允许值(单位:毫秒)
//此值当前并未被强制执行
mMaximumScreenOffTimeoutFromDeviceAdmin=9223372036854775807 (enforced=false)//"充电时保持唤醒"的设置当前为 0(禁用)
mStayOnWhilePluggedInSetting=0//窗口管理器当前强制覆盖屏幕亮度(NaN = Not a Number)。NaN表示没有覆盖屏幕亮度
mScreenBrightnessOverrideFromWindowManager=NaN//窗口管理器设置了用户无操作超时为 10 秒。这意味着某个应用(如全屏视频应用)可能临时要求缩短超时时间。
mUserActivityTimeoutOverrideFromWindowManager=10000//窗口管理器没有强制宣布用户为“非活动”状态。
mUserInactiveOverrideFromWindowManager=false//屏保服务正在覆盖 Doze 状态的屏幕行为。值
1
通常对应SCREEN_STATE_BRIGHT
,这意味着屏保正在运行并保持屏幕亮起。
mDozeScreenStateOverrideFromDreamManager=1//来自 Sidekick 服务(通常是 AOSP 中用于 Ambient Display 的服务)的唤醒锁覆盖。如果为
true
,即使没有用户活动,也会保持屏幕处于某种可显示状态。
mDrawWakeLockOverrideFromSidekick=false//屏保服务将屏幕亮度覆盖为一个固定值,计算亮度值,计算出来的值,存放在mDozeScreenBrightnessOverrideFromDreamManagerFloat中
mDozeScreenBrightnessOverrideFromDreamManager=5
//系统支持的最低屏幕亮度值(非常暗)
mScreenBrightnessMinimum=0.015625//系统支持的最高屏幕亮度值(最亮)。
mScreenBrightnessMaximum=1.0//系统的默认屏幕亮度值(40% 亮度)
mScreenBrightnessDefault=0.4//双击唤醒功能已禁用。由Settings.Secure.DOUBLE_TAP_TO_WAKE控制
mDoubleTapWakeEnabled=false//当前用户是主用户(0)。
mForegroundProfile=0
mUserId=0//MtkIpo 功能
sMtkIpoManagerService=null
sMtkIpoManagerServiceClass=null
3. states
//专注模式超时时间,-1表示未设置,是禁用的.
Attentive timeout: -1 ms
//是根据Attentive timeout的,此时为未设置
Sleep timeout: -1 ms//屏幕关闭超时设置为 10 秒
Screen off timeout: 10000 ms//屏幕变暗过程持续 2 秒。这表示在 10 秒超时的最后 2 秒,屏幕会逐渐变暗,然后完全关闭。
//Screen off timeout (10s) = 正常亮屏时间 (8s) + Screen dim duration (2s)
Screen dim duration: 2000 ms//changing 表示UID 的状态是否正在在变化.false 表示没有发生UID正在改变.
// changed 表示自上次检查以来没有发生变化
UID states (changing=false changed=false):
//UID的状态 ACTIVE/INACTIVE
count表示该UID当前持有的唤醒锁(WakeLock)的数量。
state值定义:
frameworks/base/core/java/com/android/internal/app/procstats/ProcessStats.java
STATE_NOTHING ~STATE_COUNT之间STATE_NOTHING ~STATE_COUNT之间
UID 1000: ACTIVE count=1 state=0
UID 1001: ACTIVE count=0 state=0
UID 1068: ACTIVE count=0 state=0
UID 1073: ACTIVE count=0 state=0
UID u0a40: INACTIVE count=0 state=15
UID u0a56: INACTIVE count=0 state=15
UID u0a62: INACTIVE count=0 state=14
UID u0a67: INACTIVE count=0 state=19
UID u0a89: ACTIVE count=0 state=5
UID u0a99: ACTIVE count=0 state=5
UID u0a101: INACTIVE count=0 state=19
UID u0a110: INACTIVE count=0 state=11
UID u0a111: ACTIVE count=0 state=4
UID u0a112: INACTIVE count=0 state=12
UID u0a113: ACTIVE count=0 state=5
UID u0a114: INACTIVE count=0 state=19
UID u0a116: INACTIVE count=0 state=15
UID u0a118: INACTIVE count=0 state=19
UID u0a122: ACTIVE count=0 state=7
UID u0a126: ACTIVE count=0 state=6
UID u0a144: ACTIVE count=0 state=5
UID u0a146: ACTIVE count=0 state=5
UID u0a150: ACTIVE count=0 state=4
UID u0a182: INACTIVE count=0 state=19
UID u0a183: ACTIVE count=0 state=5
UID u0a189: ACTIVE count=0 state=0Looper state:
// 电源管理服务运行在线程ID(tid)为54的专用线程上。
//这条消息计划在 12.977 秒后被处理 (
when=+12s977ms
)//
polling=true
: 消息循环正处于“轮询”状态,这是一种低功耗的等待模式,等待下一条消息到期。//
quitting=false
: 消息循环没有收到退出的指令,服务运行正常。Looper (PowerManagerService, tid 54) {75958}
Message 0: { when=+12s977ms what=4 target=android.os.Handler }
(Total messages: 1, polling=true, quitting=false)
4. Wake Locks
//size=1
: 当前系统中共有 1 个活跃的唤醒锁。Wake Locks: size=1
//类型: DOZE_WAKE_LOCK。这是一种特殊的唤醒锁,它允许设备在 Doze(打盹)状态下仍然保持有限的CPU活动能力,以便处理像屏保(Dream)、环境显示(Ambient Display)或重要网络连接等任务。它比全功能的 FULL_WAKE_LOCK 要省电得多
// 'dream:doze' 表示TAG 打印.
//-4h42m17s731ms 表示持有锁时间,已经有4个小时了.
//持有者的uid 和 pid.
DOZE_WAKE_LOCK 'dream:doze' ACQ=-4h42m17s731ms (uid=1000 pid=1370)//调用createSuspendBlocker创建SuspendBlocker的对象的集合个数
Suspend Blockers: size=5
//name名称,ref count 表示引用计数器,归零就是不挂起.
//[] : 记录引用的时间,这里是空,表示没有调用.
PowerManagerService.Booting: ref count=0 []
PowerManagerService.WakeLocks: ref count=0 []
PowerManagerService.Display: ref count=0 []
PowerManagerService.Broadcasts: ref count=0 []
PowerManagerService.WirelessChargerDetector: ref count=0 []//记录mDisplayPowerCallbacks 对象
Display Power: com.android.server.power.PowerManagerService$1@26a0ab1
Battery saving stats:
//省电模式当前状态是关闭的
Battery Saver is currently: OFF//自上次统计以来(通常是上次充满电后),打开省电模式的次数
Times full enabled: 0//自上次统计以来,打开“自适应省电模式”的次数
Times adaptive enabled: 0
Drain stats:
Battery saver OFF ON// 记录 noDoze 和 NonIntr 状态, 持续0分钟,
// 在BatterySaverState.OFF 下面的数据
//0mAh ,记录消耗电池电量的累计,offStat.totalBatteryDrain / 1000 ,数据来自mHealthInfo.batteryChargeCounterUah
//0%; 记录电池电量的等级,进行统计
//0.0mAh/h 计算每小时的数据: (double) totalBatteryDrain / (totalTimeMillis / (60.0 * 60 * 1000));
//第二组数据BatterySaverState.ON下面的数据
//0m 表示持续时间,为0分钟.
//0mAh ,记录消耗电池电量的累计,onStat.totalBatteryDrain / 1000 ,数据来自mHealthInfo.batteryChargeCounterUah
NonDoze NonIntr 0m 0mAh 0% 0.0mAh/h 0m 0mAh 0% 0.0mAh/hNonDoze Intr 3m 0mAh 0% 0.0mAh/h 0m 0mAh 0% 0.0mAh/h Deep NonIntr 0m 0mAh 0% 0.0mAh/h 0m 0mAh 0% 0.0mAh/h Deep Intr 0m 0mAh 0% 0.0mAh/h 0m 0mAh 0% 0.0mAh/h Light NonIntr 0m 0mAh 0% 0.0mAh/h 0m 0mAh 0% 0.0mAh/h Light Intr 0m 0mAh 0% 0.0mAh/h 0m 0mAh 0% 0.0mAh/h
5. Battery saver policy
//电池节省策略(需注意:这些策略仅在电池节省功能开启时生效)
Battery saver policy (*NOTE* they only apply when battery saver is ON):
//battery_saver_constants的KEY
//通过系统设置配置的策略值。值为空,表示使用默认值。
Settings: battery_saver_constants//对应的value. 此值为空,说明没有配置.
value://通过资源叠加(Resource Overlay)配置的策略值,通常由设备制造商(OEM)设置。 值为空,表示没有覆盖
//对应的key是Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS
Settings: (overlay)
value://key是DeviceConfig.NAMESPACE_BATTERY_SAVER
//通过 Android 的动态配置框架
DeviceConfig
下发的策略。N/A
表示未使用。
DeviceConfig: battery_saver
N/A//无障碍服务,false表示未启用
mAccessibilityEnabled=false//汽车投屏功能,false表示未启用
mAutomotiveProjectionActive=false//0 表示策略是关闭的.
//POLICY_LEVEL_OFF = 0;POLICY_LEVEL_ADAPTIVE = 1;POLICY_LEVEL_FULL = 2
譬如:策略:详情见:
https://blog.csdn.net/huibin147852369/article/details/135917427
static final Policy OFF_POLICY = new Policy(//对应屏幕亮度的控制,乘以因数,1表示不改变屏幕亮度.
1f, /* adjustBrightnessFactor *///电池节省功能是否启用的状态。该返回值会综合考虑策略中设置的广播启用状态(isEnabled),以便将此状态对外传播。
//LOCATION和SOUND进行限制
false, /* advertiseIsEnabled *///是否延迟执行完全备份
false, /* deferFullBackup *///否推迟键值(Key-value Backup)备份
false, /* deferKeyValueBackup *///否禁止window 动画。
false, /* disableAnimation *///是否禁用 AOD
false, /* disableAod *///在省电模式下是否禁用启动boost
false, /* disableLaunchBoost */
false, /* disableOptionalSensors */
false, /* disableVibration */
false, /* enableAdjustBrightness */
false, /* enableDataSaver */
false, /* enableFireWall */
false, /* enableNightMode */
false, /* enableQuickDoze */
false, /* forceAllAppsStandby */
false, /* forceBackgroundCheck */
PowerManager.LOCATION_MODE_NO_CHANGE, /* locationMode */
PowerManager.SOUND_TRIGGER_MODE_ALL_ENABLED /* soundTriggerMode */
);
mPolicyLevel=0
//默认full策略配置
Policy 'default full'
advertise_is_enabled=true
disable_vibration=false
disable_animation=false
defer_full_backup=true
defer_keyvalue_backup=true
enable_firewall=true
enable_datasaver=false
disable_launch_boost=true
enable_brightness_adjustment=false
adjust_brightness_factor=0.5
location_mode=3
force_all_apps_standby=true
force_background_check=true
disable_optional_sensors=true
disable_aod=true
soundtrigger_mode=1
enable_quick_doze=true
enable_night_mode=true
//当前full策略配置
Policy 'current full'
advertise_is_enabled=true
disable_vibration=false
disable_animation=false
defer_full_backup=true
defer_keyvalue_backup=true
enable_firewall=true
enable_datasaver=false
disable_launch_boost=true
enable_brightness_adjustment=false
adjust_brightness_factor=0.5
location_mode=3
force_all_apps_standby=true
force_background_check=true
disable_optional_sensors=true
disable_aod=true
soundtrigger_mode=1
enable_quick_doze=true
enable_night_mode=true
Policy 'default adaptive'
advertise_is_enabled=false
disable_vibration=false
disable_animation=false
defer_full_backup=false
defer_keyvalue_backup=false
enable_firewall=false
enable_datasaver=false
disable_launch_boost=false
enable_brightness_adjustment=false
adjust_brightness_factor=1.0
location_mode=0
force_all_apps_standby=false
force_background_check=false
disable_optional_sensors=false
disable_aod=false
soundtrigger_mode=0
enable_quick_doze=false
enable_night_mode=false
Policy 'current adaptive'
advertise_is_enabled=false
disable_vibration=false
disable_animation=false
defer_full_backup=false
defer_keyvalue_backup=false
enable_firewall=false
enable_datasaver=false
disable_launch_boost=false
enable_brightness_adjustment=false
adjust_brightness_factor=1.0
location_mode=0
force_all_apps_standby=false
force_background_check=false
disable_optional_sensors=false
disable_aod=false
soundtrigger_mode=0
enable_quick_doze=false
enable_night_mode=false
Policy 'effective'
advertise_is_enabled=false
disable_vibration=false
disable_animation=false
defer_full_backup=false
defer_keyvalue_backup=false
enable_firewall=false
enable_datasaver=false
disable_launch_boost=false
enable_brightness_adjustment=false
adjust_brightness_factor=1.0
location_mode=0
force_all_apps_standby=false
force_background_check=false
disable_optional_sensors=false
disable_aod=false
soundtrigger_mode=0
enable_quick_doze=false
enable_night_mode=false
6. Battery saver state machine:
//Android 省电模式(Battery Saver)状态机(State Machine)
Battery saver state machine:
//省电模式是否开启
Enabled=false//全面省电模式是否开启
full=false//自适应省电模式是否开启
adaptive=false//mState的值:
//STATE_UNKNOWN = 0;
//STATE_OFF = 1;
//STATE_MANUAL_ON = 2;
//STATE_AUTOMATIC_ON = 3;
//STATE_OFF_AUTOMATIC_SNOOZED = 4;
//STATE_PENDING_STICKY_ON = 5;
mState=1//mLastChangedIntReason的值如下,0 不仅仅表示REASON_PERCENTAGE_AUTOMATIC_ON,也有可能表示未定义,因为int本身默认值就是0
//配置如下:
//REASON_PERCENTAGE_AUTOMATIC_ON = 0;
//REASON_PERCENTAGE_AUTOMATIC_OFF = 1;
//REASON_MANUAL_ON = 2;
//REASON_MANUAL_OFF = 3;
//REASON_STICKY_RESTORE = 4;
//REASON_INTERACTIVE_CHANGED = 5;
//REASON_POLICY_CHANGED = 6;
//REASON_PLUGGED_IN = 7;
//REASON_SETTING_CHANGED = 8;
//REASON_DYNAMIC_POWER_SAVINGS_AUTOMATIC_ON = 9;
//REASON_DYNAMIC_POWER_SAVINGS_AUTOMATIC_OFF = 10;
//REASON_ADAPTIVE_DYNAMIC_POWER_SAVINGS_CHANGED = 11;
//REASON_TIMEOUT = 12;
//REASON_FULL_POWER_SAVINGS_CHANGED = 13;
mLastChangedIntReason=0//一般情况下是调用BatterySaverController.java::reasonToString 函数进行转换.
//null
表示没有记录或未改变。
mLastChangedStrReason=null//系统已完成启动
mBootCompleted=true//系统设置已加载完成。状态机可以读取到用户的省电模式配置了。
mSettingsLoaded=true//BatterySaverStateMachine.java::setBatteryStatus被调用
mBatteryStatusSet=true//设备是否被插着线,true 表示插着线,一般情况下,表示充电.
mIsPowered=true//电池电量
mBatteryLevel=100// 是否处于低电量
mIsBatteryLevelLow=false//"自动开启省电模式"的设置未启用(例如“在电量低于X%时自动开启”)。
0
表示禁用。// 获取值的方式
//automaticBatterySaverMode = getGlobalSetting(
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
mSettingAutomaticBatterySaver=0//省电模式是否打开
//代码:
//lowPowerModeEnabled = getGlobalSetting(
Settings.Global.LOW_POWER_MODE, 0) != 0;
mSettingBatterySaverEnabled=false//"粘性"省电模式状态。“粘性”模式指设备充电后,省电模式不会自动重新启用。
mSettingBatterySaverEnabledSticky=false//“粘性”模式的自动禁用功能
mSettingBatterySaverStickyAutoDisableEnabled=true//当电量达到 90% 时,自动禁用“粘性”省电模式。
mSettingBatterySaverStickyAutoDisableThreshold=90//自动触发省电模式的电量阈值设置为 0%。这通常也表示“禁用自动触发功能”。
mSettingBatterySaverTriggerThreshold=0//“粘性”行为是否被强制禁用。
mBatterySaverStickyBehaviourDisabled=false// 当处于"粘性"时,充电关闭省电模式,是否显示通知给用户
mBatterySaverTurnedOffNotificationEnabled=true//系统预设的默认禁用阈值。它的值是 80,表示当电池电量达到或超过 80% 时,动态电源节省功能应该被自动禁用。
mDynamicPowerSavingsDefaultDisableThreshold=80//实际生效的禁用阈值
mDynamicPowerSavingsDisableThreshold=80//动态电源节省功能是否启用
mDynamicPowerSavingsEnableBatterySaver=false//自适应省电模式上一次由外部原因改变状态的时间戳(
0
表示很久以前或从未发生)。
mLastAdaptiveBatterySaverChangedExternallyElapsed=0
7. AttentionDetector
//检测器
//负责检测用户当前是否正关注设备并向 {@link PowerManagerService} 发送用户活动应续期通知的类。
//在设置-->显示-->屏幕感知功能(看着屏幕市,屏幕不会关闭)
AttentionDetector:
//用户未开启此功能
//和Settings.Secure.ADAPTIVE_SLEEP 控制值有关
mIsSettingEnabled=false//如果持续检测到注意力,屏幕最多可保持常亮 15 分钟。
mMaxExtensionMillis=900000//如果开启,系统会在屏幕关闭前 2 秒开始检查注意力
mPreDimCheckDurationMillis=2000//变暗的延迟时间
mEffectivePostDimTimeout=0//最后一次用户活动时间戳
// 和下面的key 有关
//PowerManager.USER_ACTIVITY_EVENT_OTHER:
//PowerManager.USER_ACTIVITY_EVENT_BUTTON:
//PowerManager.USER_ACTIVITY_EVENT_TOUCH:
//PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY:
mLastUserActivityTime(excludingAttention)=72958152//设备硬件是否支持注意力检测服务(有所需的传感器或摄像头)。
mAttentionServiceSupported=true//当前是否发出注意力检测的请求
mRequested=false//没有多用户配置文件(Profile)处于活跃状态
Profile power states: size=0
//显示组用户活动
Display Group User Activity://显示组的ID(通常0代表主屏幕)。
displayGroupId=0//userActivitySummary 0x4 表示USER_ACTIVITY_SCREEN_DREAM
// 表示进入屏保状态
//userActivitySummary对应值如下:
//USER_ACTIVITY_SCREEN_BRIGHT = 1 << 0;
//USER_ACTIVITY_SCREEN_DIM = 1 << 1;
//USER_ACTIVITY_SCREEN_DREAM = 1 << 2;
userActivitySummary=0x4//最后一次用户活动时间戳。
lastUserActivityTime=72958152 (16939977 ms ago)//最后一次“不改变屏幕亮暗”的用户活动时间(例如在屏幕已关闭时按音量键)
//若屏幕已处于变暗状态,则延长变暗超时时长但不提高亮度。此标志适用于需要略微延长屏幕点亮时间却不引起视觉变化的场景(例如按下电源键时)。
lastUserActivityTimeNoChangeLights=389088 (89509042 ms ago)//唤醒锁类型:WAKE_LOCK_DOZE
//对应值如下:
//WAKE_LOCK_CPU = 1 << 0;
//WAKE_LOCK_SCREEN_BRIGHT = 1 << 1;
//WAKE_LOCK_SCREEN_DIM = 1 << 2;
//WAKE_LOCK_BUTTON_BRIGHT = 1 << 3;
//WAKE_LOCK_PROXIMITY_SCREEN_OFF = 1 << 4;
//WAKE_LOCK_STAY_AWAKE = 1 << 5; // only set if already awake
//WAKE_LOCK_DOZE = 1 << 6;
//WAKE_LOCK_DRAW = 1 << 7;
//WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE = 1 << 8;
mWakeLockSummary=0x40//无线充电检测器
Wireless Charger Detector State:
//GRAVITY 传感器.系统用于检测设备是否静止的重力传感器信息。
mGravitySensor={Sensor name="GRAVITY", vendor="MTK", version=1, type=9, maxRange=39.226803, resolution=0.0012, power=0.001, minDelay=10000}//设备是否通过无线充电
mPoweredWirelessly=false// 采集到的样本中显示设备处于非静止状态的计数。
//false 处于非静止状态
mAtRest=false//设备静止时的基准重力坐标。全0表示未初始化或未检测到静止状态。
mRestX=0.0, mRestY=0.0, mRestZ=0.0//当前是否在进行无线充电检测。
mDetectionInProgress=false//开始检测的时间,never 表示从未检测过
mDetectionStartTime=0 (never)//若设备处于静止状态时应更新静止位置,则为真
mMustUpdateRestPosition=false//已采集样本总数。
mTotalSamples=0
//采集到的样本中显示设备处于非静止状态的计数
mMovingSamples=0//保存关于首次采集样本的信息。
mFirstSampleX=0.0, mFirstSampleY=0.0, mFirstSampleZ=0.0
//最后一次采集数据
mLastSampleX=0.0, mLastSampleY=0.0, mLastSampleZ=0.0
8.Wake Lock Log
//Android 唤醒锁(WakeLock)活动日志
Wake Lock Log
//时间戳:
08-29 00:42:00.005
- 事件发生的具体时间//UID:
1000
- Linux用户ID。1000
代表系统核心进程,1001
代表电话相关核心进程。//进程名:
com.tinno.setupwizard
,com.android.mms.service
- 持有唤醒锁的进程名称。//动作:
//ACQ - 获取(Acquire) 唤醒锁。进程请求CPU保持唤醒。
//REL - 释放(Release) 唤醒锁。进程通知CPU可以重新进入睡眠了。//唤醒锁类型:*alarm*/ *telephony-radio*
//partial 表示 PowerManager.PARTIAL_WAKE_LOCK
08-29 00:42:00.005 - 1000 (com.tinno.setupwizard,...) - ACQ *alarm* (partial)
08-29 00:42:00.008 - 1000 (com.tinno.setupwizard,...) - REL *alarm*
08-29 00:42:08.814 - 1001 (com.android.mms.service,...) - ACQ *telephony-radio* (partial)
08-29 00:42:08.818 - 1001 (com.android.mms.service,...) - REL *telephony-radio*
08-29 00:42:08.818 - 1001 (com.android.mms.service,...) - ACQ *telephony-radio* (partial)
08-29 00:42:08.844 - 1001 (com.android.mms.service,...) - REL *telephony-radio*
08-29 00:42:08.845 - 1001 (com.android.mms.service,...) - ACQ *telephony-radio* (partial)
08-29 00:42:08.848 - 1001 (com.android.mms.service,...) - REL *telephony-radio*
08-29 00:43:00.005 - 1000 (com.tinno.setupwizard,...) - ACQ *alarm* (partial)
08-29 00:43:00.008 - 1000 (com.tinno.setupwizard,...) - REL *alarm*
08-29 00:44:00.002 - 1000 (com.tinno.setupwizard,...) - ACQ *alarm* (partial)....
-
//Events:
//含义:电源管理服务内部的事件缓冲区总共已经记录了 2779 个电源事件。
//这些事件包括:唤醒锁的获取/释放 (
ACQ
/REL
)、屏幕状态变化、用户活动事件、亮度变化、省电模式状态更改等等所有你在dumpsys power
输出中看到的活动。//Time-Resets含义:内部事件时钟已经被重置了 366 次.
//为什么会发生 Time-Reset? 电源事件日志使用一个单调递增的时间戳(通常基于
SystemClock.uptimeMillis()
)。为了节省存储空间,时间戳不会以完整格式存储每个事件。当系统检测到时间戳值变得非常大,或者为了处理系统时间被用户手动修改等情况时,它会执行一次“时间重置”,将内部时钟基准归零或调整,然后后续事件的时间戳再基于新的基准进行记录。Events: 2779, Time-Resets: 366
//缓冲区当前占用的空间大小(单位:字节)。
Buffer, Bytes used: 10239
9.Wakefulness Session Observer
//唤醒状态会话观察者
Wakefulness Session Observer:
//用于控制设备在无用户操作后到屏幕自动关闭的时间间隔(以毫秒为单位)
1800000
(30 分钟)//数据来自Settings.System.SCREEN_OFF_TIMEOUT
//mScreenOffTimeoutMs = Settings.System.getIntForUser(context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT,DEFAULT_SCREEN_OFF_TIMEOUT,
UserHandle.USER_CURRENT);
default timeout: 1800000//覆盖超时未设置(
-1
表示无效数据)。没有强制性的超时覆盖。//用户活动超时:屏幕超时覆盖时间(单位:毫秒)。
该值必须大于 0,否则无效值将不会应用于屏幕超时覆盖策略。
override timeout: -1//显示显示为主屏
Wakefulness Session Power Group powerGroupId: 0//wakefulness对应值,这里指的是DOZING
//WAKEFULNESS_ASLEEP = 0;
//WAKEFULNESS_AWAKE = 1;
//WAKEFULNESS_DREAMING = 2;
//WAKEFULNESS_DOZING = 3;
current wakefulness: 3//当前用户活动事件代码
//USER_ACTIVITY_EVENT_OTHER表示最后一次活动是一个内部事件(如屏保启动),而非明确的用户交互(如触摸)。
//activity event对应值:
//USER_ACTIVITY_EVENT_OTHER = 0;
//USER_ACTIVITY_EVENT_BUTTON = 1;
//USER_ACTIVITY_EVENT_TOUCH = 2;
//USER_ACTIVITY_EVENT_ACCESSIBILITY = 3;
//USER_ACTIVITY_EVENT_ATTENTION = 4;
//USER_ACTIVITY_EVENT_FACE_DOWN = 5;
//USER_ACTIVITY_EVENT_DEVICE_STATE = 6;
current user activity event: 0//当前用户活动状态已持续了约 25061 秒(约 6.96 小时)
current user activity duration: 25061483//上一次用户活动事件代码为 2 ,表示touch 事件
previous user activity event: 2//上一次用户活动状态持续了约 26866 秒(约 7.46 小时)
previous user activity duration: 26866551//用于跟踪覆盖超时(Override Timeout)的设置状态(即针对 SCREEN_TIMEOUT_OVERRIDE_WAKE_LOCK 的状态追踪)
//是否还存在持有flag:PowerManager.SCREEN_TIMEOUT_OVERRIDE_WAKE_LOCK
is in override timeout: false//面朝下检测器
//这个功能利用传感器(如加速度计)检测设备是否屏幕朝下放置,并可能触发省电行为(如关闭屏幕)。
FaceDownDetector:
//传感器检测到设备屏幕是否朝下
mFaceDown=false//面朝下检测功能当前未激活。这可能是因为功能被禁用,或当前场景不需要(如设备正在充电)。
mActive=false//最后一次屏幕朝下的检测时间
// 0表示自系统启动以来从未记录过翻转事件,或者是很久以前。
mLastFlipTime=0// sensor 参数,最大延迟时间为2秒
mSensorMaxLatencyMicros=2000000//在一次用户交互后,禁用面朝下检测的“冷却时间”为 60 秒
// 防止频繁操作
mUserInteractionBackoffMillis=60000//面朝下检测器上一次输出检测结果的时间戳
// 0表示没有检测过
mPreviousResultTime=0// 1表示UNKNOWN,有可能此值没有修改过.
//mPreviousResultType的值如下:
//SCREEN_OFF_RESULT=FrameworkStatsLog.FACE_DOWN_REPORTED__FACE_DOWN_RESPONSE__SCREEN_OFF;//4
//USER_INTERACTION=FrameworkStatsLog.FACE_DOWN_REPORTED__FACE_DOWN_RESPONSE__USER_INTERACTION;//3
//UNFLIP=FrameworkStatsLog.FACE_DOWN_REPORTED__FACE_DOWN_RESPONSE__UNFLIP;//2
//UNKNOWN=FrameworkStatsLog.FACE_DOWN_REPORTED__FACE_DOWN_RESPONSE__UNKNOWN;//1
mPreviousResultType=1// 记录当屏幕朝下,还剩下多长时间灭屏
mMillisSaved=0//屏幕朝下的Z 轴加速度阈值
mZAccelerationThreshold=-9.5//判断设备是否静止的加速度容差阈值
mAccelerationThreshold=0.2//判断状态所需的持续时间阈值,为1秒
mTimeThreshold=PT1S//强制启用覆盖开关
//默认值为 true,仅在收到明确禁用请求时才会关闭该功能。
mEnabledOverride=true
//环境显示抑制控制器
//投屏/屏幕镜像功能(如Cast, Miracast),视频模式等开启次抑制模式,防止其他显示打扰.
AmbientDisplaySuppressionController://环境显示功能当前未被抑制,可以正常运作(如果已启用)
ambientDisplaySuppressed=false//抑制令牌集合,它记录了是哪些系统组件请求了抑制环境显示。
mSuppressionTokens={}//低功耗待机控制器
// Low Power Standby Controller(低功耗待机控制器)的状态。这是一个为特定设备形态(如 IoT 设备、智能家居中枢、POS 机等)设计的、比标准 Android 省电模式(Battery Saver)或打盹(Doze)模式更严格、更激进的省电策略。
Low Power Standby Controller:
//低功耗待机模式当前未激活
mIsActive=false//低功耗待机功能未被启用。即使设备支持,用户或策略也没有打开它。
mIsEnabled=false//设备配置不支持低功耗待机模式
mSupportedConfig=false//默认配置为不启用
mEnabledByDefaultConfig=false//配置的待机超时时间为 0
mStandbyTimeoutConfig=0// 不启用自定义策略。低功耗待机模式使用系统默认的严格限制策略。
mEnableCustomPolicy=false//允许在低功耗待机模式下豁免的应用白名单为空。
Allowed UIDs=[]//白名单被允许的原因
UID allowed reasons://屏幕超时覆盖策略
ScreenTimeoutOverridePolicy:
//配置的覆盖超时值为 -1。这表示:
//1. 未配置默认的覆盖值。系统没有预设一个所有场景都强制使用的超时时间。
//2. 覆盖功能未被强制启用。应用或场景可以请求覆盖,但系统本身没有强加一个。// 数据:mScreenTimeoutOverrideConfig = context.getResources().getInteger(com.android.internal.R.integer.config_screenTimeoutOverride);
// 覆盖timeout的函数:ScreenTimeoutOverridePolicy.java::getScreenTimeoutOverrideLocked
mScreenTimeoutOverrideConfig=-1
//mLastAutoReleaseReason的值
// -1 表示UNKNOWN, 从来没有申请过.
---------------------------------------------------------------------------------------
reason 的code码:
/**
* Release reason code: The wake lock is never acquired.
*/
public static final int RELEASE_REASON_UNKNOWN = -1;/**
* Release reason code: The wake lock can't be acquired because of screen off.
*/
public static final int RELEASE_REASON_NON_INTERACTIVE = 1;/**
* Release reason code: Release because a screen lock is acquired.
*/
public static final int RELEASE_REASON_SCREEN_LOCK = 2;/**
* Release reason code: Release because user activity attention occurs.
*/
public static final int RELEASE_REASON_USER_ACTIVITY_ATTENTION = 3;/**
* Release reason code: Release because user activity other occurs.
*/
public static final int RELEASE_REASON_USER_ACTIVITY_OTHER = 4;/**
* Release reason code: Release because user activity button occurs.
*/
public static final int RELEASE_REASON_USER_ACTIVITY_BUTTON = 5;/**
* Release reason code: Release because user activity touch occurs.
*/
public static final int RELEASE_REASON_USER_ACTIVITY_TOUCH = 6;/**
* Release reason code: Release because user activity accessibility occurs.
*/
public static final int RELEASE_REASON_USER_ACTIVITY_ACCESSIBILITY = 7;----------------------------------------------------------------------------------------------------------------
mLastAutoReleaseReason=-1
//电源管理功能标志
PowerManagerFlags://是否提前屏幕超时检测器
enable_early_screen_timeout_detector: true (def:true)//是否优化唤醒锁的获取/释放延迟
improve_wakelock_latency: false (def:false)