【第八期】利用Launch完成启动时延分析

0 评论 529 浏览 0 收藏 15 分钟

开发者需要分析启动过程的耗时瓶颈,优化应用或服务的冷启动速度时,可使用 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协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
海报
评论
评论请登录
  1. 目前还没评论,等你发挥!