HarmonyOS:调优工具DevEco Profiler
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18516696
➤如果链接不是为敢技术的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
(1)、无需关注数据采集细节,分析启动、卡顿、耗时、内存、能耗等场景性能问题。
(2)、操作简单、快速上手,帮助用户搭建鸿蒙应用性能模型。
(3)、 Top-Down设计理念和数据展现范式,直通代码行体验,高效调优。
(1)、在DevEco Studio顶部菜单栏中选择 【View -> Tool Windows -> Profiler】。
(2)、在DevEco Studio底部工具栏中单击 Profiler。
(3)、按“Double Shift”或者“Ctrl+Shift+A”打开搜索功能,搜索 Profiler。
3、会话区又分为:设备应用选择区、会话列表区、场景选择区。
(1)、设备应用选择区:选择调优设备(目前仅支持真机),进程列表及当前应用进程。
(2)、会话列表区:已创建的调优分析任务,单击某会话数据区显示其调优内容;选择设备和进程后,此处默认显示Realtime Monitor 任务。
(3)、场景选择区:新建任务的入口,Profier提供Launch(启动)、Frame(卡顿)、Time(耗时)、Allocation(内存)、Snapshot(内存快照)、CPU(运行分析)等场景化分析任务类型。
4、会话区详细操作流程:
(1)、会话区依次点击设备、应用、进程,选择想要分析的目标。
(2)、若目标正在运行,实时监控(Realtime Monitor)自动开启,问题初步定界。
(3)、选择详细定位相应性能问题图标,点击 Create Session 创建会话。
(4)、会话列表新增会话条目,说明如下:
i、会话的名称(图例中的“Frame”)、会话当前状态(图例中的“ldle”)、会话对应的录制时长信息(图例中的“0ms”),此外还有开始和删除按钮。
ii、点击开始按钮后,会话就会进入录制状态,开始按钮变成结束按钮,开发者可复现性能裂化场景。
iii、点击结束按钮,会话进入数据解析状态,结束按钮变为解析图标,开发者耐心等待。
iv、数据解析完成后,可视化展示在数据区,解析图标变为数据导出按钮,开发者可选择数据导出,用于数据备份或者团队共享,导入数据在创建会话界面的 Open File。
5、数据区菜单:
(1)、工具控制栏:提供辅助功能的入口,以及会话和时间轴的控制能力。可以启动录制、标记功能、收藏功能等等。
(2)、时间轴:提供横向时间轴,用于显示数据时间戳。
(3)、标记栏:用于放置标记。
(4)、泳道区:数据泳道图区域,展示数据随时间变化的特征,开发者快速发现数据异常的时间段,框选后在详情面板查看细节。是比较重要的部分,整个数据的显示都在这个部分
(5)、详情面板:详细数据展示区域,以各类表格为主,帮助开发者查看完整的详细数据,More 面板,是对左侧 Details区中选中数据的补充描述。在泳道区做框选和点选操作后,可以把时间范围详细信息展示出来。
6、数据区详细介绍。
(1)、会话控制:工具栏的首个按钮,如图所示分别对应开启录制、结束录制功能,第三个状态则代表录制完成。
(2)、泳道过滤:开发者可以按照自己的理解去除掉部分泳道单元的录制。
(3)、时间轴控制:操作最高频操作,提供按钮点击和快捷键。
放大:+按钮,快捷键 W 或者 Ctrl+鼠标向上滚轮。
缩小:-按钮,快捷键S 或者 Ctrl+鼠标向下滚轮。
左移:向左拖动滚动条,快捷键 A 或者 Shift+鼠标向上滚轮。
右移:向右拖动滚动条,快捷键S或者 Shift+鼠标向下滚轮。
7、标记
(1)、标记1:开发者可以在时间轴下方的标记区域(Makers)点击释放单个标记,也可以在框选时间段后,点击旗子按钮放置该时间段的标记。
(2)、标记2:工具控制栏中可查看到所有标记,可以快速查看标记描述、时刻,修改颜色,删除标记,以及跳转到标记时刻。
(3)、标记的作用:主要是为了在时间轴上快速找到某一个位置,方便用户去定位它之前找到的问题。
8、数据区也提供泳道单元收藏功能。
(1)、泳道单元收藏:开发者将关注的泳道单元提拉到泳道区域的顶端。
(2)、开发者可以再次点击该按钮取消收藏,工具还提供了压缩泳道的能力,可以帮助开发者将收藏的泳道单元进行折叠。工具还拥有统一的隐藏功能,可以一键将收藏的所有泳道隐藏起来。
(3)、离线符号导入:开发者分析Native的函数热点,选择带有调试信息的的so库导入,将采集到的函数偏移信息转换为对应的源码符号。
(4)、源码跳转:详情面板中所展示的函数栈帧信息,开发者只需要双击栈帧结点,工具便会尝试为开发者在编辑器中打开相关源码文件,并定位到对应行号。
2、初步定位:Profiler提供实时监控(Realtime Monitor)能力,提供全方位的设备资源监测,覆盖系统事件、异常事件报告、CPU占用、内存占用、实时帧率、GPU使用率以及能耗等多个维度的数据,帮助开发者初步识别性能瓶颈,定界问题所在。
3、实时界面。
(1)、启停控制:可通过会话区域按钮来即时控制实时监控界面的录制状态。
(2)、详细数据展示:鼠标悬浮于所关心的泳道数据上时,界面上会出现当前时间点Tooltips。将鼠标悬浮于时间轴之上时,实时监控页面内的所有泳道均会以Tooltips展示出该时刻的数据。
(3)、图例选择:图例均支持选择/反选来增加/去除泳道内这一数据的展示,内容改变后泳道内的数据会自动缩放以适应泳道的高度。
4、模版:一共有6个模版,前四种是比较基础的模版,后两种是把前面4种模版的基础能力,进行了场景化得到的。开发者可以针对不同的性能问题场景选择不同模式的分析任务。
(1)、四种是比较基础的模版,耗时、内存、CPU基础场景。
Time Insight、Allocation Insight、Snapshot Insight、CPU Insight。
(2)、场景化多维度数据分析。
Frame Insight、Launch Insight
三、执行效率 - Time Insight模版
(1)、ArkTS Callstack泳道:ArkTS侧函数调用栈父泳道展示进程CPU使用率。子泳道展示线程CPU使用率及方舟虚拟机多实例执行状态(重点关注色块部分)。
(2)、User Trace泳道:ArkTS代码中进行自定义打点信息,以任务方块呈现(@ohos.hiTraceMeter)。在函数开始和结束的位置进行打点获取函数耗时。
(3)、Native Callstack泳道:包括Native侧C或者C++的函数采样,在C++代码中调用的对应的函数会抓取到这些函数的分配。展示函数调用方面的一些情况。Native侧函数调用栈,父泳道展示进程CPU使用率,子泳道展示线程CPU使用率及Native调用栈(重点关注与应用同名线程)。
2、把泳道区框选后,就会出现详细区的信息,框选ArkTS Callstack泳道后,详细区展示函数耗时调用栈信息,所有的函数做了归并展示,展示当前函数在这个时间范围内自身运行时长,子函数运行时长。
(1)、函数耗时调用栈展示:支持用户ArkTS代码到用户Native代码缝合展示,Category分类有ArkTS层、NAPI层、Native层。(高亮显示为用户侧代码,置灰显示为系统侧代码)。
(2)、函数耗时火焰图展示:打开 Flame Chart 开关开启火焰图展示,支持放大缩小常见操作,此外还支持关键字搜索功能。开启火焰图展示可以更方便地查看哪些函数在虚拟机上的执行情况。
PSS:进程独占内存和按比例分配共享库占用内存之和。
RSS:进程独占内存和相关共享库占用内存之和。
USS:进程独占内存。
3、ArkTS Allocation泳道:方舟虚拟机上的堆内存分配与使用情况主泳道展示进程的ArkTS堆内存总和子泳道展示对应实例在录制过程中的内存分配情况,灰色柱子代表内存已释放,绿色柱子则代表内存在录制结束时仍未释放。
4、Native Allocation泳道:Native内存分配,展示具体的Native内存分配情况(包含堆内存和匿名内存),包括内存统计数据、内存分配栈以及内存分配事件。
5、框选ArkTS Allocation泳道后,下面就会展示当前框架的时间段。
(1)、ArkTS Allocation洋情:展示当前框选时段内存活对象的详细信息,包括距GC Root的距离、対象自身内存大小、对象关联内存大小等。支持关联对象跳转。
五、内存快照 - Snapshot Insight模版
1、针对方舟虚拟机,Profile提供了内存快照分析能力,结合Memory实时占用情况,分析不同时刻的方舟虚拟机内存占用的差异。在Snapshot的Comparison页签中,可以进行快照的差异对比,比较内容包括:新增数、删除数、相对变化数、分配大小、释放大小、相对变化大小等。分析快照间的对比数据,有助于定位内存问题的具体位置。这个模版主要就是用来进行内存对比的。
2、ArkTS Snapshot泳道:紫色区块代表方舟堆快照,区块的长度代表堆快照的生成时间,并显示该快照内存大小。录制过程中工具栏点击进行方舟堆内存拍照,录制过程中工具栏点击触发方舟虚拟机GC。
(1)、构造函数名称后的x数字,表示该类型对象数量,可单击折叠按钮展开。
(2)、实例对象名称后的 @数字,表示该对象实例ID。
(3)、单击列表中任一对象,Retainers 区域会显示该对象的引用链,通过引用链信息可以分析对象被谁持有、如何持有,从而定位问题产生的原因
4、CPU Core子泳道:
(1)、泳道显示各CPU核心调度信息。
(2)、置灰非同进程时间片。
(3)、查看单时间片基本运行信息及调度时延信息。
(4)、框选查看进程维度统计信息及时间片列表。
(5)、支持显示完整调度链。
5、Process子泳道:
(1)、线程的运行状态和任务打点情况。
(2)、框选查看线程状态列表和打点任务列表。
(3)、支持显示用户自定义打点。
(4)、支持搜索、排序、过滤功能。
(5)、支持关键信息跳转功能。
七、卡顿丢帧 - Frame Insight模版
2、Frame Insight模版主要包含的功能。
(1)、Anomaly泳道:应用主线程图像编码耗时情况,耗时超过50% Vsync周期告警。
(2)、Frame泳道:主泳道显示GPU使用率。子泳道显示 Render Service 侧帧数据和应用侧帧数据。
(3)、ArkUl Component泳道:用户自定义组件和系统组件绘制耗时情况。
(4)、Frame Insight还集成了Time、CPU场景分析的功能,方便开发者在分析卡顿丢帧数据时对比同时段的其他资源占用情况。
(5)、Frame Insight模版是一个复合模版,还在分析帧率低同时可以查看对应的调用栈信息。
3、Frame泳道:
(1)、正常渲染的帧显示为绿色,出现卡顿的帧显示为红色。
(2)、框选父泳道支持卡顿丢帧率、卡顿次数等;
(3)、单选某帧查看详情,支持跳转到对应打点任务
4、ArkUl Component泳道:这个泳道主要是对组件进行打点,让用户对自己的组件使用过程中的耗时有进一步的分析。
(1)、支持显示系统组件和用户自定义组件的耗时情况。
(2)、框选查看各组件节点个数,耗时统计情况。
4、Launch Insight模版也是一个复合模版,其在分析应用启动的过程中,还可以定位和它相关的代码问题,Launch模版支持分析静态资源库加载耗时,也支持查看核心线程在CPU Core的运行情况。支持查看启动过程、关键线程Trace数据,这个Trace数据对开发者来定位启动过程中的问题是非常重要的。
九、操作界面:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
2018-10-30 [Swift]字符串(String类、NSString类)常用操作
2018-10-30 [Swift实际操作]九、完整实例-(1)在iTunesConnect网站中创建产品