Skip to main content

加速2D Canvas基准测试

Comments

本系列博客三部曲的前几部分介绍了 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:转换静态路径并为其着色的基准测试。

Performance tests for accelerated 2D canvas

有了这个应用程序,就可以通过分别启用单个测试用例并比较结果来比较各个绘制特性。但就本博客而言,我们没有时间深入探讨细节,因为我们主要是想对加速后的 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 的影响。在开始阶段,渲染性能会受到屏幕更新频率的限制,当渲染次数进一步增加并导致无法按时完成帧渲染时,就会开始出现掉帧。

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

Accelerated 2D canvas results, ThinkPad P16 & Intel

Accelerated 2D canvas results, ThinkPad P16 & Nvidia

Accelerated 2D canvas results, Lenovo M10

Accelerated 2D canvas results, Samsung Galaxy Tab S8

 

结论

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

  • 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 工单。

 

Comments

Subscribe to our blog

Try Qt 6.11 Now!

Download the latest release here: www.qt.io/download

Qt 6.11 is now available, with new features and improvements for application developers and device creators.

We're Hiring

Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.