【问题标题】:CPU load strongly increasing when calling update() SLOT on several QQuickWindows在多个 QQuickWindows 上调用 update() SLOT 时 CPU 负载急剧增加
【发布时间】:2015-06-27 11:14:55
【问题描述】:

我发现我的应用程序在多个 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 + 开源视频驱动程序

  • Ubuntu14.04 + Qt5.3.2 + radeon_video + 开源视频驱动

我需要快速解决这个问题!!!我已经尝试过定期调用QQuickWindowreleaseResources() 方法和resetOpenGLState() 方法。

另外非常有趣的是,当我在我的main.cpp 中应用putenv("LIBGL_ALWAYS_SOFTWARE=1") 时,这个问题就消失了,并且我 CONSTANT 的 cpu 使用率很低。但在我的实际应用程序中,我需要硬件渲染,所以它不是适合我的选择。

谁能测试这个问题或给我一个建议?

【问题讨论】:

  • 尝试在单独的 Image 元素中实例化两个图像并使用 visible: sw 控制它们的可见性
  • 我只是交换两个图像,因为它只是一个测试程序。在我的实际程序中,我正在从相机获取图像。我花了一天时间才明​​白这个 CPU 问题与相机无关,而是与图像绘制有关(甚至可能只是窗口内容重绘)。这对我来说非常出乎意料。
  • 另外很有趣的是,当我应用 putenv("LIBGL_ALWAYS_SOFTWARE=1");在 main.cpp 这个问题消失了,我的 cpu 使用率一直很低。但在我的实际应用程序中,我需要硬件渲染,所以这不是我的选择。

标签: qt animation qml cpu qtquick2


【解决方案1】:

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

【讨论】:

  • 是的,这对我有用。简单的程序以恒定的 CPU 使用率运行!谢谢!但是我的主应用程序拒绝使用这个驱动程序。它抱怨缺少 swrast_dri.so 并在尝试绘制着色器时出错。现在正在尝试修复它。
  • @DimaK 是不是因为你打开了LIBGL_ALWAYS_SOFTWARE
  • 没有。这是因为我的主程序试图使用开源驱动程序。我编辑了 .pro 文件,它开始正常工作。但是我的目标 PC 使用的是 radeon x300 视频适配器,并且专有驱动程序不再支持它。旧版驱动程序拒绝在 ubuntu 12.04 上安装。所以我正在尝试寻找其他解决方案。我已经尝试安装新的(10.5.8)台面库,但问题仍然存在......不知道还能尝试什么。
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 2014-09-04
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2020-01-07
相关资源
最近更新 更多