我们构建了一个应用程序,该应用程序使用QT WebEngine来测试WebGL的功能,但它可以工作,但渲染一些正弦波形的CPU利用率非常高(>30%),根文件系统由QT Enterprise提供,如这里为IMX6 所述
http://doc.qt.digia.com/QtEnterpriseEmbedded/qtee-preparing-hardware-imx6sabresd.html
在检查根文件系统时,我们发现没有GPU驱动程序(通常是IMX6的libVivant.so和libVivante.ko),所以看起来所有的GL渲染都是由CPU而不是GPU完成的,这就是CPU利用率高的原因。有人知道在QT WebEngine中为WebGL启用硬件加速的其他方法吗?
QtWebEngine需要硬件加速来合成页面的层,如果没有它,你可能无法在屏幕上看到任何东西。
Qt WebEngine背后的Chromium是一个野兽,它更多地是为了感知流畅性,而不是为了产生CPU周期;它将利用一切可能的资源来实现这一目标。
任何JavaScriptWebGL调用都将从主渲染线程转到GPU进程主线程,然后解码为对驱动程序的GL调用。每个不同的WebGL画布都会触发不同的FBO来使用和绑定,需要GL上下文切换,并且最新的状态会尽可能频繁地触发Chromium合成器,将所有委托的场景发送到浏览器进程,最终在QtQuick的场景图线程中结束以进行合成。
所有这些都表明,一个JavaScriptWebGL调用触发的机器要比只告诉OpenGL绘制这些几何图形大得多。这种设备30%的CPU使用率对我来说并不奇怪,尽管可能有办法避免瓶颈。
最有效的方法是使用自定义QtQuick场景图几何体,如本例所示:http://qt-project.org/doc/qt-5/qtquick-scenegraph-customgeometry-example.html,但即便如此,我也不会期望该设备的CPU使用率低于10%。