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是如何使用的。
Chromium編譯時,根據software_rendering_list.json,編譯生成相關的文件(software_rendering_list_autogen.cc)。
software_rendering_list_autogen.cc中定義了一個名爲“kSoftwareRenderingListEntries”的數組類型。該數組類型中,加入了json文件中定義的規則。
Chromium Gpu模塊的GpuBlacklist(gpu_blacklist.cc),在初始化時,使用kSoftwareRenderingListEntries這個數組。
Chromium中使用GpuBlacklist,進行GPU特性的判斷。