跳转到主要内容

通用UI组件性能

本节描述大多数UI组件使用的一般TouchGFX渲染操作的性能。

图像绘制

图形绘制是TouchGFX中最基本的绘制操作之一,因为几乎所有UI组件在某种程度上都依赖于绘制一幅或多幅图形。 因此,系统具有快速有效地绘制图像的能力通常是非常重要的。 影响图像绘制性能的因素有很多。 然而,在几乎所有硬件设置中,与其他绘制操作相比,TouchGFX图像绘制被认为是一种快速操作。

数据拷贝的硬件支持

TouchGFX以选定的图像格式(如RGB565、L8、ARGB8888)存储未压缩的图像数据。 未压缩格式的优点是,在大多数情况下,它允许TouchGFX直接使用图像,并且不加修改地将其传输到帧缓冲区。 如果MCU有DMA,则可以并且应该将其用于内存拷贝,因为这可以加快传输速度并使MCU负载降至最低。

该方法的一个限制是图像格式是否包含alpha通道。 此时不能使用正常的DMA传输,因为MCU需要将图像数据与帧缓冲器像素进行像素混合。 然而,如果您使用的是带图形加速功能(如Chrom-ART / DMA2D)的STM32,也可以为这些类型的图像使用DMA。 此时,DMA不仅能够复制数据,而且可以一次性完成复制和混合操作,从而大大提高速度并降低MCU负载。

图像格式

图像格式对图像绘制性能也有影响,具体取决于您拥有的硬件支持。 一个经验法则是,您要传输的数据越少,传输速度就越快。 因此,在大多数情况下,RGB565图像的传输速度应快于类似的RGB888图像,因为RGB565图像的大小是对等RGB888图像的三分之二。

访问图像数据

访问图像数据所需的时间非常重要,因为每次渲染图像时都会访问图像数据。 在TouchGFX应用中,图像数据可以存储在不同的硬件位置(访问时间也不同)。

图像数据位置说明
外部Flash外部Flash的优点在于低成本和容量优势(通常相当大),允许您在应用中有很多图像。 然而,访问时间差别很大,但选择QSPI或类似的替代方案可以实现高吞吐率,从而显著提高图像绘制性能。
外部RAM在某些情况下,您可能需要在外部RAM中缓存您的图像。 当你被迫使用非内存映射Flash(例如NAND、EMMC)时,这种情况就会经常发生,因为这些Flash不能直接用于在TouchGFX中进行图像渲染。 在这种情况下,对外部RAM的访问对于您应用中的图像绘制性能至关重要。
内部Flash在某些情况下,您可以在内部flash中存储部分或全部图像,即使这里的存储空间非常有限。 访问速度非常快,所以如果您有一些对于动画来说必不可少的图像并且性能是一个问题(例如,如果图像被纹理映射器使用),可以尝试将其存储在内部flash中(如果可能的话)。
内部RAM在非常罕见的情况下,您将从内部RAM渲染图像。 存储空间非常有限,但访问速度非常快,所以存储在这里(使用TouchGFX图像缓存)的图像将被非常快速地渲染。

访问帧缓冲区

渲染图像总是会在对帧缓冲区的更新后结束。 如果图像包含alpha通道,则不仅要在帧缓冲区中写入像素数据,还要读取像素数据以执行实际混合。 因此,对用于存储帧缓冲区的RAM的读/写访问时间是获得良好的图像绘制性能的关键。

图像分辨率

由于需要传输的数据与图像分辨率成正比,图像分辨率自然会对图像绘制操作产生影响。

透明度

图像的不透明度会影响图像的渲染时间。 带有alpha通道的图像的渲染时间比不带alpha通道的图像长,因为它必须与帧缓冲区混合。 因此,混合操作必须从帧缓冲区读取数据,而实体图像只需要覆盖帧缓冲区中的数据。 即使有硬件加速,情况也是如此。 然而,渲染实体和半透明图像之间的比率可能会因设置的不同而变化。

MCU绘图

一些控件依赖于直接的帧缓冲区操作。 这种方法对失效区域中的每个像素执行一次或多次计算,然后更新帧缓冲区中的像素。 这是一个相当缓慢的操作,如果对每个像素进行的计算比较复杂时,速度更是缓慢。

如果MCU绘图要执行大量计算,那么MCU的处理能力必不可少。 对帧缓冲区的访问(对内部或外部RAM的访问)也会产生影响,因为对帧缓冲区的数据写入(也可能是读取)是针对失效区域的每个像素进行的。

画布控件

画布控件是一种特殊的TouchGFX控件,用于绘制抗锯齿的几何形状。 它们通常是相当复杂的,因此渲染速度可能非常缓慢。

渲染时间与几何形状的失效部分的大小成线性关系。

画布控件需要一个存储区来存储中间计算结果。 其大小和性能影响在画布控件一节中介绍。

Tip
大多数标准TouchGFX画布控件(如Circle)都有更新方法,只会让控件中已更改的部分无效。 例如,如果您要更新“圆”,请使用circle::updateArc(...) 该操作不会使整个圆失效,只会使已更改的部分失效。 确保使用这些类型的操作以获得最佳性能。

文本

文本渲染依赖于图像绘制,因为所有使用的字符都被转换成“文本”一节所描述的图像。 这些图像采用A4格式,基本上是图像中的每个像素拥有一个4位alpha值。 如果在该图案上应用一种颜色,会得到包含一个字符的抗锯齿图像。

由于文本渲染是一组图像绘制操作(每个字符一次操作),图像绘制的性能特征也适用于文本渲染,包括使用硬件加速(如Chrom-ART / DMA2D)进行性能改进。