写点什么

图形测试分析毫无头绪?HarmonyOS 图形栈测试技术帮你解决|HDC2021 技术分论坛

  • 2022 年 1 月 10 日
  • 本文字数:3708 字

    阅读完需:约 12 分钟

图形测试分析毫无头绪?HarmonyOS图形栈测试技术帮你解决|HDC2021技术分论坛

作者:huangran,图形图像技术专家

应用开发以后无法知道性能瓶颈的根因是什么?滑动卡顿、白块产生的原因是什么?代码写完之后,不知道如何优化让它表现地更好……

我们发现,如今测试人员的需求已经不只是停留在应用层面的测试数据了,而是需要数据背后的根因。但业界的图形栈测试,绝大部分都只提供应用层面的数据,有一部分可以深入系统层分析,但仍无法触及硬件这一层的测试分析。

HarmonyOS 图形栈测试技术,不仅可以深入系统层分析,帮助开发测试者得到数据背后的根因,还能触达硬件层的测试分析。那它是如何做到的呢?让我们一起揭秘 HarmonyOS 图形栈测试技术。

一、HarmonyOS 图形栈全貌

众所周知,图形是操作系统里面非常核心的模块,和内核、编译器等模块一起作为操作系统的底层基座,不仅如此,它还是体现竞争力的关键模块。但因为图形栈非常复杂,所以需要构筑一套完整的测试技术才可以保证其质量和竞争力。

图 1 图形栈整体架构

如图 1 所示,左边部分是 HarmonyOS 图形栈的全貌,其中最上面一层是渲染前端,包括 2D 类应用、3D 类应用和重负载的游戏视频类应用,这一层与右边测试部分的应用层对应,包括体验 KPI 和负载模型能力。

中间一层则是我们图形栈操作系统的核心能力,如组件、JS 引擎、ArkUI 的三棵树(Component 树,Element 树和 Render 树)、自研 2D 引擎、自研 3D 引擎、动效、手势、布局等。这一层与右边测试部分的系统层对应,包括图形栈关键耗时函数解析和图形栈优化方案可见的能力。

最下面一层则是 HarmonyOS 1+8+N 设备需要横跨的两个部分:操作系统和硬件设备,需要对其进行兼容支持,这一层与右边测试部分的硬件层对应,包括跨系统对比测试能力、跨设备测试能力和硬件 SOC 分析能力。

我们图形栈的测试能力不只是停留在应用层的体验 KPI,它可以将体验 KPI 指标进一步分解成系统级别的耗时函数、以及硬件级别的 SOC 分析能力,并最终提供优化方案(后文将举例说明)。

了解完整体架构后,我们再进一从 2D 图形栈应用和 3D 图形栈应用两个角度去了解图形栈测试技术:

二、2D 图形栈应用

图 2 是 HarmonyOS ArkUI 开发框架,对应右边的三层结构,最底层是接口层测试,中间层是组件层测试,最上层是应用层测试。接下来我们会给大家重点介绍负载模型、系统分析案例和应用分析案例。

图 2 ArkUI 开发框架

对于一个新的开发框架,在没有海量生态的应用进来之前我们是如何验证这个平台的测试能力的?

我们最初设想的是构建足够多的场景来覆盖和验证整个 ArkUI 框架,比如三棵树(Element 树、Component 树和 Render 树)、布局/动效、手势、2D 渲染引擎。但因为不存在穷举的方式去覆盖所有业务,所以我们提出了负载模型的概念。

2D 负载模型到底是什么?

我们选取了 Top200 的应用,对应用进行基于场景的分类,并提取特征, 然后形成了 8 大类常见用户场景(图 3),如购物类、图库类、视频类等,同时也抽象出 6 大类负载,比如资源加载、图层叠加、负载布局 。

图 3 负载场景及类型

同时我们还结合了 Beta 与商用的性能问题单和用户体验反馈,来逆向帮助我们补充可能遗漏的负载,比如系统 I/O 负载压力。这样构建的负载模型有两个作用,不仅可以测试 HarmonyOS 图形栈架构,还可以为作为 HarmonyOS 应用样例,供开发者参考。

