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.aspx

4

2 回答 2

0

为 DX1X 寻找 D3D9-Present 和 DX-Flip。跨越相当长的时间,比如 1 秒。按 Ctrl+E,将显示事件查看器,从中选择 D3D9-Present 或 DX-Flip 事件。事件查看器中的左窗格将为您提供这些事件的数量,并且您已经拥有缩放到的时间跨度。我认为将事件数除以时间会给你该持续时间的平均 fps。gpu 视图是如何做到的,可能是平均运行时间或瞬时值 (1/ deltaT),其中 deltaT 可能是两个事件之间的时间。你能试试这个小数学并为读者发布一些结果吗:)

于 2013-05-20T18:30:07.997 回答
0

FPS 图表源自事件“D3D9 - Present”(可能是 d3d10/11 的其他类似名称)“D3D9 - Present”事件在 D3D 运行时调用用户模式图形驱动程序的界面Present时产生

GPUview中的FPS聊天只考虑调用Present的计数器,但是对于某些应用程序,例如windows媒体播放器,它会在DWM中为一帧调用Present两次以进行免费撕裂,第一次呈现上半部,第二次呈现底下的一半。在这种情况下,GPUview 中的 FPS 实际上是真实 FPS 的两倍。要获得真实的FPS,还需要查看“DX-blt”事件,如果“DX-Blt”事件中有“Present Blt”信息,则表明“DX-blt”是“Present”,然后查看此事件中的 Source Rect 和 Dest Rect 信息来确定 Present 是用于完整帧还是部分帧。

于 2013-02-06T07:41:14.183 回答