剖析窗口管理器 - glXSwapBuffers性能

时间:2015-04-21 14:33:05

标签: opengl x11 glx compiz

我在使用expo插件绘制桌面时检查Compiz性能。 Compiz中的VSync和nvidia-settings已启用。我用这种方式衡量时间:

paint()
{   
   //get time
   //all opengl commands
   glFlush();
   glFinish();
   //get time
   //calculate paint time

   //get time
   glXSwapBuffers (mDpy, mOutput);
   glFlush();
   glFinish();
   //get time
   //calculate sync/swap time
}

当绘制命令花费8毫秒时,同步/交换时间大约等于7毫秒,因为在vsync打开后glXSwapBuffers应该阻塞后使用glFinish。当我在世博会模式下运行更多的opengl窗口时,绘制命令需要18毫秒,同步/交换时间约为13毫秒。怎么解释?为什么glXSwapBuffers太慢了?

当我在nvidia-settings和Compiz中关闭vsync并生成需要28 ms的绘图命令时,同步/交换时间约为14 ms。

1 个答案:

答案 0 :(得分:0)

好吧,你可能用60Hz驱动你的显示器,所以等待vblank可能需要16.67ms。

交换缓冲区的渲染时间和等待时间应始终加起来为16.67 ms的帧时间的倍数(假设绘图在前一个缓冲区交换之后立即开始)。 8 + 7 = 15以及18 + 13 = 31都足够接近。当你的绘图需要18ms时,你当然会错过一个vblank间隔,并且必须等待下一个。

我的“vsync off”案件发生了什么,我不知道。在这种情况下,交换缓冲区调用本身不应占用大量时间。