首页 > 其他分享 >#星计划# DevEco Studio Profiler工具分析应用启动性能

#星计划# DevEco Studio Profiler工具分析应用启动性能

时间:2023-12-28 10:34:32浏览次数:38  
标签:DevEco Launch 泳道 启动 Profiler 耗时 Studio 应用

Launch Profiler概述

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++;
  }
 }
}

使用约束

  • 已通过USB连接设备

  • 仅支持OpenHarmony API 10及以上版本的Stage工程

  • 不支持对命令拉起的release应用进行Launch分析,也不可对其进行Launch录制。

如何使用Launch Profiler录制数据

  1. 首先打开profiler,以DevEco Studio 4.0.0.400版本为例,可以通过如下三种方式打开Profiler:
  • 在DevEco Studio顶部菜单栏中选择“View -> Tool Windows -> Profiler”。

  • 在DevEco Studio底部工具栏中单击“Profiler”。

  • 按“Double Shift”或者“Crtl+Shift+A”打开搜索功能,搜索“Profiler”。

  1. 创建Launch任务并启动录制

profiler_launch.jpg

① 打开Profiler性能分析器;

② 选择待分析的设备与应用进程;

③ 选择Launch工具;

④ 点击create Session按钮创建启动分析任务;

⑤ 准备好调试环境后,点击开始录制启动数据,再次点击结束录制。

说明:

  1. 针对调测应用的当前运行情况,Profiler对其做如下处理:
  • 如选择的是已安装但未启动的应用,在启动该分析任务时,会自动拉起应用,进行数据录制,结束录制后可正常进入解析阶段。

  • 如选择的是正在运行的应用,在启动该分析任务时,会先将应用关停,再自动拉起应用,进行数据录制,结束录制后可正常进入解析阶段。

  1. 在任务录制(recording)及分析(analyzing)的过程中,请不要主动断开应用或者设备,否则可能导致分析任务异常失败。

如何使用Launch Profiler分析数据

“Launch”泳道显示启动生命周期各阶段的耗时分布情况,如下图:

profiler_launch_time.jpg

① Process Creating:进程创建阶段。该阶段主要是AppSpawn fork子进程,AMS创建ability

② Application Launching:应用程序启动阶段。该阶段主要是资源加载、Application相关对象的创建与初始化、依赖模块的加载等

③ UI Ability Launching:UIAbiity启动阶段。该阶段主要是资源加载、Ability相关对象的创建与初始化、依赖模块的加载等

④ UI Ability OnForeground:UIAbility置为前台阶段。该阶段主要是加载应用首页的源码和so以及创建应用首页内各个组件

⑤ First Frame - App Phase:应用侧首帧。在FlushTask中把之前加载的组件上树并布局

⑥ First Frame - Render Phase:渲染侧首帧。render_service接受下一帧应用来的首页布局信息,并绘制渲染

⑦ EntryAbility:渲染完成,首页显示

展开“Launch”泳道还包含多个与进程启动有关联的子泳道:

  • “Static Initialization”子泳道:展示启动过程中各静态资源库的加载耗时;

  • “Running CPU Cores”子泳道:展示启动过程中的主线程具体运行在哪个CPU核心;

  • “le.startup_demo”子泳道:展示启动过程的主线程的状态和Trace数据;

针对应用冷启动问题的性能分析,有以下两种方式可以选择,一种是分析主线程的Trace数据,另一种则是分析采样得到的函数热点。

分析主线程的Trace数据

从“Launch”泳道可以很明显的看出UI Ability OnForeground阶段的耗时占据应用冷启动过程的大部分时间,如下图

profiler_launch_lane.jpg

① 单击“Launch”泳道上的UI Ability OnForeground阶段,在下方的“Details”详情面板中,可查看到所选阶段的耗时统计情况;

② 展开UI Ability OnForeground统计信息折叠表,可以看到各函数的具体耗时信息;

③ 根据Duration找到耗时最长的函数aboutToAppear;

④ 单击profiler_turn.jpg按钮,可直接跳转至主线程的打点任务中,查看相关Trace数据,如下图

profiler_launch_main_lane.jpg

可以发现aboutToAppear函数的耗时占据UI Ability OnForeground阶段的大部分时间,结合应用代码将aboutToAppear函数中的耗时计算任务以异步延迟的方式处理后,可以得到如下“Launch”泳道。

profiler_launch_handled_lane.jpg

上述对比可以发现将耗时的计算任务以异步延迟的方式处理后可以显著缩短UI Ability OnForeground阶段的耗时,提升应用的冷启动速度。

分析采样得到的函数热点

我们也可以分析采样得到的函数热点直观的显示应用冷启动过程中具体函数的耗时,如下图

profiler_launch_analysis.jpg

① 单击“Launch”泳道上的UI Ability OnForeground阶段;

② 选择“ArkTS Callstack”泳道,其会基于时间轴展示CPU使用率和状态的变化,以及当前调用栈名称和调用类型;

③ 下方“Details”详情面板中查看到这段时间内的函数热点,其会以Top-Down形式的树状列表进行展示。很明显aboutToAppear函数中的computeTask函数耗时最多,占整个阶段的81%

此外,点击Flame Chart按钮打开火焰图可以更直观的看出热点函数的耗时情况,如下图:

profiler_launch_flame_chart.jpg

根据上述步骤,使用异步延迟处理后的函数热点如下,可以发现aboutToAppear函数的执行耗时只占整个UI Ability OnForeground阶段的5.8%。

profiler_launch_result.jpg

