骁龙和 Qualcomm 品牌产品是 Qualcomm Technologies, Inc.和/或其子公司的产品。
Co-written by Jessica Zhang and Abhinav Kumar
Jessica Zhang 和 Abhinav Kumar 共同撰写
本文与 Jessica Zhang 和 Abhinav Kumar 在X.Org 2023 年度开发者大会(XDC 2023)上的演讲同步。二人在 Qualcomm 创新中心 (QUIC) 担任工程师。
显示硬件消耗大量的电量。我们知道开发人员想方设法降低功耗,所以,本文将介绍一种专为 Qualcomm Technologies 硬件设计的实心填充平面优化方案。
实心填充平面可以直接在屏幕上显示单色图层(实心填充),无需从内存提取,从而降低功耗。目前,Linux 内核未向用户开放此功能,虽然某些用户空间合成器(如 Android 硬件合成器 HAL)支持将特定平面标记为实体填充。为解决这一问题,我们发布了系列补丁,允许用户利用此优化方案来降低功耗,并在特定显示器使用场景中降低开销。
实心填充平面和节能潜力
以下屏幕截图显示了两种常见的移动应用 UI:
目前,这种应用 UI 的每一层都需要作为帧缓冲存储在内存中,并通过驱动程序提取,再显示在屏幕上,因此,需要功耗较大。
Qualcomm® 显示处理单元(DPU)可以跳过此内存提取步骤,使用硬件优化来降低显示单色(实心填充)层时的功耗。
在上面的屏幕截图中,阴影区域表示应用程序可以利用实心填充优化的部分,从而有可能降低功耗。
Qualcomm Technologies 硬件背景
Qualcomm Technologies 显示管道接受纯色作为直接渲染管理器(DRM)平面的有效输入。为说明 Qualcomm Technologies 显示架构如何支持优化,下图介绍了 DPU 中的硬件模块:
- SSPP–源表面处理器管道
- DSPP–目标表面处理器管道
- DSI–显示串行接口
- DP–DisplayPort
SSPP 是一个硬件块,从内存中有效提取一个图层,显示在屏幕上。对于单一颜色的图层,可以对其进行编程,自动以纯色填充图层,而无需从内存中提取。
使用软件实现优化
对于“实心填充平面支持”系列补丁,我们的目标是通过添加两个 DRM 属性,更改原子性提交的行为,将这些功能暴露给用户空间。
首先,我们添加了“pixel_source”平面属性,放松原子性提交检查,允许 NULL 帧缓冲区。目前,DRM 原子性提交调用栈要求平面具有非NULL 帧缓冲区,其中包含必要的显示信息(如格式、像素数据等)。新的“pixel_source”属性和对原子性提交检查的更改,允许 DRM 框架接受帧缓冲区之外的像素数据源。
最后,我们在DRM框架中引入了“solid_fill”平面属性。这是一种 blob 类型属性,仅包含一个 32 位/通道 RGB 值。当像素源属性设置为“solid_fill”并且使用正确的颜色信息设置了实心填充 blob 属性后,Qualcomm Technologies 显示管道将被配置成显示实心填充平面,而不使用内存提取。
结合使用这两个属性将禁用内存提取,生成的平面将显示 solid_fill blob 指定的颜色,如下图所示:
潜在的节能效果
下表总结了上述移动应用程序优化方案带来的一般节能效果:
我们使用两个功耗指标:
- 双倍数据速率(DDR)功率–维持适当的 DDR 频率所需的功率。如果不使用内存提取,DDR 进入低功耗模式可节省电能。
- 内存总线流量–虚拟总线接口(VBIF)与 DDR 之间的流量。
“Messenger”和“Chrome”行代表电流(单位:mA)和应用功率(单位:mW)的常规(无实心填充)水平。带有“-split”后缀的行表示将显示拆分为实心填充层和非实心填充层的模拟应用消耗的电流和应用程序功率。
在上述使用场景下,节能范围从1%(蓝框)-32%(绿框)不等。
下一步
请查看此系列补丁中的“实心填充平面支持”补丁,并阅读有关补充解释的历史记录。另外,您也可以观看 XDC 2023 的简短演示视频“启用实心填充平面”。
我们希望这一优化能够激发对 Qualcomm DP 更多驱动程序优化的兴趣和讨论。