当前位置: 首页 > 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;是…...

STM32F407硬件COM事件实战:六步换相避坑指南(附CubeMX配置)

STM32F407硬件COM事件六步换相实战&#xff1a;从CubeMX配置到避坑指南 在无刷电机控制领域&#xff0c;六步换相是最基础也最关键的环节之一。传统软件换相方式存在PWM通道更新不同步的痛点&#xff0c;而STM32F407的硬件COM事件功能恰好能完美解决这个问题。本文将带您深入实…...

收藏备用!小白程序员必看:从基础到进阶,彻底吃透Prompt与提示工程

本文将从基础入门到进阶实操&#xff0c;全面拆解Prompt的核心知识点&#xff0c;涵盖概念定义、分类维度、核心要素、工作原理&#xff0c;以及可直接套用的实用提示工程方法。全程避开晦涩术语&#xff0c;用程序员易懂的表述搭配具体案例&#xff0c;适配刚接触大模型的小白…...

逆向工程实现原理深度解析:Hook技术高效突破百度网盘macOS版系统限制

逆向工程实现原理深度解析&#xff1a;Hook技术高效突破百度网盘macOS版系统限制 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS BaiduNetdiskPlugin-m…...

快马AI一键生成:Mac系统OpenClaw自动化工具安装与原型验证脚本

今天在折腾一个自动化工具OpenClaw的安装&#xff0c;发现Mac系统下的配置过程有点繁琐&#xff0c;正好用InsCode(快马)平台快速生成了一个原型验证脚本&#xff0c;整个过程比想象中顺畅很多。记录下这个轻量级解决方案的实现思路&#xff0c;特别适合需要快速验证工具功能的…...

从ROS1到ROS2:手把手教你移植hdl_localization激光点云定位包(含完整CMakeLists.txt修改指南)

从ROS1到ROS2&#xff1a;激光点云定位包的现代化移植实战指南 激光SLAM技术正在经历从ROS1到ROS2的范式迁移浪潮。作为核心定位算法之一&#xff0c;hdl_localization的移植不仅是构建系统的转换&#xff0c;更是一次架构思维的升级。本文将带您深入理解ament_cmake的模块化设…...

OpenClaw技能扩展:安装Qwen3-4B专用插件实现代码生成

OpenClaw技能扩展&#xff1a;安装Qwen3-4B专用插件实现代码生成 1. 为什么需要Qwen3-4B专用技能 作为一个长期与代码打交道的开发者&#xff0c;我一直在寻找能够提升编码效率的工具。当我第一次接触OpenClaw时&#xff0c;最吸引我的不是它的基础自动化能力&#xff0c;而是…...

零代码构建智能安防平台:WVP-GB28181-Pro的5个技术突破

零代码构建智能安防平台&#xff1a;WVP-GB28181-Pro的5个技术突破 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR接入。支持…...

告别重复造轮子:用快马AI一键生成Unity通用数据管理模块,提升开发效率

今天想和大家分享一个提升Unity开发效率的实用技巧——如何快速构建一个通用的游戏数据管理模块。这个模块可以帮我们告别重复造轮子的痛苦&#xff0c;把更多精力放在游戏核心玩法的开发上。 为什么需要通用数据管理模块 在Unity开发中&#xff0c;我们经常需要处理各种游戏数…...

Flink on K8s实战:从源码到部署,手把手教你自定义Job提交流程

Flink on K8s深度定制&#xff1a;从源码改造到生产级部署的全链路实践 1. 为什么需要自定义Flink on K8s的提交流程&#xff1f; 在标准的Flink on Kubernetes部署中&#xff0c;官方提供的客户端工具已经能够满足基础需求。但当企业面临以下场景时&#xff0c;原生方案就会显…...

Win10自带应用太多?3分钟教你用PowerShell精准卸载(附常用应用命令大全)

Win10系统精简指南&#xff1a;PowerShell精准卸载内置应用全攻略 每次打开开始菜单&#xff0c;那些从未使用过的内置应用图标是否让您感到烦躁&#xff1f;作为技术从业者&#xff0c;我们更希望拥有一个干净高效的工作环境。本文将带您深入探索PowerShell在Windows系统管理中…...