想了解更多关于开源的内容,请访问:
51CTO 开源基础软件社区
https://ost.51cto.com
DevEco Studio内置Profiler分析调优工具,其中Launch主要用于分析应用或服务的启动耗时,分析启动周期各阶段的耗时情况、核心线程的运行情况等,协助开发者识别启动缓慢的原因。此外,Launch任务窗口还集成了Time、CPU、Frame场景分析任务的功能,方便开发者在分析启动耗时的过程中同步对比同一时段的其他资源占用情况。
如下代码在页面绘制之前的aboutToAppear生命周期函数内执行了耗时的计算任务,导致应用冷启动耗时长,文章后续将以本案例场景来简单介绍Frame Profiler的使用。
@Entry
@Component
struct Index {
@State private text: string = "hello world";
private count: number = 0;
aboutToAppear() {
this.computeTask();
}
build() {
Column({space: 10}) {
Text(this.text).fontSize(50)
}
.width('100%')
.height('100%')
.padding(10)
}
computeTask() {
this.count = 0;
while (this.count < 10000000) {
this.count++;
}
}
}
首先打开profiler,以DevEco Studio 4.0.0.400版本为例,可以通过如下三种方式打开Profiler:
创建Launch任务并启动录制。
说明:
针对调测应用的当前运行情况,Profiler对其做如下处理:
在任务录制(recording)及分析(analyzing)的过程中,请不要主动断开应用或者设备,否则可能导致分析任务异常失败。
“Launch”泳道显示启动生命周期各阶段的耗时分布情况,如下图:
展开“Launch”泳道还包含多个与进程启动有关联的子泳道:
针对应用冷启动问题的性能分析,有以下两种方式可以选择,一种是分析主线程的Trace数据,另一种则是分析采样得到的函数热点。
从“Launch”泳道可以很明显的看出UI Ability OnForeground阶段的耗时占据应用冷启动过程的大部分时间,如下图:
按钮,可直接跳转至主线程的打点任务中,查看相关Trace数据,如下图
可以发现aboutToAppear函数的耗时占据UI Ability OnForeground阶段的大部分时间,结合应用代码将aboutToAppear函数中的耗时计算任务以异步延迟的方式处理后,可以得到如下“Launch”泳道。
上述对比可以发现将耗时的计算任务以异步延迟的方式处理后可以显著缩短UI Ability OnForeground阶段的耗时,提升应用的冷启动速度。
我们也可以分析采样得到的函数热点直观的显示应用冷启动过程中具体函数的耗时,如下图:
此外,点击Flame Chart按钮打开火焰图可以更直观的看出热点函数的耗时情况,如下图:
根据上述步骤,使用异步延迟处理后的函数热点如下,可以发现aboutToAppear函数的执行耗时只占整个UI Ability OnForeground阶段的5.8%。
上述方法开发者可以选择自己习惯的方式去查看。一般来说,如果所选的时间段里,函数栈比较复杂的话,用火焰图找热点会更高效。当锁定到某个热点函数之后,只需要双击函数结点,Profiler工具就会为您自动打开对应的源文件,并聚焦到相应代码行。上述前提是这个源文件须是属于当前工程,并且是在DevEco Studio内完成编译的。
在使用Launch Profiler工具获取启动各阶段的耗时信息时,需要应用结合实际开发需要修改。无特殊情况下,应该避免在应用启动的生命周期函数内执行耗时操作,若需要可以使用异步延迟处理或者抛到其他线程处理。
Profiler为Launch分析数据提供了全局搜索能力。单击分析窗口左上角的,根据界面提示信息输入需要搜索的项目,可获取到相关内容的定位,使用搜索框的<、>按键可依次显示返回结果的详细内容。
在任务分析窗口,可以通过“Ctrl+鼠标滚轮”缩放时间轴,通过“Shift+鼠标滚轮”左右移动时间轴。
想了解更多关于开源的内容,请访问:
51CTO 开源基础软件社区
https://ost.51cto.com