现代 web 随便一个页面都会用到 GPU 加速功能?

212 天前
 abcbuzhiming
现在感觉随便开一个网页,都没涉及到什么游戏,视频之类的,就可以看到 GPU 的占用在往上跳。我想了解一下,现代 web 的渲染引擎它哪些地方,除了众所周知 webGL 这种肯定会调用 GPU 加速之外,还有哪里,会用 GPU 加速?
6307 次点击
所在节点    程序员
29 条回复
Biggoldfish
211 天前
@1360576570
Windows 7 在 2020 年就 EOL 了,花费 eng/bandwidth resource 去支持老旧系统得不偿失
liyafe1997
211 天前
现在浏览器哪怕渲染最基本的元素,DOM ,CSS ,就是你看到网页上的一切,只要 GPU 可用都会用 GPU 渲染出来,不是只有你看到 3D 才用 GPU 。Chrome 可以看 chrome://gpu ,Firefox 可以看 about:support

包括 Windows 桌面,从 Vista 开始的 WDM 都是由 GPU Direct3D 合成的了,因此能够引入 Aero 各种特效和动画,你试试拖动窗口啥的 GPU 占用也会上去。
totoro52
211 天前
你可以看下你的 QQ 音乐或者网易云,他们关掉 GPU 加速直接卡成翔
ysc3839
211 天前
@1360576570 @Biggoldfish
Win7 不支持的主要原因是浏览器一般都会用 DirectX Video Acceleration 等系统提供的、通用的、与硬件无关的硬解接口,这类接口要支持新的编码需要操作系统和硬件驱动都进行更新。因为种种原因,微软没给 Win7 加入新的编码支持,即使硬件和驱动支持,那也是用不了的。
mayli
211 天前
@kuanat 那为啥弹幕这个看起来很简单的行为,却需要这么复杂的计算呢?
就比如,为啥不能是一个 2D 应用,或者 css ,透明飘过一堆文字,这个对于浏览器来说应该不难吧。
kuanat
211 天前
@mayli #25

现代操作系统的显示逻辑是 C/S 架构的,应用程序也就是客户端会申请一块显示区域作为 client area 用于显示(相对应的 host area 一般是标题栏、边框这些)。

没有硬件加速的情况下,客户端区域就是各种界面库 API 或者文字 API 绘制,直接把绘制结果以像素的形式填充到客户端区域。操作系统的窗口合成器( compositor )把桌面上所有应用的显示区域做叠加合成,交给显卡完成最终显示。

有硬件加速的情况下,比如窗口中部分区域播放视频,客户端依旧会声明一块显示区域,但中间挖出一部分,并表示这部分不由客户端负责。窗口合成器也会忽略这一部分(但是还会判断遮挡关系),此时显卡的 framebuffer 就是两部分,一部分是窗口合成器给的去掉视频区域的显示数据,另一部分是视频解码单元给的视频数据。

上个回复里说 3D 其实不准确,因为所有最终的渲染都是走的 3D 单元。在显卡看来,3D 单元就是渲染单元。这个语境下的 2D 一般是指无加速,就是客户端把结果绘制完了,合成器直接拿像素数据,而 3D 有加速就是绘制 API 直接在显示区域上进行操作。这里细节我不是很确定,但大致思路就是浏览器把所有绘制 API 后端都用 3D 指令来实现了,整个浏览器内部就是一个巨大的 3D 显示,skia 文字渲染引擎也是 3D 指令在页面上显示文字。

我上个回复里描述的 3D 渲染行为,是根据风扇狂转推测的浏览器的行为。因为我是 Linux 用户,所以对硬件加速感知很深。每个浏览器都有自己如何用显卡硬件单元完成加速的实现逻辑,最终效率和性能也差别很大。目前 bili 的弹幕功能是基于 css3 的,之前有过基于 canvas 的版本但可能是因为效率问题弃用了。

目前 Firefox/Chrome/Chromium 三个浏览器的表现都是不一样的:

- Firefox 就是我上个帖子里说的模式,会调用视频解码单元,但对于 css3 的加速就很弱。从显卡资源占用上说,比较大可能就是没有优化,直接在透明层上叠加。

- Chrome 官方打包版本对于硬件加速支持很不稳定,有些版本正常有些版本就没了。

- Chromium 主要看发行版适配,官方源会打针对自己发行版的补丁。在解码器和补丁都正常的情况下,效果是最好的。首先视频本身还会走硬件解码,但是 css3 特效并非 3D 透明层,而是调用 video enhance 硬件单元。这个硬件单元的作用原本是用作视频播放去噪点、锐化等功能的,Chromium 的实现里 css3 相当于实时调整原视频,所以大幅降低了 3D 渲染单元的负载。
mayli
211 天前
@kuanat 感谢大佬,我大概明白了,这么看 video overlay 这个功能做起来还挺复杂的。
所以大概是视频解码不费劲,但是 css3 太费力了,费力程度跟渲染 ass 复杂字幕有一拼。
e3c78a97e0f8
210 天前
FireFox 字体渲染用的 Directwrite ,而这个东西是有 GPU 加速的,所以都不用 css ,只要有字就可能上 GPU

Chrome 就不清楚了,我猜不会比 FireFox 更保守
wxf666
210 天前
@kuanat #26 浏览器会利用系统的 DWM ,由其来单独合成普通页面与视频画面,而不是浏览器自己合成再提交?

放到 Windows 上说,就是利用了 DirectComposition ?

可这是 Win8 才引入的呀。。Win7- 是咋做到的呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1037103

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX