perfetto 分析camera启动性能

news/2024/12/31 6:19:14/

将启动过程拆解成 APP 、Framework、HAL 三层,分别统计三层的启动耗时

文章目录

    • 1. 启动模拟器
    • 2. 抓取trace
    • 3.将camera启动拆解为6个部分分析
      • 3.1 APP层OpenCamera耗时
        • 3.1.1 找到并标记 luncher 进程的第二个 deliverInputEvent
        • 3.1.2 找到并标记 CameraServer的connectDevice函数
      • 3.2 HAL层OpenCamera耗时
      • 3.3 APP层结束调用CameraServer的connectDevice函数 -----> 开始调用 endConfigure
      • 3.4 HAL层开始调用 endConfigure -----> 结束调用 endConfigure
      • 3.5 APP层结束调用 endConfigure -----> 开始调用 submitRequestList
      • 3.6 HAL层开始调用 submitRequestList -----> CameraServer 收到第一帧

1. 启动模拟器

H:
cd H:\Sdk\emulator
.\emulator.exe -list-avds
.\emulator.exe -writable-system -avd Pixel_XL_API_32_6  -no-snapshot-load -qemu

在这里插入图片描述

2. 抓取trace

再开启一个 cmd 窗口 ,输入下面的命令

H:
cd H:\Sdk\emulator
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

在这里插入图片描述

点击 camera app 的图标,等待抓取10秒后自动结束
在这里插入图片描述

将 trace 拷贝到电脑

adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

在这里插入图片描述
在这里插入图片描述
打开下面的网址

https://ui.perfetto.dev/

在这里插入图片描述

将 trace 文件拖到这个网页
在这里插入图片描述

3.将camera启动拆解为6个部分分析

3.1 APP层OpenCamera耗时

app Icon按下后抬起来 -----> 开始调用CameraServer的connectDevice函数

3.1.1 找到并标记 luncher 进程的第二个 deliverInputEvent

在搜索栏里面搜索 deliverInput
找到 launcher 进程里面的 deliverInputEvent, deliverInputEvent 代表点击事件,都是成对出现的,第一个deliverInputEvent 按下,第二个deliverInputEvent 代表抬起。

在这里插入图片描述

所以,我们要找到 launcher 进程里面的第二个 deliverInputEvent。先用鼠标滚轮将网页的页面缩小,这样在右面就可以看到第二个 deliverInputEvent。
在这里插入图片描述
点击 deliverInputEvent 右侧的星星
在这里插入图片描述
可以看到 deliverInputEvent 已经被抬升到最顶层,这样就很方便了
在这里插入图片描述
下面将第二个 deliverInputEvent 的耗时标记出来
鼠标左键点击 deliverInputEvent

在这里插入图片描述
然后按 shit+m,这样可以永久选中 deliverInputEvent
在这里插入图片描述

3.1.2 找到并标记 CameraServer的connectDevice函数

在搜索栏搜索 connectDevice,然后敲回车键
在这里插入图片描述
按 f 键定位到 connectDevice(有时候可能看不到定位的目标,可以上下滑动一下就看到了)
在这里插入图片描述
点击选中 connectDevice,然后按 shift+m 永久选中

在这里插入图片描述
然后点击 connectDevice 右边的星星,让其置于top层
最后,测量两个trace之间的距离,课可以看出app层打开 camera 的耗时是 1.1秒

在这里插入图片描述

3.2 HAL层OpenCamera耗时

开始调用CameraServer的connectDevice函数 -----> 结束调用CameraServer的connectDevice函数
可以看出 connectDevice 的耗时是 19.4 ms

在这里插入图片描述

3.3 APP层结束调用CameraServer的connectDevice函数 -----> 开始调用 endConfigure

搜索 endConfigure,然后按下回车键,最后再按 f 键
在这里插入图片描述
没有看到 endConfigure,只要你把鼠标网上滚动一点点就能看到了
在这里插入图片描述

