在几个QQuickWindows上调用update()SLOT时CPU负载大幅增加

时间:2015-06-27 11:14:56

标签: qt animation qml cpu qtquick2

我发现我的应用程序在几个QQuickWindows上进行调用update()SLOT时会消耗越来越多的CPU能力。

这是一个简单的测试程序:

    import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Window 2.2

ApplicationWindow {visible: true; width: 640; height: 480;
    Window{  height: 100;  width: 100; visible: true; objectName: "w1"; id:w1; }
    Window{  height: 100;  width: 100; visible: true; objectName: "w2"; id:w2; }
    Window{  height: 100;  width: 100; visible: true; objectName: "w3"; id:w3; }

    Timer {
        interval: 30
        repeat: true
        running: true

        onTriggered: {
            w1.update();
            w2.update();
            w3.update();
        } 
    }
}

如果我用Loader完全重新加载QQuickWindows,一切都会重置并且CPU负载从一开始就开始增加。

使用以下两个系统测试了此问题:

  • Ubuntu 12.04 + Qt5.4.2 + intel_video + opensource videodriver

  • Ubuntu14.04 + Qt5.3.2 + radeon_video + opensource videodriver

我需要快速修复此问题!!! 我已经尝试定期调用releaseResources()方法和resetOpenGLState() QQuickWindow方法。

同样非常有趣的是,当我在putenv("LIBGL_ALWAYS_SOFTWARE=1")中应用main.cpp时,此问题就会消失,我的 CONSTANT 低CPU使用率。但在我的实际应用程序中,我需要硬件渲染,所以是我的选择。

任何人都可以测试这个问题或给我一个建议吗?

1 个答案:

答案 0 :(得分:0)

我已经在Ubuntu 14.04 + Qt5.4 + amd proprietary drives上测试了您的代码而没有增加CPU负载(它保持不变)。每30毫秒重新加载一次图像,帧速率为33.3 fps。我猜你使用的是开源驱动器,它在渲染方面效果不佳。尝试在我们的amd机器上使用amd专有驱动器。