在计算机显示器上显示图像涉及到图形 API 的使用,该 API 调度一系列异步调用......并在某个给定时间将所需的东西放在计算机屏幕上。
但是,如果您想知道在所需图像被完全绘制(并且对用户可见)时的确切CPU 时间怎么办?
当显示所有内容时,我真的需要获取 CPU 时间戳,以便将该时间点与我进行的其他测量相关联。
在不考虑图形堆栈的异步行为的情况下,很多事情都可以得到图形调用抖动的长度:
- 多线程;
- 同步到 V-BLANK(不幸的是,需要避免一些撕裂);
- 我还忘记了什么?:P
我针对 Linux 上的解决方案,但我对任何其他操作系统持开放态度。我已经研究了 X.org 服务器的部分xvideo 扩展和 OpenGL API,但我还没有找到有效的解决方案。
我只希望解决方案不涉及入侵视频驱动程序/硬件!
注意:我将无法在所需硬件上使用最近的 Nvidia G-SYNC 东西。虽然,这项技术会消除一些不可预测的抖动,但我认为它并不能完全解决这个问题。
OpenGL Wiki建议如下:“如果需要 GPU<->CPU 同步,则应在缓冲区交换后使用高精度/多媒体计时器而不是 glFinish。”
有人知道在 GPU 队列中的 swapBuffer 调用完成后如何正确地获取这样一个高精度/多媒体计时器值吗?