【Chromium】Gpu SoftWareRenderList

本文解析了Chrome浏览器如何通过Chromium内核中的SoftWareRenderList,判断并关闭特定的GPU特性。介绍了software_rendering_list.json文件的作用,以及Chromium如何在编译时生成software_rendering_list_autogen.cc,用于GpuBlacklist模块的GPU特性判断。

Chromium Gpu SoftWareRenderList

  • Chrome可以通过访问 chrome://gpu,查看当前浏览器 Gpu特性。信息大体如下
Graphics Feature Status
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
Native GpuMemoryBuffers: Software only. Hardware acceleration disabled
Out-of-process Rasterization: Disabled
Hardware Protected Video Decode: Unavailable
Rasterization: Hardware accelerated
Skia Deferred Display List: Disabled
Skia Renderer: Disabled
Surface Synchronization: Enabled
Video Decode: Hardware accelerated
Viz Service Display Compositor: Disabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
...
  • 可以看出,某些Gpu特性是关闭(Disable)的。
  • 那么Chrome,是如何判断关闭哪些GPU特性?
    Chrome使用Chromium内核,Chromium内核的GPU模块中,定义了一张SoftWareRender表。Chromium通过该表,判断是否将某些GPU特性加入到黑名单(Disable)中。
SoftWareRenderList
  • 代码路径:chromium/src/gpu/config/software_rendering_list.json。该文件中,使用Json,定义了一系列需要加入到黑名单中的GPU特性。
  • 下面为部分代码:id53,对于Intel GMA500,关闭flash_stage3d GPU Feature。
{
      "id": 53,
      "description": "The Intel GMA500 is too slow for Stage3D",
      "cr_bugs": [152096],
      "vendor_id": "0x8086",
      "device_id": ["0x8108", "0x8109"],
      "features": [
        "flash_stage3d"
      ]
    },
  • 原理:这里简单说一下,这个json文件,Chromium是如何使用的。
  1. Chromium编译时,根据software_rendering_list.json,编译生成相关的文件(software_rendering_list_autogen.cc)。
  2. software_rendering_list_autogen.cc中定义了一个名为“kSoftwareRenderingListEntries”的数组类型。该数组类型中,加入了json文件中定义的规则。
  3. Chromium Gpu模块的GpuBlacklist(gpu_blacklist.cc),在初始化时,使用kSoftwareRenderingListEntries这个数组。
  4. Chromium中使用GpuBlacklist,进行GPU特性的判断。
### Chromium 浏览器中的 GPU 调用 #### GPU 加速概述 现代浏览器如 Chromium 使用图形处理单元 (GPU) 来加速各种操作,这不仅提高了性能还改善了用户体验。通过利用 GPU 进行硬件加速,许多原本由 CPU 处理的任务被转移到更高效的专用硬件上执行。 #### 主要的 GPU 调用场景 ##### 渲染管道中的 GPU 应用 在渲染过程中,Chromium 可能会调用 GPU 执行以下任务: - **页面布局与绘制**:对于复杂的 HTML 和 CSS 结构,尤其是涉及大量动画效果的内容,GPU 将参与计算并呈现最终图像[^3]。 - **视频解码/编码**:播放高质量视频文件时,通常需要大量的浮点运算来完成编解码工作,这部分工作交给 GPU 完成能够显著减轻 CPU 的负担[^5]。 ##### WebGL 支持下的 3D 绘图功能 WebGL 是一种 JavaScript API,允许开发者创建交互性的三维图形内容。当网站使用 WebGL 技术开发应用或游戏时,Chromium 需要频繁地请求 GPU 提供支持以实现高效渲染。 ```javascript // 创建一个 WebGL 上下文对象用于绘图 var canvas = document.getElementById('myCanvas'); var gl = canvas.getContext('webgl'); if (!gl) { console.error('无法初始化 WebGL!'); } else { // 开始使用 WebGL 进行绘图... } ``` ##### 硬件光栅化(Hardware Rasterization) 这是指直接在 GPU 中进行绘制和光栅化的技术,即填充像素的过程发生在 GPU 内存中而不是先传输回 CPU 再做进一步处理。这种方法减少了数据交换带来的延迟,并且充分利用了 GPU 并行计算的优势。 #### CEF 对 GPU 利用的影响 尽管 Chromium Embedded Framework (CEF) 基于 Chromium 构建并且继承了许多特性,但在某些方面表现不如预期。特别是关于 GPU 硬件加速的支持存在问题——由于 CEF 版本更新滞后以及架构设计原因,导致其对 GPU 访问效率较低,在特定情况下甚至会出现严重的性能瓶颈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值