1 简介
显示能效管理组件是OpenHarmony电源管理子系统的一个组件,主要负责如下功能:
- 显示屏的亮/灭。
- 显示屏亮度调节。
- 获取显示状态。
本文主要分析获取显示状态功能,包括NAPI接口及功能实现的整个流程。
图1 电源管理子系统架构图
图2 显示能效管理组件架构图
2 显示能效管理组件代码目录
base/powermgr/display_manager
├── figures # 架构图
├── frameworks # FrameWork层
│ ├── napi # NAPI
│ └── native # Native层
├── interfaces # 接口层
│ ├── innerkits # 内部 APIs
│ └── kits # 外部接口 APIs
├── sa_profile # SA 配置文件
├── service # 服务层
│ ├── native # Native 层
│ └── zidl # zidl 接口层
├── test # 测试用例
└── utils # 工具和通用层
3 获取显示状态整体流程
图3 获取显示状态时序图
流程描述:
- JavaScript应用调用getState获取显示状态
- getState调用brightness.cpp注册的NAPI接口GetDisplayState,GetDisplayState会将获取显示屏亮度委托给DisplayPowerMgrClient对象的GetDisplayState方法
- GetDisplayState首先获取显示服务代理端DisplayPowerMgrProxy对象,然后调用DisplayPowerMgrProxy的GetDisplayState方法
- 显示服务代理端对象的GetDisplayState方法调用SendRequest向显示服务提供方DisplayPowerMgrService发送获取显示状态请求
- DisplayPowerMgrService通过父类DisplayPowerMgrStub的OnRemoteRequest方法收到获取显示状态请求后,调用父类DisplayPowerMgrStub的GetDisplayStateStub方法
- GetDisplayStateStub继续调用DisplayPowerMgrService的GetDisplayState方法
- GetDisplayState根据设备id找到对应的ScreenController对象,然后调用ScreenController对象的GetState方法
- ScreenController调用其自身的公共方法GetState方法,直接返回自身的私有成员变量state_,state_变量在构造ScreenController对象时默认设置为on状态,并且可通过ScreenController对象的公共方法UpdateState去改变
3.1 显示能效管理服务注册
- 调用System Ability的MakeAndRegisterAbility接口注册Display Power Manager Service实例
//rk3568/base/powermgr/display_manager/service/native/src/display_system_ability.cpp
REGISTER_SYSTEM_ABILITY_BY_ID(DisplaySystemAbility, DISPLAY_MANAGER_SERVICE_ID, true);
//rk3568/foundation/distributedschedule/safwk/interfaces/innerkits/safwk/system_ability.h
#define REGISTER_SYSTEM_ABILITY_BY_ID(abilityClassName, systemAbilityId, runOnCreate) \
const bool abilityClassName##_##RegisterResult = \
SystemAbility::MakeAndRegisterAbility(new