Qt以60 FPS刷新并吃掉GPU

时间:2017-06-15 08:45:29

标签: c++ qt

我有一个Qt应用程序,开始刷新60FPS,但我无法检测原因。

我使用了QML探查器,我看不到任何触发重绘的事件。 使用:

QSG_RENDERER_DEBUG=debug
QSG_RENDER_TIMING=1

我看到了

  

Gui Thread:window = 0x7fffffffe400,po​​lish = 0,lock = 0,block / sync = 15 -   动画= 0

经常写的。在启动几秒后,消息开始以此速率显示,而不执行任何操作。时间似乎是随机的 - 有时是在5秒后开始,有时是在15秒后开始。

使用:

QSG_VISUALIZE=changes

我看到整个屏幕都被刷新了 - 应用程序是全屏的。

我在Linux Debian 8,内核4.91上使用Qt 5.3。这大约占我的NVIDIA 980的25%。在Debian 8上,内核3.16它占据了超过50%的英特尔集成GPU。

您是否有任何关于如何检测触发刷新的提示的提示?

1 个答案:

答案 0 :(得分:0)

在删除应用程序之后,我已经找到了一个老C ++课程:

::paint()
{
    ...
    update();
    ...
}

这创建了一个无限paint<->update循环,它不会因为它们在不同的线程中运行而没有触发stackoverflow:)

明显的随机性来自于C ++对象在QML代码的多个地方使用的事实。

我不知道这是否与原始问题相关,因为它是一个与Qt框架无关的典型编程错误。