2017-06-15 96 views
3

我有一個QT應用程序,開始刷新60FPS,但我無法檢測到爲什麼。Qt刷新爲60 FPS並吃GPU

我用QML分析器,我看不到任何觸發重繪的事件。 使用:

QSG_RENDERER_DEBUG=debug 
QSG_RENDER_TIMING=1 

我看到

GUI線程:窗口= 0x7fffffffe400,拋光= 0,鎖= 0,塊/同步= 15 - 動畫= 0

經常寫。從啓動開始幾秒鐘後,該消息開始以此速率出現,而無需執行任何操作。時機似乎是隨機的 - 有時在5秒後開始,有時在15秒後開始。

使用:

QSG_VISUALIZE=changes 

我看到整個畫面被刷新 - 應用程序是全屏顯示。

我在Linux Debian 8,Kernel 4.91上使用Qt 5.3。這大約佔我的NVIDIA 980的25%。在Debian 8上,Kernel 3.16的吞吐量超過了英特爾集成GPU的50%。

你有任何提示,我該如何檢測觸發刷新的內容?

+0

剝離您的應用程序,直到您本地化產生問題的代碼。 – m7913d

回答

0

剝離下來我得誰了這一個古老的C++類應用程序後:

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

這創造了一個無限循環paint<->update這並不會觸發計算器僅僅是因爲他們在不同的線程運行:)

這種明顯的隨機性來自這樣一個事實,即C++對象在QML代碼的多個位置使用。

我不知道這是否與原始問題相關,因爲它是一個經典的編程錯誤,與Qt框架無關。

+0

'這創建了一個無限繪製<->更新循環,因爲它們運行在不同的線程中,所以沒有觸發stackoverflow:)'實際上它們運行在相同的位置,但更新事件通過O.S.排隊。事件循環。所以它更像是一個「while」而不是遞歸循環。 –