June 5, 2019 Chromium 为了提升渲染性能,充分利用了 GPU 硬件加速,如 DOM 绘制,Canvas2D、WebGL,视频解码等,并设计了独立的 GPU 进程架构,在需要支持多种系统平台的情况下稳定运行(如Windows/MacOSX/Linux/Android等),设备 GPU 的兼容性显得尤为重要,这里基于 Chromium 源码,简单梳理一下其兼容降级逻辑的实现,主要包括两部分:GPU 特性降级和 GP U驱动 bug 兼容。 GPU 特性降级 Chromium 将使用 GPU 硬件加速的功能模块分为一个个 feature,包括常见的如 Canvas2D、WebGL、视频解码等 Canvas 2D:GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS WebGL 1.0:GPU_FEATURE_TYPE_ACCELERATED_WEBGL WebGL 2.0:GPU_FEATURE_TYPE_ACCELERATED_WEBGL2 视频硬件解码:GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE 详细的 feature 定义见源码:/gpu/config/gpu_feature_type.h 然后定义了一个针对这些特性的黑名单列表( /gpu/config/software_rendering_list.json ),其实是一个json格式的规则列表文件,如果当前设备上某个feature命中规则,则该feature对应的功能降级为软件渲染(如SwiftShader),规则列表由一个个entry组成,如 { "id": 106, "description": "GPU raster broken on ES2-only Adreno 3xx drivers", "cr_bugs": [480149],Continue reading “Chromium 的 GPU 兼容方案”