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应用调用getValue获取显示屏亮度
- getValue调用brightness.cpp注册的NAPI接口GetValue,GetValue会将获取显示屏亮度委托给DisplayPowerMgrClient对象的GetBrightness方法
- GetBrightness首先获取显示服务代理端DisplayPowerMgrProxy对象,然后调用DisplayPowerMgrProxy的GetBrightness方法
- 显示服务代理端对象的GetBrightness方法调用SendRequest向显示服务提供方DisplayPowerMgrService发送获取屏幕亮度请求
- DisplayPowerMgrService通过父类DisplayPowerMgrStub的OnRemoteRequest方法收到获取屏幕亮度请求后,调用父类DisplayPowerMgrStub的GetBrightnessStub方法
- GetBrightnessStub继续调用DisplayPowerMgrService的GetBrightness方法
- GetBrightness根据设备id找到对应的ScreenController对象,然后调用ScreenController对象的GetBrightness方法
- ScreenController对象的GetBrightness方法调用ScreenAction对象的GetBrightness方法
- ScreenAction对象的GetBrightness方法调用DisplayManager的GetScreenBrightness操控底层硬件实现显示屏的亮度获取。
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/syst