【第八期】利用Launch完成启动时延分析
开发者需要分析启动过程的耗时瓶颈,优化应用或服务的冷启动速度时,可使用 Profiler 的 Launch 场景分析功能,录制启动过程中的关键数据,识别启动缓慢的原因。Profiler Launch 可拆解应用冷启动过程,抓取各阶段的耗时数据,帮助开发者快速分析冷启动过程的耗时瓶颈。

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:
【第八期】利用Launch完成启动时延分析-华为开发者话题 | 华为开发者联盟
开发者需要分析启动过程的耗时瓶颈,优化应用或服务的冷启动速度时,可使用 Profiler 的 Launch 场景分析功能,录制启动过程中的关键数据,识别启动缓慢的原因。Profiler Launch 可拆解应用冷启动过程,抓取各阶段的耗时数据,帮助开发者快速分析冷启动过程的耗时瓶颈。
Launch操作及相关介绍
启动模式介绍
录制前应用的启动模式分为自动启动
和手动启动
,可点击图标切换两种不同模式:
• 若选择自动启动模式,当用户使用 Launch 模板并开始录制时,将自动重启所选应用。
• 若选择手动启动模式,在开始录制时,只会自动终止所选应用,等待界面出现弹窗提示。启动应用后,开发者需要手动启动应用。
抓取 Launch 数据
1. 打开DevEco Profiler,选择场景模板,创建会话。
• 在设备列表中选择设备。
• 在进程列表中选择要调试的应用(可以是正在运行的应用,也可以是已安装但未启动的应用)。
• 在主界面的新建任务区域,单击要创建的场景调优分析任务类型,并单击「Create Session」。

2. 配置并确认会话环境。在录制详情区域,工具控制栏上有很多小图标,鼠标悬停会显示功能提示,可以添加一些录制选项。各泳道区域也有下拉框选项,下拉选择不同的设置可以调整录制功能。
支持在录制前单击
指定要录制的泳道。

3. 启动录制,复现性能劣化场景。
单击任务窗口左上角的
或左侧的任务列表中的
,启动录制。在调优设备操作APP,执行要验证的操作,等待任务状态由“initializing”变为“recording”。整个录制过程中DevEco Profiler不能再点击其他的模板进行操作,如果想录制其他模板可以结束本次录制,重新选择其他模板开始录制。

4. 性能劣化场景完成,停止录制。
单击停止按钮
,进入数据解析阶段,泳道任务状态由“analyzing”变为“rendering”时解析结束,右侧调优详情区域显示具体调优内容。解析过程可能包含大量的数据,请耐心等待解析完成。

查看启动过程中各阶段的耗时情况
1. 框选 Launch 泳道图区域的一个阶段或多个阶段,在下方的 Details 区域中,可查看到所选阶段的耗时统计情况。展开各阶段的统计信息折叠表,可以看到各个任务的具体耗时信息,单击跳转按钮,可直接跳转至相关线程打点任务中。

2. DevEco Studio 6.0.0 Beta1 版本新增 Load ETS Files 区域,支持查看冷启动过程中 ETS 文件的加载情况。各字段含义如下:


3. 切换到 TOP Redundant 区域,可查看冷启动过程中 TOP 100 冗余 ETS 加载文件信息。若 File Name 字段显示为蓝色,双击可快速跳转至对应工程源文件。


分析静态资源库加载耗时
1. 展开 Launch 泳道,其中的 Static Initialization 子泳道展示启动过程中各静态资源库的加载耗时。
2. 单击单个静态资源库色块,或框选多个静态资源库色块,下方的 Details 区域展示所选对象的耗时统计信息。针对耗时超过预期的加载任务,可单击跳转按钮,跳转至相关线程打点任务中进行深度分析。

查看核心线程在CPU Core的运行情况
1. 展开 Launch 泳道,其中的 Running CPU Cores 子泳道展示启动过程中的关键线程具体运行在哪个 CPU 核心。
2. 单击单个进程色块或框选多个进程色块,下方的 Details 区域展示所选对象的运行情况统计信息,单击 CPU 的跳转按钮,可跳转到 CPU Core 泳道查看详细的调度信息。

查看启动过程相关的线程Trace数据
1. 展开 Launch 泳道,除 Static Initialization 和 Running CPU Cores 子泳道外,还包含启动过程的关键线程的状态和 Trace 数据。
2. 单击单个切片色块或框选多个切片色块,可查看所选对象的详情。

冷启动缓慢示例分析
运行以下示例代码,开发者可以明显感知到应用启动速度较慢。接下来,开发者可以通过此示例,结合 Launch 分析应用冷启动缓慢的问题。

首先创建 Launch 分析录制,可以观察到整个启动时间较长。UI Ability OnForeground 阶段在应用冷启动过程中耗时最多,达到了 3.3 秒。因此,需要重点分析该阶段的耗时。

针对应用冷启动问题的性能分析,可以选择分析主线程的 Trace 数据或采样得到的函数热点。
分析主线程的Trace数据



在 UI Ability OnForeground 阶段的耗时主要由 aboutToAppear 引起。通过分析 aboutToAppear 中的代码逻辑,可以确定计算任务 computeTask 是导致耗时的原因。
分析采样得到的函数热点
1. 单击“Launch”泳道的UI Ability OnForeground阶段。
2. 选择“ArkTS Callstack”泳道,它会基于时间轴展示CPU使用率和状态变化,以及当前调用栈名称和类型。
3. 在“Details”详情面板中,可以查看这段时间内的函数热点,以Top-Down形式的树状列表展示。computeTask函数在aboutToAppear函数中耗时最多,占整个阶段的97.9%。双击该函数可跳转到源码。
4. 此外,点击底部Flame Chart按钮打开火焰图可以更直观的看出热点函数的耗时情况,如下图所示。

冷启动速度优化
通过前面的分析,冷启动缓慢的原因是在 aboutToAppear 方法中执行了耗时计算任务。可以将 computeTask 以异步延时的方式处理,优化后的代码如下:

重新编译并运行程序,录制 Launch 过程。优化后,UI Ability OnForeground 阶段的耗时显著缩短。

查看首帧卡顿
为了识别首帧是否卡顿,可以先查看 Launch 的 Frame 泳道。应用的首帧渲染提交在 First Frame – App Phase 阶段,APP 侧的这一帧表示应用渲染的首帧。

如上所示,36号帧被标记为红色,表示首帧出现了卡顿。鼠标左键36号帧,可以看到它的期望提交渲染时间为左边白色竖线区域所示,这里出现了比较严重的延时。发现问题后,开发者可以参考前面讲到的示例进行问题定位和优化。
通过本文你已经学会了如何利用 Launch 工具分析启动慢的问题,下一章节我们将介绍一些通用的提升启动速度的方法。
—————————————————————————————————–
🔗 官网开发者学堂视频:https://developer.huawei.com/consumer/cn/training/result?type2List=201783644516849879&orderBy=1&courseType=5

🔗 社区DFX专题文章: https://developer.huawei.com/consumer/cn/forum/subject/2101218731402391001


【扫码加入 HarmonyOS DFX 技术交流群】
本文由 @华为开发者联盟 授权发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Unsplash,基于CC0协议
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务
- 目前还没评论,等你发挥!

起点课堂会员权益



