本文转载自 OpenHarmony TSC 官方微信公众号《峰会回顾第7期 | 视窗绘制技术演进和新趋势》
演讲嘉宾 | 陈秋林
回顾整理 | 廖 涛
排版校对 | 李萍萍
嘉宾简介
陈秋林,华为终端OS资深架构师、菲尔兹Lab主任,长期从事终端OS研发,先后负责LiteOS、安卓性能优化、HMS框架、OpenHarmony视窗系统等架构设计和技术开发。
文章内容来源
第一届开放原子开源基金会OpenHarmony技术峰会——OS内核及视窗分论坛
视频回顾
视频链接:峰会回顾第7期 | 视窗绘制技术演进和新趋势-陈秋林_哔哩哔哩_bilibili
正 文 内 容
视窗绘制是图形操作系统的基础能力,它决定终端应用图形界面的显示性能和质量,以及用户操作的响应快慢和流畅体验。在万物智联的新场景下,视窗绘制技术的发展有哪些挑战,技术上又有哪些演进趋势呢?华为终端OS资深架构师陈秋林在第一届OpenHarmony技术峰会上,分享了几点思考。
01►终端视窗绘制面临的新挑战
视窗系统(Windowing system/window system)是图形操作系统的重要子系统之一,负责将应用的功能界面以图形显示给用户,并支持用户对其通过触摸、键盘鼠标、语音等方式进行交互和操控。视窗系统由桌面环境、GUI框架、显示服务以及窗口管理器等4大部分组成,分别负责提供应用及其入口管理、应用开发框架和SDK、图形界面绘制和显示、窗口管理和操作控制等功能。
视窗系统
1.1►►高分辨率和高刷新率的普及,带来更高的 GUI 绘制挑战
视窗绘制的计算负载由屏幕分辨率、帧率以及画面质量等因素决定。随着终端软硬件发展,屏幕分辨率、帧率以及画面质量不断提升,视窗绘制负载不断升高。如6k分辨率@240Hz屏幕的视窗绘制负载比2k分辨率@60Hz增长30多倍。240Hz的刷新率要求CPU&GPU在4ms内完成一帧的绘制,屏幕分辨率每提升1倍,GPU负载和DDR带宽将提高4倍。
1.2►►跨设备协同和跨系统生态融合,对视窗的跨设备和跨系统能力提出挑战
万物智联新场景下,用户终端设备种类多,需要支持以用户中心的多设备协同体验。要求视窗系统提供分布式窗口的能力,以支持窗口级跨设备流转。此外,PC上不可避免生态兼容问题,如PC上要兼容Linux应用、windows应用或安卓应用。这要求视窗系统具备多源窗口融合管理的能力。这两方面体验与用户期望还存在较大差距,需要进一步思考在视窗系统上如何做创新。
1.3►►智能座舱等场景 2D/3D UI 融合,对视窗绘制提出新的性能挑战
目前,智能座舱的架构从“多芯多屏”向“一芯多屏”+“跨域融合”发展。该趋势下,上层应用将变得更加复杂:
(1)仪表域中2D仪表和3D酷炫车体融合显示;
(2)中控域360AR全景显示,2D菜单按钮与3D AR内容融合显示;
(3)HUD域显示信息与3D场景融合显示。
在硬件总体算力下降但视窗绘制负载大幅提升的情况下,视窗系统如何实现“一芯多屏”、2D/3D UI融合的流畅体验呢?
“一芯多屏”架构
1.4►►沉浸式场景,带来新的交互变化,对视窗提出新诉求。
沉浸式XR应用,与普通终端应用在显示和交互上均有显著区别。沉浸式应用面对的是2D、3D融合空间,需要用2D屏幕触控操控3D对象,操控点可能在三维空间或三维模型上的某一个不规则面上,如何确定操作对象呢?这涉及三维空间焦点定义问题。沉浸式场景,对视窗系统提出了虚实融合显示、3D空间新交互范式以及空间感知等新诉求。
多样化沉浸式设备
02►Linux、安卓和 iOS 视窗绘制架构的演进
2.1►►Linux 视窗架构
Linux视窗架构是围绕性能和生态兼容两条线演进的。早期使用X11协议进行图形渲染,后来采用DRI方式加速绘制,再到Wayland中将Render和窗口管理器集成在一起。在生态兼容方面,有Xwayland解决X11应用与Wayland的兼容,Glamor解决与图形API兼容等问题。
Linux视窗架构
2.2►►Android 视窗架构
Android视窗架构主要围绕性能演进。
第1阶段,即Android 3.0之前,使用CPU方式渲染UI;
第2阶段,即Android 4.0开始,开启硬件加速(GPU渲染);
第3阶段,即Android 4.1,引入VSYNC和Triple Buffer;
第4阶段,即Android 5.0,实现了Render线程和UI线程分离。
Android视窗架构主要特点:
(1)采用分离渲染架构,每个应用独立执行动画、渲染;
(2)采用多Buffer轮转,来尽量地规避丢帧卡顿现象;
(3)窗口管理和合成(SurfaceFlinger)分离;
(4)2D渲染由Skia图形库承载。
Android视窗架构
2.3►►iOS 视窗架构
iOS视窗架构的演进主要聚焦在Metal和AR上的创新,如基于Metal的MPS及AR Kit等。与Linux和安卓上的不同点:
(1)采用统一渲染架构,窗口内控件动效及跨窗口联动动效统一处理;
(2)近年来大力发展AR图形生态,以AR场景应用推动3D渲染技术演进,并通过各种Kit提供外挂式3D能力;
(3)围绕自研GPU及新一代Metal API进行垂直整合(软硬协同);
(4)各类SDK及开发工具深度整合,各个Kit间互操作性好,从底层能力到系统框架形成整体解决方案。
iOS视窗架构
总的来说,Linux视窗架构围绕性能和兼容性持续演进,Android视窗架构围绕性能演进,iOS视窗架构演进聚焦于统一渲染,垂直整合,与开发工具深度整合。
03►视窗绘制新技术和趋势
3.1►►高能效 GUI 绘制
以Android为主的当代视窗中,GUI绘制与显示管线的架构复杂,流程冗长,涉及多次进程间协同,并行化低,导致性能及功耗问题。此外,2D绘制的CPU与GPU间交互调用Driver Overhead高,GPU overdraw问题严重。针对上述传统2D管线现存问题,需探索数据驱动2D极简管线架构:CPU负责生成2D图元数据,通过绘制指令提交到GPU中,GPU对2D图元数据进行预处理、光栅化以及着色,实现高性能UI绘制。在实际的实验中,相比于传统2D管线,数据驱动2D极简管线的CPU负载下降50%+,同时大幅简化了GPU驱动。
数据驱动2D极简管线
3.2►►分布式窗口和异构窗口融合
多屏协同场景中,现有基于投屏的方案存在传输数据量大,功耗高、时延大以及帧率低等缺陷。需探索分布式窗口技术,拉通设备间的窗口运行环境,将用户界面窗口显示和应用逻辑解耦,实现窗口可在设备间自由流转,自适应新设备显示环境,且功耗/时延/刷新率优于投屏。此外,生态应用运行在虚拟机/容器中时,容器应用窗口与Host系统原生窗口没有统一管理,两者操控体验完全割裂,需要探索多源窗口融合技术,实现统一管理,体验一致。
异构窗口融合架构
3.3►►2D&3D 融合的 UI 框架
在车载智能驾驶舱场景,3D图形结合2D UI展示各种信息,为驾驶者提供准确和沉浸式驾驶体验已成为趋势。当前UI开发框架对2D&3D融合场景支持仍不足,主要表现为:OS视窗的GUI框架以支持2D界面开发为主,缺乏3D的动态光影效果和空间深度感;而纯3D界面开发框架(如Kanzi和各种游戏引擎框架)开发难度大,门槛高。因此,需进一步探索高性能、轻量化的2D&3D融合的UI框架,以实现2D&3D混合UI开发,需具备以下功能:
(1)提供3D场景控件,加载3D场景模型,支持真实性渲染;
(2)可将2D UI嵌入到3D场景,与3D模型子表面进行关联显示;
(3)支持将2D UI控件与3D场景属性双向关联;
(4)2D&3D渲染管线无缝切换。
2D&3D融合UI框架
3.4►►新一代人机交互及显示
在XR、Metaverse等新场景下,用户交互界面是3D空间,传统2D平面交互范式已无法适用。OS视窗需额外提供位姿、环境感知系统,虚实融合显示系统和新型UI组件。
人机交互及显示方案
总的来说,在未来新场景下,视窗架构需要围绕:(1)极简UI绘制管线;(2)分布式窗口,多源窗口融合;(3)2D&3D融合UI框架;(4)沉浸式场景的新的交互范式的4个趋势进行探索和演进。
04►总结
应用场景及用户需求的变化是视窗绘制技术演进的主要驱动力,期待大家一起关注和参与视窗绘制技术创新,共同助力OS视窗更好地使能万物互联新场景。