当前位置: 首页 > news >正文

鸿蒙开发-DevEco Studio Profiler工具进行帧率分析

Frame Profiler概述

DevEco Studio内置Profiler分析调优工具,其中Frame分析调优功能,用于录制GPU数据信息,录制完成展开之后的子泳道对应录制过程中各个进程的帧数据,主要用于深度分析应用或服务卡顿丢帧的原因。此外,Frame任务窗口还集成了Time、CPU场景分析任务的功能,方便开发者在分析丢帧数据时同步对比同一时段的其他资源占用情况。

场景示例

如下代码使用了Grid来实现一个网格,但是在外层套了3层stack容器,会导致组件刷新和渲染耗时长,文章后续将以本案例场景来简单介绍Frame Profiler的使用。

@Entry
@Component
struct Index {@State children: Number[] = Array.from(Array(2000), (_v, k) => k);build() {Scroll() {Grid() {ForEach(this.children, (item) => {GridItem() {Stack() {Stack() {Stack() {Text(item.toString())}}}}}, item => item)}.columnsTemplate('1fr 1fr 1fr 1fr').columnsGap(0).rowsGap(0).size({ width: "100%", height: "100%" })}}
}

Frame Profiler使用约束

  • 已通过USB连接设备
  • 仅支持OpenHarmony API 10及以上版本的Stage工程

如何使用Frame 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. 创建Frame分析任务并录制相关数据

① 打开Profiler性能分析器;

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

③ 选择Frame工具;

④ 点击Create Session创建录制任务;

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

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

如何使用Frame Profiler分析数据

结束录制任务后,找到Frame泳道并展开,如下图:

  • Frame泳道展开之后的子泳道对应录制过程中各个进程的帧数据,在RS Frame和App Frame标签的泳道中绿色帧为正常帧,红色帧为卡顿帧。点击相关的帧提交数据,如果有关联的App侧帧/RS侧帧,则会进行连线表示提交关系。
  • 一帧绘制的期望耗时,与FPS的大小有关,一般情况下FPS为60,对应的Vsync周期为16.6ms,即App侧/RS侧的帧耗时,一般需要在16.6ms内绘制完成。App侧帧/RS侧帧卡顿的计算标准为帧的实际结束时间晚于帧的期望结束时间即为卡顿。
  • 对于卡顿帧,浅红色和深红色的分界处为期望结束时间。同时针对卡顿帧,点击之后也会出现两条线,代表此帧的期望开始时间(Expected Start)和期望结束时间(Expected End)。

通过Frame泳道,开发者们可以快速发现丢帧的位置,并完成初步的定界:

  • 如果是App侧帧处理有红色帧出现,那需要进一步审视在UI线程中的处理逻辑,是否过于复杂或低效,又或者是被别的什么任务抢占了资源;
  • 如果是RS侧帧处理有红色帧出现,那需要审视是否是界面布局过于复杂。

后者可以借助ArkUI Inspector等工具进一步分析,具体参考页面布局检查器ArkUI Inspector工具使用指导。上述案例中的场景明显属于前者中App侧的发送帧卡顿,针对前一种现象可以点击查看卡顿帧的Details信息,点击以跳转到此帧对应的trace数据。如下所示,卡顿帧对应Trace中的FlushLayoutTask为重新测量和布局所有的Item。

去除3层stack容器后,得到的Frame泳道数据如下,可以看到滑动页面无丢帧现象。

开发者在使用Frame Profiler分析工具时需要结合应用代码进行相关信息的分析,确定需要优化的代码,避免造成视图嵌套层次过多。

此外,需要说明的是Frame泳道可以快速定位到出现卡顿丢帧的时段,并且能够对丢帧原因做一个初步判断,深层次根因开发者还可以基于ArkTS Callstack泳道进行分析,具体使用方式可以参考耗时分析器Time Profiler工具使用指导。

相关文章:

鸿蒙开发-DevEco Studio Profiler工具进行帧率分析

Frame Profiler概述 DevEco Studio内置Profiler分析调优工具,其中Frame分析调优功能,用于录制GPU数据信息,录制完成展开之后的子泳道对应录制过程中各个进程的帧数据,主要用于深度分析应用或服务卡顿丢帧的原因。此外&#xff0c…...

Google推出Telecom Jetpack库,让Android通话应用创建更简单

Google推出Telecom Jetpack库,让Android通话应用创建更简单 Telecom Jetpack库的最新Alpha版本已经推出。该库提供了多个API,以简化Android开发者创建语音和/或视频通话应用程序的过程,支持常见功能,例如接听/拒绝、音频路由等等…...

倒计时1天|解锁「PolarDB开发者大会」正确打开方式

1月17日 9:30-16:30 北京嘉瑞文化中心 PolarDB开发者大会 明天就要和大家就见面啦~ 大会参会指南现已出炉 各位开发者们,请查收~ 👇👇👇 点击 大会主页 or 扫描上方二维码 一键抵达大会官网👇 查看…...

