OneOS下的GUI框架测试

1.简介
最近在学习RTOS,发现国产RTOS竟然已经发展得这么蓬勃了,之前一直喜欢用freertos,但现在更多得国产物联网操作系统更让我值得期待和尝试了。此次,主要是体验下中国移动旗下得一块轻量级RTOS,通过配置组件,使能GUI模块,顺便跑了下demo,发现惊喜连连,棒棒哒!
OneOS是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M/R/AMIPSRISC-V等主流CPU架构,兼容POSIXCMSIS等标准接口,支持Micropython语言开发,提供图形化开发工具,能够有效提高开发效率并降低开发成本,帮助客户开发稳定可靠、安全易用的物联网应用。
轻量级GUI框架是基于LVGL8.2,是一个C语言编写的免费的开源图形库,提供了用于嵌入式GUI的各种元素。用户可以利用丰富的图形库资源,在消耗低内存的情况下构建视觉效果丰富多彩的GUI。
Benchmark是LVGL性能测试的测试用例。其在矩形、边框、阴影、文本、图像混合、图像变换、混合模式等各种情况下进行性能测试。测试期间对象的大小和位置使用伪随机数设置,以使得性能测试可重复。
2.测试步骤
使用menuconfig配置Benchmark性能测试用例,并使用keil或者gcc编译,并烧写程序到stm32f469-st-disco板子上去。
OneOS下的GUI框架测试
文章图片

重启开发板,此时,性能测试将会运行,屏幕顶部显示当前测试步骤的标题和上一步骤的结果。
OneOS下的GUI框架测试
文章图片

测试结束后,将创建一个表格来显示测量的FPS值。
3.测试原理
FPS的代码测量原理如下:

  1. 构造scene_dsc_t结构体,并在其中保存各种场景下的帧率测试所需数据,包含:场景名、用于场景测试的回调函数、消耗渲染时间、刷新次数,以及权重。其中测试场景48个,叠加显示不透明度与完全不透明度方式,则测试总场景96个。
  2. 在显示驱动的回调函数 monitor_cb中,实现每一个测试场景的累积渲染时间和帧数。获取到此数据后,便可得到每秒钟帧数,即FPS=帧数/累积渲染时间。
  3. lv_demo_benchmark帧率测试入口函数中,调用scene_next_task_cb函数,并在其中调用每一个scene_dsc_t结构体中的场景测试回调函数,对每一个场景进行测试。
  4. 测试完每一个场景,即可得到每一个场景对应的帧率FPS,通过加权平均的方式,获取到平均帧率。
测试原理逻辑图如下:
OneOS下的GUI框架测试
文章图片

测试范围包括:
  1. 矩形:普通矩形、圆角矩形、圆形
  2. 边框:普通边框、圆角边框、圆形边框、上边框、左边框、左上边框、左右边框、上下边框
  3. 阴影:小阴影、小阴影偏移、大阴影、大阴影偏移
  4. 图形:RGB图形、ARGB图形、chorma keyed图形、indexed图形、alpha only图形、RGB图形着色、ARGB图形着色、chorma keyed图形着色、indexed图形着色、RGB图形旋转、RGB图形平滑旋转、ARGB图形旋转、ARGB图形平滑旋转、RGB图形缩放、RGB图形平滑缩放、ARGB图形缩放、ARGB图形平滑缩放
  5. 文本:小型文本、中等文本、大型文本、压缩的小型文本、压缩的中等文本、压缩的大型文本
  6. 线条
  7. 弧形:普通弧线、粗弧线
  8. 混合模式:混合模式下的矩形、混合模式下的边框、混合模式下的阴影、混合模式下的图形、混合模式下的线条、混合模式下的弧线、混合模式下的文本
对于简单的测试情况,它可能会导致非常高的FPS结果。例如如果在5毫秒内绘制一些简单的矩形,基准测试将显示其为200 FPS。因此,它忽略了LV_DISP_REFR_PERIOD,它告诉LVGL刷新屏幕的频率。换句话说,测试显示了纯渲染时间的FPS,而不受该宏的限制。
4.结果分析
本轻量级GUI帧率测试使用LVGL官方benchmark,硬件选择stm32f469-st-discoCoretex-M4核心。最终经过测试,得到平均帧率约为80FPSOpa.speed部分,显示不透明度与完全不透明度相比的测量速度。
【OneOS下的GUI框架测试】在表格的第一部分“缓慢但常见的情况”中,显示了被视为常见但速度低于20 FPS的情况。下面的All cases部分则显示了所有结果。

    推荐阅读