这是我的一个与远程浏览器隔离相关的实验项目。我正在尝试拦截 Skia在正在运行的 Chromium 实例中绘制命令,然后通过 CanvasKit 在客户端的不同浏览器实例中重放它们,Skia 的 WebAssembly 构建。
但是,我很难弄清楚在 Chromium 源代码中在哪里以及如何拦截这些绘制命令。非常感谢有关如何解决我的问题的任何建议!
最佳答案
在 Chromium 中,所有绘制操作都将记录在 DisplayItemList
中。您可以在类 GraphicsContext
的定义中找到它在闪烁模块中。其次,这些记录的操作稍后会在 CC
时重放。认为是时候了。
在blink结束时,上面相关代码的所有东西大部分都分散在blink/renderer/platform/graphics/graphics_context.cc
中。及其相关文件。但是如果你把所有的 Chromium 看成一个整体,所有的图形都是由 CC (Chrome Compositor)
触发的。维护状态机并运行 draw frame
Android 中由系统的 vsync 信号触发的循环。在此循环开始时,闪烁结束 draw
录制操作将被推送。在此循环结束时,合成帧的图像将被转换为一系列 GPU 操作,并调用系统的 GPU 设备相关 API 来执行这些操作。 CC
相关代码文件可以
可在 components/viz/
中找到.你应该阅读类 Display
的代码作为一个起点。
我的意见来自版本68
并且您知道 Chromium 中的代码经常更改。所以我无法确认文件和位置仍然正确。
关于browser - 如何拦截来自 Chromium 浏览器的 Skia 绘图命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60293524/