我发现我的应用程序在几个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使用率。但在我的实际应用程序中,我需要硬件渲染,所以不是我的选择。
任何人都可以测试这个问题或给我一个建议吗?
答案 0 :(得分:0)
我已经在Ubuntu 14.04 + Qt5.4 + amd proprietary drives
上测试了您的代码而没有增加CPU负载(它保持不变)。每30毫秒重新加载一次图像,帧速率为33.3 fps。我猜你使用的是开源驱动器,它在渲染方面效果不佳。尝试在我们的amd机器上使用amd专有驱动器。