【问题标题】:profiling a window manager - glXSwapBuffers performance分析窗口管理器 - glXSwapBuffers 性能
【发布时间】:2015-04-21 14:33:04
【问题描述】:

我在使用 expo 插件绘制桌面时检查了 Compiz 的性能。 Compiz 和 nvidia-settings 中的 VSync 已启用。我是这样测量时间的:

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 应该会阻塞。当我在 expo 模式下运行更多 opengl 窗口时,绘制命令需要 18 毫秒,同步/交换时间约为 13 毫秒。怎么解释?为什么 glXSwapBuffers 这么慢?

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

【问题讨论】:

    标签: opengl x11 glx compiz


    【解决方案1】:

    好吧,您可能会以 60Hz 的频率驱动显示器,因此等待 vblank 最多可能需要 16.67 毫秒。

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

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

    【讨论】:

    • 合成窗口管理器从屏幕外像素图创建 GL 纹理,所以这些屏幕外像素图可能会创建一个后台缓冲区?
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多