链表-两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 // 递归版本 class Solution {public ListNode swapPairs(ListNode head) {// base case 退出提交if(head nu…...

vue下载文件流效果demo(整理)

在 Vue 项目中&#xff0c;你可以使用 FileSaver.js 库来方便地下载文件流。FileSaver.js 封装了不同浏览器的下载方式&#xff0c;使得下载文件更加简单和兼容。以下是一个完整的示例方法&#xff1a; 首先&#xff0c;安装 FileSaver.js 库&#xff1a; <template>&l…...

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

一、Cornerstone3D 是什么&#xff1f; Cornerstone3D官网&#xff1a;https://www.cornerstonejs.org/ 在线查看显示效果&#xff08;加载需时间&#xff0c;可先点击运行&#xff09;&#xff0c;欢迎fork 二、代码示例 了解了Cornerstone是什么&#xff0c;有什么作用后&…...

Unity3D PVP游戏位置同步算法优化详解

在Unity3D中&#xff0c;PVP&#xff08;Player versus Player&#xff09;游戏的位置同步是一项重要的技术&#xff0c;它决定了游戏中玩家之间的互动体验。本文将详细介绍Unity3D PVP游戏位置同步算法的优化方法&#xff0c;并给出相应的技术详解和代码实现。 对啦&#xff…...

【速成】蓝桥杯嵌入式省一教程

写在前面 蓝桥杯虽然是水赛&#xff0c;含金量不如其他老牌竞赛那么高&#xff0c;但对提高自身的能力还是有一定帮助的。无论你是想混个奖项加加综测分&#xff0c;还是想学学单片机、嵌入式的知识&#xff0c;蓝桥杯电子类的嵌入式竞赛都值得参加一次。当然蓝桥杯电子类竞赛…...

通过Lambda表达式获取字段列名,以及需要注意的地方

日常开发用MyBatis Plus的lambda表达式查询&#xff0c;不用手写column列名&#xff0c;不易出错且便于改动&#xff0c;如下&#xff1a; LambdaQueryWrapper<LanguageIntercept> lambdaQueryWrapper new LambdaQueryWrapper(); lambdaQueryWrapper.eq(LanguageInterc…...

消息队列的作用与使用场景?

一、消息队列的作用 队列的主要作用是消除高并发访问高峰&#xff0c;加快网站的响应速度。 在不使用消息队列的情况下&#xff0c;用户的请求数据直接写入数据库&#xff0c;在高并发的情况下&#xff0c;会对数据库造成巨大的压力&#xff0c;同时也使得系统响应延迟加剧。 …...

前端常见面试题之ajax、http

文章目录 一、手写ajax请求1. get2. post3. xhr.readyState4. xhr.status5. xhr.open 二、跨域三、cookie、localStorage和sessionStorage四、http1. http常见的状态码有哪些2. http常见的header有哪些3. 什么是RestfulAPI4. 描述一下http的缓存机制5. https 一、手写ajax请求 …...

林江院长:让斜视的孩子改“斜”归正,“正视”未来

读写时跳行、不敢和别人对视、拍照时不敢看镜头......这些不便是不少斜视患儿每天都在经历的日常。 斜视是目前儿童常见的眼科疾病之一&#xff0c;该眼病不仅给孩子的外在形象带来影响&#xff0c;更重要的是会影响双眼视功能及身心健康&#xff0c;其危害不容小觑。 7岁男孩晓…...

windows系统Mysql备份脚本

一.背景 用的windows server 2019服务器&#xff0c;mysql8.0.34&#xff0c;还是应该每天备份一下。以前做了很多次&#xff0c;主要是带了2个徒弟&#xff0c;还是要写出来。 二.备份脚本 chcp 936 set date_tmp%date:~0,10% set datetime%date_tmp:/%%time:~0,2%%time:~3,…...

localStorage、sessionStorage、vuex区别和使用感悟

一、介绍及区别 localStorage的生命周期是永久&#xff1b;不手动在浏览器提供的UI上清除localStorage信息&#xff0c;否则这些信息将永远存在。 sessionStorage的生命周期为当前窗口或标签页&#xff0c;一旦窗口或标签页被永久关闭&#xff0c;那么所有通过sessionStorage存…...

Linux用户提权

新建用户 用root账户修改文件&#xff0c;添加信任用户 使用sudo提权&#xff0c;可以使用 **root删除新建账户**...

ZooKeeper 安装

ZooKeeper 的安装包括单机模式安装&#xff0c;以及集群模式安装。 单机模式较简单&#xff0c;是指只部署一个 zk 进程&#xff0c;客户端直接与该 zk 进程进行通信。在开发测试环境下&#xff0c;通常来说没有较多的物理资源&#xff0c;因此我们常使用单机模式。 当然在单…...

Realm Management Extension领域管理扩展之安全状态

RME基于Arm TrustZone技术。TrustZone技术在Armv6中引入,提供以下两个安全状态: 安全状态(Secure state)非安全状态(Non-secure state)以下图表显示了在AArch64中的这两个安全状态以及通常在每个安全状态中找到的软件组件: 该架构将在安全状态运行的软件与在非安全状态运…...

