这是我的一个与远程浏览器隔离相关的实验项目。我试图在运行的 Chromium 实例中拦截 Skia 绘制命令,然后通过 CanvasKit(Skia 的 WebAssembly 版本)在客户端的不同浏览器实例中重播它们。
但是,我很难弄清楚在 Chromium 源代码中在哪里以及如何拦截这些绘制命令。非常感谢任何有关如何解决我的问题的建议!
在Chromium中,所有绘制操作都将记录在
DisplayItemList
中,您可以在blink模块中的类GraphicsContext
的定义中找到它。其次,这些记录的操作稍后会在CC
认为合适的时候重播。
在blink结束时,上述所有相关代码大部分都分散在
blink/renderer/platform/graphics/graphics_context.cc
及其相关文件中。但如果你将所有 Chromium 视为一个整体,所有图形事物都是由 CC (Chrome Compositor)
触发的,它维护一个状态机并运行由 Android 中系统的 vsync 信号触发的 draw frame
循环。在此循环开始时,闪烁结束draw
录制操作将被推送。在此循环结束时,合成帧的图像将被转换为一系列 GPU 操作,并调用系统的 GPU 设备相关的 API 来执行这些操作。 CC
相关代码文件可以
可以在 components/viz/
中找到。您应该阅读 Display
类的代码作为起始关键点。
我的观点来自版本
68
,你知道 Chromium 中的代码经常更改。所以我无法确认文件和位置仍然正确。
您能提供更多帮助吗? 我们对哪一类铬进行更改? 另外,通过chrome:tracing获得的trace.json不能用于捕获skia命令吗?