您当前的位置: 首页 > 技术文章 > 前端开发

高通hypervisor display框架解析

作者: 时间:2023-09-15阅读数:人阅读

高通hypervisor display的架构

下面这张图是高通文档上能看到的对于高通hypervisor的display显示框架,但是关于QNX和LA侧是如何交互的,好像没有找到相关的文档介绍。

高通hypervisor display框架解析(图1)

正好最近遇到了一些和display相关的问题,趁着这个档口稍微研究了下QNX和LA侧两边是怎么交互的

Hypervisor Display架构部分细节解析

下图是对前面那张图的细节补充

高通hypervisor display框架解析(图2)

 1,所有LA侧的APP与显示相关的调用最终都会交由SurfaceFlinger处理

2,SurfaceFlinger会最终调用android.hardware.graphics.composer@2.4-service服务

3,android.hardware.graphics.composer@2.4-service服务会调用Qcom的一些列库文件(很遗憾这些库源码是不开源的)

4,库文件最终调用LA侧的GPU驱动HGSL的ioctl接口

5,HGSL驱动中会调用hab通信接口与QNX侧的wfd_be服务进行通信

6,wfd_be服务会解析接收到的LA侧的数据包

7,根据数据包中的命令类型调用不同的openwfd接口,需要注意的是,这里的接口是做了一层转换的,举个例子wfdEnumerateDevices_Host,这个接口会进行转换之后真正调用wfdEnumerateDevices函数

8,所有的操作都执行完成之后,如果有必要会唤醒wfd_be的commit&vsync现场,通知openwfd刷新画面

更细节的框图:

高通hypervisor display框架解析(图3)

 

相关概念补充

有关commit:

在OpenWFD或者其他图形系统中,"commit"的概念通常指的是将一系列的更改或更新应用到图形系统,使得这些更改在屏幕上可见。

在你对系统做了一系列的更改后,例如更改了图形对象的属性,或者更改了绘制命令,这些更改在内存中进行,但并不会立即反映到屏幕上。这是因为立即更新屏幕会导致屏幕频繁刷新,这会消耗大量的系统资源,并且可能导致屏幕闪烁。因此,你可以在内存中做所有的更改,然后在完成所有更改后,通过调用"commit"操作,将这些更改一次性应用到屏幕上。

在OpenWFD中,有一个API函数叫做"wfdDeviceCommit",它的功能就是执行这个"commit"操作。当你调用这个函数时,所有之前对设备做的更改(例如设置设备属性或者更改端口模式)都会被应用,这些更改将会在下一次屏幕刷新时可见。

这种"commit"机制在许多图形系统中都很常见,包括OpenWFD和Wayland等,它们都使用这种机制来优化屏幕更新和减少资源使用。

有关vsync:

"VSync"是"垂直同步"的缩写,这是一种在计算机图形中常见的技术,用于解决屏幕撕裂(screen tearing)问题。屏幕撕裂是当计算机的图形处理器(GPU)输出的帧率超过显示器的刷新率时,一帧的上半部分和下半部分不同步,导致画面看起来像是被撕裂了一样。

垂直同步技术通过同步GPU的帧输出速度和显示器的刷新率来避免屏幕撕裂。具体来说,当启用VSync时,GPU会等到显示器完成一次完整的垂直刷新(从上到下更新所有像素)后,才开始渲染下一帧。这样可以确保在显示器每次刷新时,只有一帧数据被发送到显示器,避免了屏幕撕裂。

然而,垂直同步也有一些缺点。由于GPU需要等待显示器完成刷新,如果GPU的渲染速度非常快,这可能会导致GPU的性能没有得到充分利用。此外,如果GPU的帧率低于显示器的刷新率,用户可能会感觉到画面卡顿。因此,垂直同步是否启用,以及如何配置垂直同步,往往取决于具体的应用需求和硬件性能。

在OpenWFD中,可能有相关的API或设置用于控制垂直同步,但具体的实现和使用可能会根据不同的OpenWFD实现和硬件配置有所不同。

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:licqi@yunshuaiweb.com

标签: html5 前端
加载中~
如果您对我们的成果表示认同并且觉得对你有所帮助可以给我们捐赠。您的帮助是对我们最大的支持和动力!
捐赠我们
扫码支持 扫码支持
扫码捐赠,你说多少就多少
2
5
10
20
50
自定义
您当前余额:元
支付宝
微信
余额

打开支付宝扫一扫,即可进行扫码捐赠哦

打开微信扫一扫,即可进行扫码捐赠哦

打开QQ钱包扫一扫,即可进行扫码捐赠哦