Louvre 是一个高性能 C++ 库,专为构建 Wayland 合成器而设计,重点强调易于开发。
创建 Wayland 合成器可能是一项艰巨的任务,通常需要花费数月甚至数年的时间。这项具有挑战性的任务涉及掌握 Linux 输入和图形 API、管理图形缓冲区以及精心实现众多 Wayland 协议及其各自的接口。
幸运的是,卢浮宫通过代表您处理所有复杂的低级任务来简化这个复杂的过程。它甚至提供了管理协议的默认方式,使您从第一天起就拥有一个基本但功能齐全的合成器,并逐步探索和自定义其功能以精确满足您的要求。
在 Louvre 中,您可以灵活地使用自己的 OpenGL ES 2.0 着色器/程序、使用 LPainter 类进行基本 2D 渲染,或者利用 LScene 和 LView 系统(它可以管理缓冲区损坏,还可以为您处理输入事件)。此外,可以根据需要组合这三种方法。
卢浮宫提供出色的表演。由渲染大量移动 wl_subsurfaces(不透明和半透明)组成的基准测试,其中测试了 louvre-weston-clone 示例合成器,结果表明 Louvre 即使在复杂的场景中也能保持高 FPS 速率。此外,它比 Weston 和 Sway 等流行的合成器使用更少的 CPU 和 GPU 资源。
机器 | MacBook Pro A1398(视网膜显示屏,15 英寸,2015 年中) |
中央处理器 | Intel Core i7-4770HQ @ 2.20GHz(高达 3.4GHz),具有 6MB 共享三级缓存 |
记忆 | 16GB 1600MHz DDR3L |
图形处理器 | 英特尔 Iris Pro 显卡 - i915(英特尔显卡)版本 1.6.0 (20201103) |
展示 | 15 英寸 Retina 显示屏,单模式 2880x1800@60Hz |
操作系统 | Linux Mint 21 - Linux 5.15.0-86-通用 |
如果您对基准测试的运行细节感兴趣并想亲自尝试一下,请参阅此链接。
这是一张说明基准测试结果的图表。它显示每个合成器在 HiDPI 显示器上使用双缓冲渲染 1 到 50 个移动表面的平均 FPS。
基准测试结果自 2023 年以来一直没有更新,可能无法准确反映测试的合成器的当前性能。
大多数 Wayland 合成器使用单个线程,这在渲染复杂场景时会大大降低其性能。其原因是由于垂直同步,合成器必须等待几毫秒才能将刚刚渲染的帧缓冲区与屏幕上显示的帧缓冲区交换。这样做是为了使交换与显示刷新率 ( vblank ) 同步并避免撕裂效应。使用单线程时,合成器会出现“死区时间”,导致它们无法及时处理和渲染下一帧的内容。这就是为什么他们最终跳过vblank ,导致刷新率下降一半(或更多)。为了避免这个问题,Louvre 使用多线程。每个输出(显示)在其自己的线程上渲染其内容,允许合成器在等待 vblank 时继续处理请求并渲染到其他输出。这可以防止 Louvre 合成器出现“死区时间”,从而使它们能够保持高刷新率。
左侧的图表显示了原始 CPU 消耗结果,这可能表明 Louvre 使用了更多 CPU 资源。然而,这种比较并不完全公平,因为 Louvre 的刷新率几乎是其他网站的两倍(平均 60 FPS 与 30 FPS)。当我们将 CPU 消耗除以每秒帧数 (FPS) 时(如右图所示),很明显,与其他合成器相比,Louvre 实际上使用的 CPU 资源相对于 FPS 更少。
与 CPU 消耗类似,我们可以观察到 Louvre 相对于 FPS 比其他合成器使用更少的 GPU 资源。