由于设备硬件能力的差异性,负载模型实际上是参数可调节的。比如对于 IP Camera 这类没有 GPU 的设备,我们无法给它加很强的负载,它的分辨率较小、物理尺寸也较小,如果用手机的分辨率给它渲染这是没有意义的。所以我们将负载模型构建成一个参数可调模型,这样它就会基于测试者的硬件设备来选择不同的资源做测试,非常灵活便捷。

如前文所说,我们的图形栈测试能力不只是停留在应用层,而是要进入到系统层和硬件层。接下来举两个例子让大家了解一下我们在系统和硬件层面上如何做分析。

案例一:系统分析案例

我们先举一个跟硬件相关的例子,比如“多个应用连续页面切换”的场景,这时候可能产生多应用切换的时延、丢帧等问题。

如图 4 所示,假如我们定义丢帧率的 KPI 为 0.5%,但是经过测试达到了 3%,丢帧指标超标,那么我们将进一步对硬件的 CPU 占用率和 I/O 压力进行数据统计。拿到统计数据之后,平台还会告诉你具体是哪一个进程产生了 CPU 和 I/O 的压力,并给出优化建议。

图 4 系统分析和优化建议

案例二:应用分析案例

接下来我们举个应用内的性能分析案例,比如图库应用的图片删除场景,也可能产生丢帧和时延问题。

如图 5 所示,假设我们定义时延指标为 100ms,经过测试发现时延达到 1048ms,时延超标,然后我们将 ArkUI 图形栈函数展开,得到耗时占比,发现在系统层面上 FlushBuild()和 FlushLayout()耗时较长,然后平台会基于这些数据进行分析,找到可能原因,并给出优化建议,以帮助开发者明确下一步优化方向和动作。

图 5 应用分析和优化建议

三、3D 图形栈应用

图 6 是 3D 图形栈的整体架构,它包括了两部分,一部分是右侧的自研 3D 引擎,大家可以基于 3D 自研引擎进行 3D 应用的开发,比如 3D 动效、AR 应用、3D 壁纸等。

图 6 左边的部分是 SDK,我们提供了一系列 API,主要是针对大型的 3D 游戏,因为大型的 3D 游戏对于系统和 SOC 的压力较大,这些 API 可以帮助大型游戏更好地使用系统和硬件,比如 GTX、System Cache、画质增强等 SDK 接口。

接下来我们会为大家重点介绍 3D 应用分析基础、特性拆分和分析方法和 3D 壁纸调优案例。

图 6 “3D 图形栈”

1. 3D 应用分析基础

3D 应用对于性能功耗的压力会更大,所以更需要底层 SOC 以及系统的分析能力。其实无论是 3D 自研引擎,还是 SDK,都可以通过将负载进行特性拆分,然后进行细粒度分析。

如图 7 所示,场景 A 关键帧就是由渲染特性 HDR、Bloom 等粒子特效组成,再加上 CPU 负载就形成一个关键帧,这些关键帧连续起来就是 3D 场景。通过这些特性进一步调用到硬件逻辑的相关特性,比如 ALU、Texture 压力,最终通过 DDK 调用到硬件层执行。

图 7 “3D 应用分析基础”

有了以上分析基础后,我们再来看一下特性拆分和分析方法。

2. 特性拆分和分析方法

如图 8 所示,这帧渲染画面是由 Particle、Shadow map、Point light、Bloom 等特效组成,如果 GPU 的负载较重,性能出现瓶颈,如何找到问题的根因呢?我们把这一帧的 GLES 的指令截取到,并将每一个单特性进行分拆,然后看每一个单特性(如 Particle)对硬件造成的压力。特性拆完后再结合 GPU counters 来帮助我们定位根因。

图 8 特性拆分

