browser - 如何拦截来自 Chromium 浏览器的 Skia 绘图命令

标签 browser chromium webassembly skia

这是我的一个与远程浏览器隔离相关的实验项目。我正在尝试拦截 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/

相关文章:

c# - 如何打开两个单独的(默认)浏览器窗口而不是新选项卡

javascript - 内容脚本中的监听器

c++ - 如何在 Chromium Embedded Framework (CEF) 中获取 JS 对象?

c++ - 浏览器中的多线程 WebAssembly 比单线程慢,为什么?

javascript - 如何访问并呈现 Safari 扩展中打开的选项卡的可见内容?

java程序在浏览器中打开网页并将一些数据发布到打开的页面中

javascript - 我可以使用 emscripten 在 i386 模式下编译应用程序吗?

javascript - 如何将 ArrayBuffer 从 JS 传递到 AssemblyScript/Wasm?

c# - stackPanel1.Children.RemoveAt 是否会销毁(处置)控件?

c# - Web 内容在 ChromiumFX 中呈现两次