统计学-R语言-2.2

文章目录 前言导入.RData文件方式1方式2方式3 导入程序包方式一方式二 总结 前言 本篇文章是将上篇得软件安装完&#xff0c;对其部分功能进行介绍。 导入.RData文件 在我们日常练习时会有.RData文件导入&#xff0c;并对其进行分析&#xff0c;下面是两种方导入.RData文件。…...

Windows 项目从0到1的部署

目录 一. 安装jdk 1.1 安装jdk 1.2 配置jdk的环境配置jdk 1.3 配置成功 二. 配置tomcat 2.1 启动tomcat 2.2 防火墙设置 三. 安装MySQL 3.1 安装步骤 3.2 内部连接 3.3 外部连接 四. 部署项目 4.1 项目部署 4.2 修改mysql的用户密码 一. 安装jdk 这里给大家准备好了jdk和…...

基于SSM的戏剧推广网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…...

JMeter并发与持续性压测:从按钮操作到系统心跳诊断

1. 这不是“点几下就出报告”的玩具&#xff0c;而是压测工程师的听诊器很多人第一次打开 JMeter&#xff0c;以为它就是个高级版的 Postman&#xff1a;填个 URL、点个“启动”&#xff0c;等几秒弹出个 Summary Report&#xff0c;看到平均响应时间 86ms 就松一口气&#xff…...

机器学习预测因果边界:从数据稀缺子群体到精准决策

1. 项目概述与核心挑战在医疗、经济、政策评估等关键决策领域&#xff0c;我们常常需要回答一个核心问题&#xff1a;“如果我采取了某项干预措施&#xff0c;结果会有什么不同&#xff1f;”这本质上是一个因果推断问题&#xff0c;它超越了简单的相关性分析&#xff0c;旨在揭…...

近场通信连续孔径阵列技术与波传播建模

1. 近场通信中的连续孔径阵列技术在无线通信领域&#xff0c;近场通信技术正经历着从传统离散天线阵列向连续孔径阵列的范式转变。这种技术演进的核心在于对电磁波前进行前所未有的精细控制&#xff0c;特别是在6G及未来通信系统的研发中展现出巨大潜力。连续孔径阵列与传统天线…...

如何快速掌握Universal x86 Tuning Utility:新手终极调优指南

如何快速掌握Universal x86 Tuning Utility&#xff1a;新手终极调优指南 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是…...

DLSS Swapper终极指南:免费开源的DLSS文件智能管理工具

DLSS Swapper终极指南&#xff1a;免费开源的DLSS文件智能管理工具 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾经遇到过这样的困扰&#xff1a;你心爱的游戏明明支持DLSS技术&#xff0c;但游戏自带的DLSS…...

UFLUX v2.0:融合P模型与XGBoost的GPP估算混合建模框架

1. 项目概述与核心价值如果你正在从事全球变化生态学、碳循环研究或者遥感应用领域的工作&#xff0c;那么“如何更准确地估算陆地生态系统的总初级生产力”这个问题&#xff0c;大概率是你绕不开的挑战。总初级生产力&#xff0c;也就是我们常说的GPP&#xff0c;它衡量的是植…...

量子机器学习在基因组分类中的实践:特征映射与模型选择指南

1. 项目概述&#xff1a;当量子计算遇上基因组学如果你和我一样&#xff0c;既对量子计算的神秘力量感到好奇&#xff0c;又长期在生物信息学的数据海洋里“游泳”&#xff0c;那么“量子机器学习”这个交叉领域绝对值得你投入时间。这听起来像是科幻小说的情节&#xff0c;但现…...

用if…elseif…end语句输出成绩等级

‌Matlab里面的if分支结构语句主要有单分支、双分支和多分支结构语句三种形式&#xff0c;前面两篇博文分别学习了单分支结构语句和双分支结构语句&#xff0c;这篇博文列出三种分支结构语句的特点&#xff0c;并对多分支结构语句进行学习。1、if…end语句if…end语句&#xff…...

机器学习辅助砌体结构均质化:从虚拟实验室到高效损伤本构模型

1. 项目概述&#xff1a;当机器学习遇见砌体结构分析在结构工程&#xff0c;尤其是历史建筑保护与抗震评估领域&#xff0c;我们这些从业者常年面对一个核心难题&#xff1a;如何高效且准确地模拟砌体结构的力学行为。砌体&#xff0c;这个由砖块和砂浆以特定方式组合而成的古老…...

为什么你的MJ图总像“老胶片过曝”?揭秘ISO模拟算法缺陷,5种降颗粒参数组合实测对比(含LUT映射表)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;为什么你的MJ图总像“老胶片过曝”&#xff1f;揭秘ISO模拟算法缺陷&#xff0c;5种降颗粒参数组合实测对比&#xff08;含LUT映射表&#xff09; MidJourney 默认的图像生成流程中隐式嵌入了一套基于扩散步长…...