共计 4080 个字符,预计需要花费 11 分钟才能阅读完成。
作者: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 图形栈”
- 3D 利用剖析根底
3D 利用对于性能功耗的压力会更大,所以更须要底层 SOC 以及零碎的剖析能力。其实无论是 3D 自研引擎,还是 SDK,都能够通过将负载进行个性拆分,而后进行细粒度剖析。
如图 7 所示,场景 A 关键帧就是由渲染个性 HDR、Bloom 等粒子特效组成,再加上 CPU 负载就造成一个关键帧,这些关键帧间断起来就是 3D 场景。通过这些个性进一步调用到硬件逻辑的相干个性,比方 ALU、Texture 压力,最终通过 DDK 调用到硬件层执行。
图 7“3D 利用剖析根底”
有了以上剖析根底后,咱们再来看一下个性拆分和分析方法。
- 个性拆分和分析方法
如图 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 下的图形图像测试工具,欢送大家下载应用。