鸿蒙(HarmonyOS)性能优化实战-帧率分析工具 Frame Profiler ...

打印 上一主题 下一主题

主题 1910|帖子 1910|积分 5730

Frame Profiler概述

DevEco Studio内置Profiler分析调优工具,此中Frame分析调优功能,用于录制GPU数据信息,录制完成展开之后的子泳道对应录制过程中各个进程的帧数据,主要用于深度分析应用或服务卡顿丢帧的缘故原由。此外,Frame使命窗口还集成了Time、CPU场景分析使命的功能,方便开发者在分析丢帧数据时同步对比同一时段的其他资源占用情况。
场景示例

如下代码利用了Grid来实现一个网格,但是在外层套了3层stack容器,会导致组件革新和渲染耗时长,文章后续将以本案例场景来简朴介绍Frame Profiler的利用。
  1. @Entry
  2. @Component
  3. struct Index {
  4. @State children: Number[] = Array.from(Array(2000), (_v, k) => k);
  5. build() {
  6.   Scroll() {
  7.    Grid() {
  8.     ForEach(this.children, (item) => {
  9.      GridItem() {
  10.       Stack() {
  11.        Stack() {
  12.         Stack() {
  13.          Text(item.toString())
  14.         }
  15.        }
  16.       }
  17.      }
  18.     }, item => item)
  19.    }
  20.    .columnsTemplate('1fr 1fr 1fr 1fr')
  21.    .columnsGap(0)
  22.    .rowsGap(0)
  23.    .size({ width: "100%", height: "100%" })
  24.   }
  25. }
  26. }
复制代码
Frame Profiler利用束缚



  • 已通过USB毗连设备
  • 仅支持OpenHarmony API 10及以上版本的Stage工程
如何利用Frame Profiler录制数据


  • 首先打开Profiler,以DevEco Studio 4.0.0.400版本为例,可以通过如下三种方式打开Profiler:


  • 在DevEco Studio顶部菜单栏中选择“View -> Tool Windows -> Profiler”。
  • 在DevEco Studio底部工具栏中单击“Profiler”。
  • 按“Double Shift”或者“Crtl+Shift+A”打开搜索功能,搜索“Profiler”。

  • 创建Frame分析使命并录制相关数据

① 打开Profiler性能分析器;
② 选择待分析的设备与应用进程;
③ 选择Frame工具;
④ 点击Create Session创建录制使命;
⑤ 准备好调试环境后,点击开始录制数据,再次点击结束录制。
分析: 在使命录制(recording)及分析(analyzing)的过程中,请不要主动断开应用或者设备,否则可能导致分析使命异常失败。
如何利用Frame Profiler分析数据

结束录制使命后,找到Frame泳道并展开,如下图:



  • Frame泳道展开之后的子泳道对应录制过程中各个进程的帧数据,在RS Frame和App Frame标签的泳道中绿色帧为正常帧,赤色帧为卡顿帧。点击相关的帧提交数据,如果有关联的App侧帧/RS侧帧,则会进行连线表示提交关系。
  • 一帧绘制的期望耗时,与FPS的大小有关,一般情况下FPS为60,对应的Vsync周期为16.6ms,即App侧/RS侧的帧耗时,一般必要在16.6ms内绘制完成。App侧帧/RS侧帧卡顿的计算标准为帧的实际结束时间晚于帧的期望结束时间即为卡顿。
  • 对于卡顿帧,浅赤色和深赤色的分界处为期望结束时间。同时针对卡顿帧,点击之后也会出现两条线,代表此帧的期望开始时间(Expected Start)和期望结束时间(Expected End)。
通过Frame泳道,开发者们可以快速发现丢帧的位置,并完成初步的定界:


  • 如果是App侧帧处理有赤色帧出现,那必要进一步审视在UI线程中的处理逻辑,是否过于复杂或低效,又或者是被别的什么使命抢占了资源;
  • 如果是RS侧帧处理有赤色帧出现,那必要审视是否是界面布局过于复杂。
后者可以借助ArkUI Inspector等工具进一步分析,具体参考页面布局查抄器ArkUI Inspector工具利用指导。上述案例中的场景明显属于前者中App侧的发送帧卡顿,针对前一种征象可以点击查看卡顿帧的Details信息,点击 以跳转到此帧对应的trace数据。如下所示,卡顿帧对应Trace中的FlushLayoutTask为重新测量和布局所有的Item。

去除3层stack容器后,得到的Frame泳道数据如下,可以看到滑动页面无丢帧征象。

开发者在利用Frame Profiler分析工具时必要联合应用代码进行相关信息的分析,确定必要优化的代码,避免造成视图嵌套条理过多。
此外,必要分析的是Frame泳道可以快速定位到出现卡顿丢帧的时段,并且可以或许对丢帧缘故原由做一个初步判定,深条理根因开发者还可以基于ArkTS Callstack泳道进行分析,具体利用方式可以参考耗时分析器Time Profiler工具利用指导。
提示


  • 帧率(FPS)的计算公式为:FPS = 1 / 时间间隔,此中,时间间隔指的是相邻两帧之间的时间差,可以框选两个正常帧的起始位置查看时间差。例如,如果两帧之间的时间间隔为16.6ms,则帧率为1/0.0166≈60FPS。
  • 在使命分析窗口,可以通过“Ctrl+鼠标滚轮”缩放时间轴,通过“Shift+鼠标滚轮”左右移动时间轴。
  • Profiler为Frame分析数据提供了全局搜索本领。单击分析窗口左上角的 ,根据界面提示信息输入必要搜索的项目,可获取到相关内容的定位,利用搜索框的<、>按键可依次表现返回结果的具体内容。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表