2013-02-03 42 views
2

我正在打擊低FPS的應用程序之一,我正在工作。我發現GPUView可以用於調試圖形性能問題。我收集了用例的Merged.etl文件。這顯示了我的應用程序的FPS圖表。我試圖理解此圖表與GPU硬件隊列和CPU上下文隊列之間的關係。基本上我想知道這個FPS圖表是如何派生出來的?如果有任何事件可以追蹤此信息,我正在考慮添加此事件的實時跟蹤,以便我可以在運行我的應用程序時顯示FPS作爲窗口小部件,類似於http://blogs.msdn.com/b/jgoldb/archive/2008/09/26/etw-event-tracing-in-wpf.aspxWindows GPUView

回答

0

FPS圖表源自事件「D3D9 - 至今」(對於D3D10/11,也許其他類似名稱) 的「D3D9 - 禮物」的時候,D3D運行時調用到用戶模式圖形驅動程序的界面生成的事件Present

在GPUview的FPS聊天只考慮一下當前的計數器,但對於某些應用程序,比如Windows媒體播放器,它將在DWM中關閉一幀,以便免費撕開Present一次,第一次將上半部分呈現,第二次呈現下半部分。在這種情況下,GPUview中的FPS實際上是實際FPS的兩倍。要獲得真正的FPS,還需要查看「DX-blt」事件,如果「DX-Blt」事件中有「Present Blt」信息,則表示「DX-blt」是「Present」,然後查看源Rect和Dest Rect信息來確定Present是用於全幀還是幀的一部分。

0

尋找D3D9-Present和DX-Flip for DX1X。跨越大量時間,例如1秒。按下Ctrl + E,它將顯示事件查看器,從中選擇D3D9-Present或DX-Flip事件。事件查看器中的左窗格將爲您提供這些事件的數量,並且您已具有放大到的時間範圍。我認爲按照時間來劃分事件的數量會給你這段時間的平均FPS。 gpu視圖如何執行,可能會運行平均或瞬時(1/deltaT),其中deltaT可能是兩個事件之間的時間。 你可以嘗試這個小數學,併爲讀者發佈一些結果:)

+0

順便說一下,我嚴格意味着基於DX的獨家全屏遊戲,其中只有1個進程發送工作到GPU。 – Abhinav

相關問題