如何使用 GPU counters 来定位问题呢?如图 9 所示,场景 C 提示 fragment cycles 比较重,所以要求开发者减少像素渲染。而对于场景 A,不仅 Fragment cycles 很重,而 memory R/W 以及 Vertex cycles 都比较重,那么就要针对这几个瓶颈进行优化。

图 9 GPU Counters

3D 壁纸调优案例

我们举一个 3D 壁纸调优的案例给大家展示如何找到性能瓶颈。

图 10 “3D 壁纸调优”

如图 10 所示,用 Blender 制作 3D 壁纸模型,再用我们的自研引擎增加渲染效果,最终形成一个有光照、反射的画面。

我们将 3D 壁纸画面进行特性剥离,再看特性剥离后每一个单特性对硬件造成的压力,数据如表 1 所示。发现表面细分(顶点 50W)+点光(1 术)+反射面的归一化电流达到了 1921.33,性能出现较大恶化,如果使用一般的测试工具,就只能到这一步了。

但我们的工具可以帮助大家进一步分析。我们结合表 2 的 Counters 来帮助大家定位问题。

在表 2 的第一、二组数据可以看到,将反射面减少,会发现“shadercycles”从 1910 降低到 1190,这提示开发者“shader”写的过于复杂了。

我们进一步将顶点数从 50W 减少到 5W,会发现“VertexComputeCycles”从 459 降低到 93.2,说明“VertexComputeCycle”就是一个需要优化的瓶颈。

通过这样的分析方式,就可以逐步定位到问题,并找到优化的方向,从而达成性能功耗和画质的平衡。

四、图形栈工具

我们前文介绍的 2D 和 3D 图形应用的分析优化的能力都集成于 HarmonyOS 图形栈的测试平台——DevEco Testing。

图 11 DevEco Testing-图形栈测试分析能力

如图 11 所示,DevEco Testing 是一个“三端+自动化”的结构,其中三端包括设备端、PC 端和云端,而自动化就是可以使 2D 或 3D 应用的做到自动化测试,同时还具备以下测试能力:

  • 性能、功耗、热的采集和分析

  • 游戏测试自动化能力

  • 大数据统计和分析

  • 增强型服务:独立 APK、帧采集回放、画质检测、多路测试等

在以上测试能力中,有 3 个增强型服务测试能力是我们的特色:

(1) 独立的 APK 测试能力

如图 12 所示,该工具支持脱离 PC 的方式进行测试,可直接在被测设备上部署工具,并且在进行设备应用操作时,可以实时展示数据。比如出现帧率的巨大下降时,可以直接在屏幕上展示数据并提供测试的报告,非常直观和便捷。

图 12 灵活的独立 APK 测试

(2) 分布式渲染多路测试

该工具适用于 HarmonyOS 分布式多设备场景,可以绑定多个设备(如手机+笔记本),并且该工具平台可以把这些设备的测试报告进行绑定,形成完整的测试报告。

(3) 支持单帧或多帧的采集和回放功能

如图 13 所示,该工具可以采集一帧或多帧 API Trace 结果,然后进行回放,再结合 GPU Counters 进行定位(如前文壁纸调优案例所述)。

图 13 单帧或多帧采集回放

五、结语

HarmonyOS 图形栈是整个 HarmonyOS 操作系统的基座,包括 ArkUI 2D 和 3D 部分。图形栈的测试是一个分层接口,包括应用层、系统层以及硬件层,可以帮助开发测试者从用户体验指标到深入了解系统和硬件发生了什么。这些测试服务能力集成 DevEco Testing 下的图形图像测试工具,欢迎大家下载使用。

用户头像

每一位开发者都是华为要汇聚的星星之火 2021.10.15 加入

提供HarmonyOS关键技术解析、版本更新、开发者实践和活动资讯,欢迎各位开发者加入HarmonyOS生态,一起创造无限可能!

评论

发布
暂无评论
图形测试分析毫无头绪?HarmonyOS图形栈测试技术帮你解决|HDC2021技术分论坛