加速 2D Canvas基准测试

作者:Kaj Grönholm | Mar 12, 2026 7:34:45 AM

本系列博客三部曲的前几部分介绍了 Qt Canvas Painter及其新颖的新功能。本篇文章将重点介绍加速 2D Canvas 性能方面的内容,展示我们如何通过基准测试全面提高性能。

让我们先来总结一下,然后再看看我们是如何取得这些结果的:

  • 在带有集成 GPU 或低端独立 GPU 的 PC 上,Canvas Painter 的性能大约是使用 OpenGL 后端的 QPainter 的 2 倍
  • 在低端安卓平板设备上,Canvas Painter 的性能约为使用 OpenGL 后端的 QPainter 的 5 倍
  • 在高端安卓平板电脑上,Canvas Painter 的性能约为使用 OpenGL 后端的 QPainter 的 10 倍

在此,我们再次强调以下警告:

Qt Canvas Painter 在 Qt 6.11 版本中仍处于技术预览阶段。这意味着我们还不能保证 API 或 ABI 的稳定性。

另外值得注意的是,这些基准测试是使用 Qt 6.11.0 RC 版本完成的。随着 Qt 加速 2D Canvas 功能的不断开发,性能很可能会有所提高。

测试方法

Qt Canvas Painter 的主要目标之一是实现高性能,尤其是在带有 GPU 的移动/嵌入式设备上。为了验证这一点,我们显然需要在实际硬件上对我们的加速型 2D Canvas 进行适当的基准测试。而且这种基准测试还应包含其他绘制方式,以便进行公平的比较。

为此,我们使用了 QCPainterBench 应用程序,它具有与 Qt Canvas Painter 和 QPainter 完全相同的测试用例。它包含 6 个单独的测试,可分别启用或禁用:

  1. Ruler:用于短线段的独立绘制,以及文本元素的出现或消失的基准测试。
  2. Circles:对圆形和带圆帽的弧形进行基准测试。
  3. Bezier lines:以带渐变填充的贝塞尔线图为基准测试。
  4. Bars:绘制矩形以创建条形图的基准测试。
  5. Icons & Text:绘制小尺寸图像和简短静态文本的基准测试。
  6. Flower:转换静态路径并为其着色的基准测试。

有了这个应用程序,就可以通过分别启用单个测试用例并比较结果来比较各个绘制特性。但就本博客而言,我们没有时间深入探讨细节,因为我们主要是想对加速后的 2D Canvas 功能的平均预期性能进行大致估算。因此,我们在运行基准测试时启用了默认的测试配置,即除 Flower 之外的所有测试。

为了获得全面的结果,我们在以下系统上进行了测试:

  • 联想 ThinkPad P16 Gen 2。该系统是笔记本电脑/台式电脑的范例。测试使用 Intel UHD Graphics 770 的集成 GPU 和 NVIDIA RTX 2000 Ada 的独立 GPU 进行。
  • 联想 Tab M10 HD。该系统是中低端嵌入式硬件的范例。芯片组为联发科 Helio P22T,搭载 PowerVR GE8320 GPU。
  • 三星 Galaxy Tab S8。该系统是高端嵌入式硬件的典范。芯片组采用高通 SM8450 Snapdragon 8,搭载 Adreno 730 GPU。

值得注意的是,QPainter OpenGL 的抗锯齿设置为使用 4X MSAA。这应该是性能和画质之间的一个很好的平衡点,而且在所有测试系统上都不会导致明显的性能下降。Qt Canvas Painter 使用基于顶点的抗锯齿方案。此外,我们使用 QSG_NO_VSYNC=1 强制启用基于定时器的渲染,因此结果不会受到垂直同步(Vsync)的影响。

下面是一段简短的视频,展示了基准测试应用程序在两款测试平板电脑上的运行情况。

加速型 2D Canvas 测试结果

测试过程中,渲染计数不断增加(例如 1、2、4、8 等),然后测量这对平均 fps 的影响。在开始阶段,渲染性能会受到屏幕更新频率的限制,当渲染次数进一步增加并导致无法按时完成帧渲染时,就会开始出现掉帧。

以下是所有测试系统的基准测试结果。

 

结论

从上述结果中可以得出很多结论,以下是我认为最有趣的几点:

  • D3D12 的速度明显快于 D3D11 或 OpenGL,这一点非常吸引人。与其他两个应用程序接口相比,Direct3D 12 是一个现代化的 API,因此 QRhi 可以利用这一底层图形 API 来提高效率。D3D11 的速度慢于 OpenGL 似乎是个疑点,我们实际上已经跟踪并修复了这个问题,因此在目前的 dev 分支中,这些后端的性能已经非常接近。
  • 在安卓平板设备上,Vulkan 的性能表现有些不同。在 Galaxy S8 上,Vulkan 和 OpenGL 的性能差不多,而在联想 M10 上,Vulkan 性能比 OpenGL 低约 20%。我们的假设是,这些设备的 OpenGL ES 驱动程序经过了高度优化,因此更底层的 Vulkan API 在此测试场景中并不能提高性能。不过,我们将继续使用其他系统进行剖析和测试。
  • 使用 QPainter Raster 后端时,抗锯齿是一项特别消耗资源的操作。这并不奇怪,因为众所周知,CPU 上的抗锯齿操作速度很慢。QPainter 软件渲染相比各种硬件加速渲染方案要慢得多,因此对它们进行比较没有太大意义。Canvas Painter 基于顶点的抗锯齿虽然质量更高,但对性能的影响可能略大于 QPainter 4X MSAA 方法。Canvas Painter 还可以选择支持 MSAA 抗锯齿,因此可以将其作为替代选项进行基准测试。
  • Galaxy S8 使用 Canvas Painter 绝对大放异彩。高分辨率屏幕(2560 x 1600)和高速的高通 Adreno GPU 是 QRhi 加速 Canvas Painter 的绝佳组合。在启用 8 次渲染计数的所有测试中,它都能保持 120fps 的屏幕刷新率。

总结性能数据,我们可以得出与本文开头相同的结论:

在普通 PC 上,Qt Canvas Painter 的性能约为QPainter (使用 OpenGL 后端)的 2 倍;在中低端安卓平板上,约为 5 倍;在高端安卓平板上,约为 10 倍

我们已尽力为加速型 2D Canvas 提供具体、真实的基准测试和准确结果。不过,如果能在不同系统上验证并获得更多结果,将非常有价值。因此,我们鼓励大家安装最新的 Qt 6.11(预)发布版本,并在自己的开发系统或目标系统上运行QCPainterBench您可以将测试结果以评论形式提交至此页面、或在 Qt 论坛上发表评论,或创建 CanvasPainter 组件的 Qt Bug 工单。