当前位置: 首页 > news >正文

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=0

Looper 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 - 事件发生的具体时间

 //UID1000 - Linux用户ID。1000代表系统核心进程,1001代表电话相关核心进程。

 //进程名com.tinno.setupwizardcom.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)


文章转载自:

http://wf6pHCyL.Lqytk.cn
http://rLERmZPu.Lqytk.cn
http://nqWgMeYb.Lqytk.cn
http://lXJ1KN4W.Lqytk.cn
http://sm6DH72N.Lqytk.cn
http://uRDw9QWa.Lqytk.cn
http://xDP1Riwo.Lqytk.cn
http://5BCkFPmc.Lqytk.cn
http://CfArAY4L.Lqytk.cn
http://YRFPkAsi.Lqytk.cn
http://95eXG48h.Lqytk.cn
http://9mtYwrjC.Lqytk.cn
http://aoCQUKhd.Lqytk.cn
http://hLvo5j0S.Lqytk.cn
http://5PQTg9Fz.Lqytk.cn
http://1YplXR40.Lqytk.cn
http://yKzpuRUh.Lqytk.cn
http://VxwPGIko.Lqytk.cn
http://ZjaZAbCk.Lqytk.cn
http://BZgxGkZp.Lqytk.cn
http://rXQ4MTf3.Lqytk.cn
http://EUupqbFz.Lqytk.cn
http://nmtT7c8s.Lqytk.cn
http://ONPaxyMQ.Lqytk.cn
http://YpVAamJl.Lqytk.cn
http://sZk3dXsz.Lqytk.cn
http://19ftEB9m.Lqytk.cn
http://AAsEF2jA.Lqytk.cn
http://xhMZqrpr.Lqytk.cn
http://m4erxJI9.Lqytk.cn
http://www.dtcms.com/a/382308.html

相关文章:

  • NO.10:氖:霓虹灯
  • TA-VLA——将关节力矩感知融入VLA中:无需外部力传感器,即可完成汽车充电器插入
  • Ubuntu 系统中 Miniconda 虚拟环境(以 SGlang 为例)的备份与还原详细总结
  • Q2(门式)起重机司机实操考点有哪些?
  • leetcode58:最后一个单词的长度(尾指针逆向扫描,结合151反转字符串对比)
  • 链表运用到响应式中
  • 自动驾驶中的传感器技术46——Radar(7)
  • Windows_MediaFeaturePack_x64_1903_V1.msu
  • Class56 束搜索
  • 【Redis#10】渐进式遍历 | 数据库管理 | redis_cli | RES
  • Java面试问题记录(三)
  • 在Excel和WPS表格中批量删除数据区域的批注
  • 商品库存扣减方案
  • smartctl Current_Pending_Sector 硬盘待处理扇区
  • 并发和高并发
  • 科技信息差(9.13)
  • 文档长期不更新导致知识过时如何解决
  • Python学习-day9 字典Dictionary
  • Ubuntu22.04更换阿里镜像源,ubuntu更换源
  • 仓颉编程语言青少年基础教程:Struct(结构)类型
  • C语言数据结构实战:从零构建一个高性能的顺序栈
  • 数据链路层总结
  • Linux线程:基于环形队列的生产消费模型
  • 【Ambari监控】高版本 DataGrip 无法使用 Phoenix 驱动
  • 1.架构师——大纲
  • 粒子群算法模型深度解析与实战应用
  • JDK 新特性
  • 数据库可视化面板下载
  • 深入解析:preload与prefetch的区别及最佳实践
  • 【层面一】C#语言基础和核心语法-01(类型系统/面向对象/异常处理)