点击 星星,将endConfigure至于top层
在这里插入图片描述
左键点击选中 endConfigure,然后按 shift+m 永久选中
在这里插入图片描述
测量 结束调用connectDevice 到 开始调用endConfigure,发现耗时 314.4 ms
在这里插入图片描述

3.4 HAL层开始调用 endConfigure -----> 结束调用 endConfigure

可以发现 endConfigure耗时 24.9 ms
在这里插入图片描述

3.5 APP层结束调用 endConfigure -----> 开始调用 submitRequestList

APP层结束调用 endConfigure 代表 已经创建好 Session,因此这里测量的是创建好 Session 到 下 Request 的耗时。
搜索栏搜索 submitRequestList,点击回车,再按下 f 键,定位到 submitRequestList

在这里插入图片描述
左键选中 submitRequestList,再按 shift + m 永久选中
在这里插入图片描述
测量结束调用 endConfigure -----> 开始调用 submitRequestList耗时为 1.8 ms
在这里插入图片描述

3.6 HAL层开始调用 submitRequestList -----> CameraServer 收到第一帧

first full buffer 代表 CameraServer 收到第一帧
在搜索栏搜索 first full buffer ,回车,按 f 键定位

在这里插入图片描述
可以看到这里是 stream0 的 first full buffer,也就是说每路 Stream 都有 first full buffer
点击 stream0:first full buffer ,然后按 shift + m 永久选中

在这里插入图片描述
点击星星,置于 top 层
在这里插入图片描述
测量 开始调用 submitRequestList -----> CameraServer 收到第一帧的耗时为 296.3ms
在这里插入图片描述


http://www.ppmy.cn/news/37418.html

相关文章

公网远程连接MongoDB数据库【内网穿透】

文章目录1. 安装数据库2. 内网穿透2.1 创建隧道映射2.2 测试随机公网地址远程连接3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供…

【论文写作】如何表示增长和降低

在英语中,表示增长和降低的含义可以用许多不同的词汇和表达方式来表达。以下是一些常用的表达方式: 增长的表达方式: Increase: 表示数量或程度的增加,例如:The number of students increased by 10% this year.&…

为什么都在用springboot,springboot开发步骤

Spring Boot快速开发是一个基于Spring框架的全栈框架,它可以帮助我们快速搭建企业级应用程序。 Spring Boot快速开发的优势: 1.自动配置:Spring Boot采用自动配置的方式,大量减少了开发者对项目的配置工作,同时也降低…

常见问题解决笔记---自用

目录el-table可勾选,且分页反显vue 项目, 父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)vscode vue 格式化 双引号格式化为单引号 去掉末尾逗号 去掉分号React中使用CSSgit上传项目到gitee的基本步骤判断对象…

JVM与Java体系

JVM体系跟着尚硅谷的康师傅学习 JVM内存与垃圾回收概述 除了大部分的Java开发 人员,除了会在项目中使用到与Java平台相关的框架,与API,对于Java的虚拟机了解甚少。但是也需要我们知道如何处理OOM,SOF异常,除了…

iframe的基本介绍与使用

一、介绍 iframe&#xff08;内嵌框架&#xff09;是 HTML 中一种用于将一个网页嵌入到另一个网页中的标签&#xff0c;它可以在一个页面中显示来自其他页面的内容。在网页中&#xff0c;使用<iframe>标签可以将一个网页嵌套在另一个网页中&#xff0c;实现网页间的互联…

windows安装MySQL 5.7.30

1.下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-winx64.zip 2.安装 解压&#xff1a;解压到D盘&#xff0c;改名为&#xff1a;mysql-5.7.30 设置环境变量 系统—>高级系统设置—>环境变量—>系统变量 新建 变量名&#xff1a;MYSQL_HOME 值&am…

03_2440_裸机时钟体系

总结 这里soc从外界得到外部时钟源,通过硬件的锁相环(PLL)进行加速, 加速完的内部时钟通过分频为三个时钟源 cpu_fclk ahb_hclk apb_pclk 给不同的器件进行使用 soc内部时钟源获取和分类的流程 从datasheet中的第7章,把所有器件的时钟源说明清楚 从外部的时钟源进来 到分发到…