峰会回顾第 7 期 | 视窗绘制技术演进和新趋势
本文转载自 OpenHarmony TSC 官方微信公众号《峰会回顾第7期 | 视窗绘制技术演进和新趋势》
演讲嘉宾 | 陈秋林
回顾整理 | 廖 涛
排版校对 | 李萍萍
嘉宾简介
陈秋林,华为终端 OS 资深架构师、菲尔兹 Lab 主任,长期从事终端 OS 研发,先后负责 LiteOS、安卓性能优化、HMS 框架、OpenHarmony 视窗系统等架构设计和技术开发。
文章内容来源
第一届开放原子开源基金会 OpenHarmony 技术峰会——OS 内核及视窗分论坛
视频回顾
正 文 内 容
视窗绘制是图形操作系统的基础能力,它决定终端应用图形界面的显示性能和质量,以及用户操作的响应快慢和流畅体验。在万物智联的新场景下,视窗绘制技术的发展有哪些挑战,技术上又有哪些演进趋势呢?华为终端 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 视窗更好地使能万物互联新场景。
评论