鸿蒙开发中如何快速定位丢帧

前言

大家好,我是simple。我的理想是利用科技手段来解决生活中遇到的各种问题

在前端、app等在做性能优化的过程中,我们都比较注重丢帧的问题,因为丢帧往往会让用户觉得有些卡顿。但是有时随着项目的庞大,有些时候我们无法快速定位到丢帧的情况,这时我们就需要借助这个分析工具帮助我们快速定位这个代码问题。

1. Frame Profile简介

Profiler是DevEco-Studio的IDE自带功能,可以在最下排看到profiler工具,或者通过view > tool windows > profiler进入,然后选中Frame。Frame Profiler用于录制GPU数据信息,录制完成的子泳道对应录制过程中各个进程的帧数据,主要用于深度分析应用或服务卡顿丢帧的原因。

Profiler里面包含很多工具,包括内存泄露分析、掉帧卡帧分析、应用启动耗时分析等等,有机会可以讲讲。

2. 使用介绍

2.1 创建会话

  • 「创建会话」是分析的起点:点击 "Create Session" 后,工具会与目标设备 / 应用建立连接,开始监听并记录性能数据。
  • 会话期间可进行操作:创建会话后,你可以在应用中复现需要分析的场景(如滑动列表、执行动画等),工具会持续采集该过程中的性能数据。
  • 会话结束后数据可复用:停止会话后,采集的数据会被保存,你可以随时回看该会话的帧率趋势、帧耗时分布等信息,无需重新复现场景。

大白话就是我们只需要点击create session的按钮,然后点击开始,随后我们就可以针对某些卡顿的情况操作app,它就会帮我们记录app所有的场景性能数据。

2.2 分析会话

操作完上述步骤,我们就能得到一个如下的会话数据,此时frame对应的就是Gpu的使用情况。

我们通过wasd按钮可以对对应的数据进行缩放,看到我们想要看的那些数据中。

从图可以看到,上面有用户操作事件,我们也可以通过操作事件去进行一些标记,就能够更快的找到我们需要定位的帧数。而下面标红的帧块可以看出,本应该发生在213帧的,却因为一些原因导致它延迟了发生在了215帧。

系统希望它能够在8ms内运行完的计算,却要在16ms内才彻底运行完毕。因此在这里失去了2帧。

tips: 窗口下方的"Frame"区域中会显示选定帧的关键信息,如VSync编号、开始时间、App应用侧持续时间、App应用侧业务逻辑耗时、Render Service侧持续时间、GPU持续时间、总持续时间、卡顿丢帧类型以及可能出现卡顿的原因等。"Non UI"区域中会显示非UI耗时最大的函数,如开始时间、结束时间、持续时间,函数名等。

2.3 代码分析

此时我们往下看,就能发现对应执行的callstack已经陈列在下面了(我们重点看ts或者是ets的文件)然后对一些可疑或者运行时间比较长的文件进行双击,即可快速看到里面的方法,然后对这个方法进行适当的优化即可。

总结

关键步骤:复现场景→定位区间→分析帧耗时→追踪函数→优化验证

相关推荐
yaoyaoxingzhe7 小时前
HarmonyOS应用《玄象》开发实战:Canvas 绘制星宿连线:moveTo / lineTo / stroke 路径绘制
harmonyos·鸿蒙
想你依然心痛8 小时前
HarmonyOS ArkTS 自适应布局与响应式设计实战指南
arkts·响应式布局·mediaquery·gridrow·断点设计·自适应栅格·harmonyos多设备适配
echohelloworld1111 小时前
HarmonyOS应用开发实战:猫猫大作战-springMotion 三参数、responsiveSpringMotion 响应式弹簧、与 EaseO
harmonyos·鸿蒙
想你依然心痛11 小时前
HarmonyOS ArkTS 组件样式与主题系统深度实战
arkts·主题切换·组件样式·design token·colortoken·样式工程化
达子66614 小时前
第13章_HarmonyOs开发图解 视频
华为·音视频·harmonyos
fiona202614 小时前
HarmonyOS应用开发实战:猫猫大作战-如何精准设置缓存数量来平衡内存与滚动流畅度
harmonyos·鸿蒙
程序员黑豆15 小时前
鸿蒙应用开发之父子组件传参:@Prop 装饰器使用教程
前端·后端·harmonyos
FF2501_9402285815 小时前
HarmonyOS应用《玄象》开发实战:宜忌标签云:ForEach + padding + borderRadius 的 chip 实现
harmonyos·鸿蒙
程序员黑豆15 小时前
鸿蒙应用开发之V2状态管理:@Local、@ObservedV2、@Trace 使用教程
前端·后端·harmonyos