3,302
社区成员




实心填充平面可以通过直接在屏幕上显示单色层(实心填充)而不是从内存中获取来降低功耗。目前,Linux 内核并未向用户公开此功能,尽管某些用户空间合成器(例如 Android 硬件合成器 HAL)支持将特定平面标记为实体填充。为了解决这个问题,我们发布了一系列补丁,允许用户利用此优化来降低功耗并减少特定显示用例中的开销,Qualcomm® 显示处理单元 (DPU) 可以通过跳过此内存获取步骤,使用硬件优化来降低显示单色(实心填充)层时的功耗。在“实体填充平面的支持”补丁系列中,我们的目标是通过添加两个 DRM 属性并更改原子提交的行为来向用户空间公开这些功能。
首先,我们添加了“pixel_source”平面属性并放宽了原子提交检查以允许 NULL 帧缓冲区。目前,DRM原子提交调用堆栈要求平面具有非NULL帧缓冲区,其中包含必要的显示信息(例如格式、像素数据等)。新的“pixel_source”属性和对原子提交检查的更改将允许 DRM 框架接受帧缓冲区外部的像素数据源。
最后,我们向 DRM 框架引入了“solid_fill”平面属性。这是一个 blob 类型属性,仅包含每通道 32 位的 RGB 值。当像素源属性设置为“solid_fill”并且使用正确的颜色信息设置实心填充斑点属性时,Qualcomm Technologies 显示管道将配置为显示实心填充平面,而不使用内存获取。我们使用两个功耗指标:
双倍数据速率 (DDR) 电源 – 维持正确 DDR 频率所需的电源。节能来自于在没有内存读取时 DDR 进入低功耗模式。
内存总线流量 – 虚拟化总线接口 (VBIF) 和 DDR 之间的流量。
“Messenger”和“Chrome”行代表电流(以 mA 为单位)和应用程序功率(以 mW 为单位)的常规(无固体填充)水平。带有“-split”后缀的行表示模拟应用程序的当前和应用程序功率,将显示拆分为实心填充层和非实心填充层。
在这些用例中,节能范围从 1%(蓝框)到 32%(绿框)不等。