XXX芯片适配自动息屏分析
OH电源模块的基础知识介绍
社区官网电源资料电源模式定制开发指导
hidumper -s PowerManagerService -a -a 指令介绍
概述
本报告基于hidumper -s PowerManagerService -a -a命令输出的日志信息,对设备的电源管理状态进行全面分析。分析结果显示设备当前处于强制常亮状态,从未进入过休眠模式。
⚡️ 核心电源状态 (POWER STATE DUMP)
| 字段 (Field) | 值 (Value) | 详细解读 |
|---|---|---|
| Current State | AWAKE | 当前状态:唤醒态。设备屏幕亮起,CPU 全速运行,用户可交互。 |
| Reason | 0 | 进入该状态的原因代码(0 通常指默认或用户操作)。 |
| Time | 26070 | 当前状态持续时间(毫秒),即已保持唤醒约 26 秒。 |
| ScreenOffTime | Timeout=-1ms | 关键配置。-1 表示永不息屏(即"不休眠"模式),通常由应用或设置强制指定。 |
| OverrideTimeout | 1800000ms | 覆盖的超时时间设置,值为 1800 秒(30分钟)。 |
📜 详细状态历史 (DUMP DETAILS)
| 字段 (Field) | 值 (Value) | 详细解读 |
|---|---|---|
| Last Screen On | 3016123 | 上一次屏幕点亮的时间戳(系统启动后的相对时间)。 |
| Last Screen Off | 0 | 关键指标。值为 0 表示自系统启动以来,屏幕从未熄灭过。 |
| Last SuspendDevice | 0 | 设备从未进入过挂起(深度睡眠)状态。 |
| Last WakeupDevice | 0 | 设备从未发生过从休眠中唤醒的动作。 |
| Last Refresh | 3016122 | 电源管理服务上一次刷新状态的时间戳。 |
🔄 状态机详情 (DUMP EACH STATES)
日志列出了所有支持的电源状态,除 AWAKE 外,其余状态均未激活。
| 状态 (State) | 时间 (Time) | 原因 (Reason) | 解读 |
|---|---|---|---|
| AWAKE | 26070 | INIT | 当前活跃状态,由初始化触发。 |
| FREEZE / INACTIVE | 0 | INIT | 未进入过冻结或非活跃状态。 |
| STAND_BY / DOZE | 0 | INIT | 未进入过待机或打盹(浅睡眠)状态。 |
| SLEEP / HIBERNATE | 0 | INIT | 未进入过睡眠或休眠(深睡眠)状态。 |
| DIM | 0 | INIT | 未进入过屏幕变暗状态。 |
🔒 唤醒锁详情 (RUNNING LOCK DUMP)
这是导致设备不休眠的直接原因。当前共有 3 个活跃锁。
| 索引 | 类型 (Type) | 锁名称 (Name) | UID/PID | 详细解读 |
|---|---|---|---|---|
| 1 | BACKGROUND_TASK | StandbyRunningLock... |
1096/3784 | 后台任务锁。通常由系统服务持有,用于执行后台维护任务。 |
| 2 | SCREEN | PowerMgrKeepOnLock |
5528/3990 | 屏幕常亮锁(关键)。这是导致屏幕强制亮起、不息屏的主要原因。通常由视频应用、导航或"开发者选项-保持唤醒"触发。 |
| 3 | BACKGROUND_NOTIFICATION | timeServiceRunning... |
3819/3863 | 后台通知锁。用于处理后台通知或时间服务相关的任务。 |
📡 外设信息 (Peripherals Info)
| 字段 (Field) | 值 (Value) | 详细解读 |
|---|---|---|
| Proximity (Enabled) | 0 | 距离传感器功能当前未启用。 |
| Proximity (Status) | 0 | 传感器状态为 0(通常表示未检测到遮挡,即未贴近耳朵)。 |
📌 诊断总结
主要发现
- 设备现状:设备处于强制常亮状态,从未休眠。
- 根本原因:PID 为 3990 的进程持有了名为
PowerMgrKeepOnLock的 SCREEN 类型唤醒锁。
影响分析
- 电池消耗:由于屏幕被强制保持常亮,设备将比正常情况消耗更多电量。
- 设备温度:持续的CPU和屏幕活动可能导致设备温度升高。
- 用户体验:用户可能发现设备无法自动息屏,影响使用体验。
排查建议
- 检查应用:查找PID 3990对应的应用程序,可能是系统设置、视频播放器或桌面应用。
- 权限审查:确认该应用是否申请了"保持屏幕常亮"的权限。
- 用户设置:检查是否启用了"开发者选项"中的"保持屏幕常亮"功能。
- 应用行为:分析该应用为何需要保持屏幕常亮,是否存在优化空间。
解决方案
- 临时解决:强制停止持有屏幕锁的应用进程。
- 长期优化:修改应用代码,在不需要时及时释放屏幕唤醒锁。
- 系统设置:调整电源管理设置,确保符合用户使用习惯。
附录:术语解释
电源状态说明
- AWAKE:唤醒状态,设备完全可用
- DOZE:打盹模式,轻度省电模式
- SLEEP:睡眠模式,深度省电模式
- HIBERNATE:休眠模式,最低功耗状态
唤醒锁类型
- SCREEN:屏幕锁,防止屏幕熄灭
- BACKGROUND_TASK:后台任务锁,执行后台操作
- PROXIMITY_SCREEN_CONTROL:距离传感器锁
--
问题描述
XXX芯片在烧录后,重启电源在30秒左右息屏
基础情况
已经通过默认配置,将电源状态统一设置为永不息屏状态
问题分析
- 烧录后首次不会出现10秒钟息屏问题,重启后才会出现息屏说明是初始化后的应用&系统服务启动设置的
首次烧录后通过指令查看当前的电源状态
```
OHOS#hidumper -s PowerManagerService -a -a
-------------------------------[ability]-------------------------------
----------------------------------PowerManagerService----------------------------------
POWER STATE DUMP:
Current State: AWAKE Reason: 0 Time: 25277
ScreenOffTime: Timeout=-1ms
DUMP DETAILS:
Last Screen On: 219600
Last Screen Off: 0
Last SuspendDevice: 0
Last WakeupDevice: 0
Last Refresh: 219600
DUMP EACH STATES:
State: AWAKE Reason: INIT Time: 25277
Failure: INIT Reason: From: AWAKE Time: 0
State: FREEZE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: INACTIVE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: STAND_BY Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: DOZE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: SLEEP Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: HIBERNATE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: SHUTDOWN Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: DIM Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
RUNNING LOCK DUMP:
totalSize=3 validSize=0
Summary By Type:
SCREEN: 0
PROXIMITY_SCREEN_CONTROL: 0
BACKGROUND_PHONE: 0
RUNNINGLOCK_COORDINATION: 0
BACKGROUND_NOTIFICATION: 0
BACKGROUND_AUDIO: 0
BACKGROUND_SPORT: 0
BACKGROUND_NAVIGATION: 0
BACKGROUND_TASK: 0
BACKGROUND_USER_IDLE: 0
Dump Lock List:
index=1 time=206632 type=BACKGROUND_TASK name=StandbyRunningLock_21244 uid=1096 pid=3786 state=0
index=2 time=130608 type=BACKGROUND_NOTIFICATION name=timeServiceRunningLock_97279 uid=3819 pid=3872 state=0
index=3 time=202129 type=SCREEN name=PowerMgrKeepOnLock uid=5528 pid=4057 state=0
Dump Proxy List:
ProcessIndex=1 pid_uid=3786_1096 lock_cnt=1
lockIndex=1workSourceSize=0*proxyCount=0
ProcessIndex=2 pid_uid=3872_3819 lock_cnt=1
lockIndex=1workSourceSize=0*proxyCount=0
ProcessIndex=3 pid_uid=4057_5528 lock_cnt=1
lockIndex=1workSourceSize=0****proxyCount=0
Peripherals Info:
Proximity: Enabled=0 Status=0
当前状态系统电源模式为永不息屏状态。
2. 烧录后重启停在开机向导界面没有进入系统,不会出现30秒后自动息屏,打开设置后重启(设置有配置电源模式的选项),发现单板在10秒钟后息屏,使用指令查看异常状态下的电源状态。
PS C:\Users\tjw\Desktop> hdc shell
OHOS#hidumper -s PowerManagerService -a -a
-------------------------------[ability]-------------------------------
----------------------------------PowerManagerService----------------------------------
POWER STATE DUMP:
Current State: AWAKE Reason: 0 Time: 25575
ScreenOffTime: Timeout=30000ms
DUMP DETAILS:
Last Screen On: 25574
Last Screen Off: 0
Last SuspendDevice: 0
Last WakeupDevice: 0
Last Refresh: 0
DUMP EACH STATES:
State: AWAKE Reason: INIT Time: 25575
Failure: INIT Reason: From: AWAKE Time: 0
State: FREEZE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: INACTIVE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: STAND_BY Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: DOZE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: SLEEP Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: HIBERNATE Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: SHUTDOWN Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
State: DIM Reason: INIT Time: 0
Failure: INIT Reason: From: AWAKE Time: 0
RUNNING LOCK DUMP:
totalSize=2 validSize=0
Summary By Type:
SCREEN: 0
PROXIMITY_SCREEN_CONTROL: 0
BACKGROUND_PHONE: 0
RUNNINGLOCK_COORDINATION: 0
BACKGROUND_NOTIFICATION: 0
BACKGROUND_AUDIO: 0
BACKGROUND_SPORT: 0
BACKGROUND_NAVIGATION: 0
BACKGROUND_TASK: 0
BACKGROUND_USER_IDLE: 0
Dump Lock List:
index=1 time=6232 type=SCREEN name=PowerMgrKeepOnLock uid=1101 pid=0 state=0
index=2 time=10748 type=BACKGROUND_TASK name=StandbyRunningLock_21695 uid=1096 pid=3791 state=0
Dump Proxy List:
ProcessIndex=1 pid_uid=0_1101 lock_cnt=1
lockIndex=1workSourceSize=0*proxyCount=0
ProcessIndex=2 pid_uid=3791_1096 lock_cnt=1
lockIndex=1workSourceSize=0*proxyCount=0
Peripherals Info:
Proximity: Enabled=0 Status=0
通过此段信息可以当前的默认息屏时间已经改变30秒
通过上述两段基础信息的分析,可以得出默认配置未能生效,查看单板的默认配置信息,发现有两个配置文件,查看系统的配置文件
./system/etc/power_config/power_mode_config.xml
./vendor/etc/power_config/power_mode_config.xml
system/etc/power_config/power_mode_config.xml的配置文件内容为:
rm -rf data
重启后执行复现步骤,问题未复现
## 查看源代码
namespace {
const std::string TAG_ROOT = "switch_policy";
const std::string POWER_MODE_CONFIG_PATH = "etc/power_config/power_mode_config.xml";
const std::string VENDOR_POWER_MODE_CONFIG_PATH = "/vendor/etc/power_config/power_mode_config.xml";
const std::string SYSTEM_POWER_MODE_CONFIG_PATH = "/system/etc/power_config/power_mode_config.xml";
constexpr uint32_t SLEEP_FILTER = SLEEP_FILTER_VALUE;
}
PowerSaveMode::PowerSaveMode()
{
POWER_HILOGD(FEATURE_POWER_MODE, "Start to parse power_mode_config.xml");
char buf[MAX_PATH_LEN];
char* path = GetOneCfgFile(POWER_MODE_CONFIG_PATH.c_str(), buf, MAX_PATH_LEN);
if (path != nullptr && *path != '\0') {
if (!StartXMlParse(path)) {
POWER_HILOGE(FEATURE_POWER_MODE, "policy config file power_mode_config.xml err");
}
return;
}
if (!StartXMlParse(VENDOR_POWER_MODE_CONFIG_PATH)) {
POWER_HILOGI(FEATURE_POWER_MODE, "No vendor power_mode_config.xml, start to parse system config");
StartXMlParse(SYSTEM_POWER_MODE_CONFIG_PATH);
}
}
通过查看源码可以看出,优先读取POWER_MODE_CONFIG_PATH 路径下的配置,hdc 连接上单板之后etc/power_config/power_mode_config.xml下的配置文件内容与/system/etc/power_config/power_mode_config.xml的相同,修改
更多推荐
所有评论(0)