Chrome和Firefox中的Javascript GPU同步:性能问题

Chrome和Firefox中的Javascript GPU同步:性能问题,javascript,google-chrome,firefox,webgl,emscripten,Javascript,Google Chrome,Firefox,Webgl,Emscripten,我使用Emscripten构建一些渲染代码,将主循环设置如下: emscripten_set_main_loop(emscriptenMainLoop, 0, 1); 这将在任何场景中产生60 fps的最大速度。然后我加载一个足够复杂的场景,使Firefox只以18-20 fps的速度运行,而Chrome在相同的代码上以60 fps的速度运行 好的,让我们看看两种浏览器的分析器中的典型单帧 铬: 火狐: 不考虑我编写的JS代码的效率和执行效率(在Chrome中稍微好一点),我们可以看到,C

我使用Emscripten构建一些渲染代码,将主循环设置如下:

emscripten_set_main_loop(emscriptenMainLoop, 0, 1);
这将在任何场景中产生60 fps的最大速度。然后我加载一个足够复杂的场景,使Firefox只以18-20 fps的速度运行,而Chrome在相同的代码上以60 fps的速度运行

好的,让我们看看两种浏览器的分析器中的典型单帧

铬:

火狐:

不考虑我编写的JS代码的效率和执行效率(在Chrome中稍微好一点),我们可以看到,Chrome中的帧间延迟是1-2毫秒长,有时甚至不到一毫秒。Firefox中的相同延迟为20毫秒或更长。在Chrome中,GPU(屏幕截图底部的绿色条带)与JS代码同时运行,而在FF中,GPU是同步的

Windows和Linux浏览器都表现出相同的行为。我用支持OpenGL4.5的nVidia卡和最新的驱动程序对它进行了测试。这两种浏览器都报告了硬件加速的WebGL功能,Firefox能够以60 fps的速度运行,场景也不那么复杂。C++代码是建立在所有可能的优化和消除错误检查的基础上的,即代码> O3,代码> LTO ,<代码> NDECHG/<代码>,代码> DEMangLeYeApple = 1 ,<代码> DelpTyAdPrimeTeaType=1 < /C>
有可能改变Firefox的这种行为吗?可能是由
about:config
中的设置控制的?也许有一个神奇的Js或Emscripten调用,可以将一些Firefox的内部设置为正确的状态?或者我需要关闭某些功能吗?

您提交了吗?@guest271314尚未提交,稍后将提交。Chrome使用多进程渲染器。这意味着您的所有WebGL命令只生成一个命令缓冲区,该命令缓冲区在另一个进程中运行,有效地为您提供了两个运行代码的进程。Firefox不这样做,它在一个进程中运行您的所有代码。要修复firefox,除了让他们花上几年的时间重新编写多进程的图形基础设施,或者可能等待能够从工作人员那里进行渲染之外,没有什么简单的事情可以做。这两个都在他们的待办事项列表中,但都不是一小部分工作。您提交了吗?@guest271314尚未提交,稍后将提交。Chrome使用多进程渲染器。这意味着您的所有WebGL命令只生成一个命令缓冲区,该命令缓冲区在另一个进程中运行,有效地为您提供了两个运行代码的进程。Firefox不这样做,它在一个进程中运行您的所有代码。要修复firefox,除了让他们花上几年的时间重新编写多进程的图形基础设施,或者可能等待能够从工作人员那里进行渲染之外,没有什么简单的事情可以做。两者都在他们的待办事项清单上,但都不是少量的工作。