上述方法开发者可以选择自己习惯的方式去查看。一般来说,如果所选的时间段里,函数栈比较复杂的话,用火焰图找热点会更高效。当锁定到某个热点函数之后,只需要双击函数结点,Profiler工具就会为您自动打开对应的源文件,并聚焦到相应代码行。上述前提是这个源文件须是属于当前工程,并且是在DevEco Studio内完成编译的。

在使用Launch Profiler工具获取启动各阶段的耗时信息时,需要应用结合实际开发需要修改。无特殊情况下,应该避免在应用启动的生命周期函数内执行耗时操作,若需要可以使用异步延迟处理或者抛到其他线程处理。

提示

  1. Profiler为Launch分析数据提供了全局搜索能力。单击分析窗口左上角的profiler_magnifier.jpg,根据界面提示信息输入需要搜索的项目,可获取到相关内容的定位,使用搜索框的<、>按键可依次显示返回结果的详细内容。
  2. 在任务分析窗口,可以通过“Ctrl+鼠标滚轮”缩放时间轴,通过“Shift+鼠标滚轮”左右移动时间轴。

本文作者:zhushangyuan_

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​

标签:DevEco,Launch,泳道,启动,Profiler,耗时,Studio,应用
From: https://blog.51cto.com/harmonyos/9010327

相关文章

  • android-studio-2021.1.1.11-windows 版本遇到的各种大坑
    1、使用2023.12月的最新版本会无法选择java语言开发,所以必须选择较老的版本,比如我选择的android-studiobumbblebee 2021.1.1.11这个版本就可以选择java语言。2、不光需要设置代码自动补全提示,更重要的是最新的SDK,androidapi34有bug,无法语法提示,也可能是不支持我所使用的语......
  • 将开源免费进行到底,ThreadX开源电脑端GUIBuilder图形开发工具GUIX Studio
    上个月微软刚刚宣布将ThreadXRTOS全家桶贡献给Eclipse基金会,免费供大家商用,宽松的MIT授权方式,就差这个GUIXStudio没有开源了,而且Windows还经常检索不到,并且也不提供离线包。1、软件包有点大,700MB,直接分享到百度云了:链接:https://pan.baidu.com/s/1tS8IDWrIXGiCTbHxwxEkDA  提取......
  • cmd 中文乱码 VS Studio utf-8 中文乱码
      2、永久修改win键+R,输入regedit,确定。打开注册表编辑器按顺序找到HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\CommandProcessor。点击右键-新建,选择“字符串值”。命名为“autorun”,点击右击修改,数值数据填写“chcp65001”,确定。这时候打开cmd命令窗口就会看到,和之......
  • 微软云Azure Open AI(三):Studio 的使用
    1.登录azureopenaistudiohttps://oai.azure.com/2.在“模型”窗口可以看到自己可以使用的各种模型,包括GPT3、4,Dall-e-3等模型当然除了自带的原生GPT模型,也可以基于现有模型进一步微调再训练。点击“创建自定义模型”。我们可以上传自定义的jsonl文件,达到自定义模型的目的,当然jso......
  • 使用prisma studio链接任何server
    使用prismastudio链接任何server‍当我在serverless中使用prisma成功后理所当然的我想让prismastudio连接到我位于serverless中的服务当我在互联网搜索prismastudioremotesqlite时,我没有找到合适的方案和我同样想法的问题:https://community.fly.io/t/expose-sqli......
  • SQL Server Management Studio (SSMS)教程:创建数据库create database、创建表create t
    USEmasterGOIFNOTEXISTS(SELECTnameFROMsys.databasesWHEREname=N'TutorialDB')CREATEDATABASE[TutorialDB]GOUSE[TutorialDB]--Createanewtablecalled'Customers'inschema'dbo'--Dropthetable......
  • LabelStudio数据标注详细方法
    文章目录情感分析任务LabelStudio使用指南1.label-studio安装2.label-studio项目创建3.情感分析任务标注3.1语句级情感分类任务3.2属性级情感分析任务3.2.1属性-情感极性-观点词抽取(1)Span类型标签(2)Relation类型标签3.2.2属性-情感极性抽取3.2.3属性-观点词抽取3.2.4属......
  • 关于Android studio新版本和NEW UI显示返回按钮的设置
    1.新版Androidstudio问题因为在新版本的AndroidStudio中,默认情况下是没有直接的选项来显示返回上一步按钮在状态栏上的,可以通过以下方法来实现返回上一步的功能:在AndroidStudio的顶部菜单栏中,选择"View"。在"View"菜单中,选择"Appearance"。在"Appearance"子菜单中,勾选"Toolbar"......
  • 【小沐学CAD】虚拟仿真开发工具:GL Studio(功能)
    1、简介https://disti.com/gl-studio/https://ww2.mathworks.cn/products/connections/product_detail/gl-studio.htmlDiSTI是HMI软件、虚拟驾驶舱、仪表、信息娱乐、集群显示器和嵌入式UI解决方案的领先提供商。GLStudio是HMI&UI/UXDesignSoftware。2、软件功能......
  • [软件使用] Visual Studio项目开发实用Tips
    作者:丶布布1.查看项目调用的库路径: 在调试时,通过工具栏上的调试—窗口—模块,可以看到自己调用库对应的路径或者按下Ctrl+Alt+U,会弹出Modules,就可以查看你调用的dll的路径当出现更新库文件之后,仍然存在问题,可通过此方法判断更新的库存放的路径是否正确2.VS2015Release生成......