1.启动Android 模拟器

进入到 cmd 中,敲入下面的命令

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

2.再打开一个 CMD 窗口,设置 traced 权限

adb shell setprop persist.traced.enable 1

3.验证是否打开 traced 权限

adb shell
getprop persist.traced.enable
ps -A|grep -i trace

4. 输入 perfetto 命令

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

其中 -o /data/misc/perfetto-traces/trace_file.perfetto-trace 意思就是说 将 trace 保存到手机的 /data/misc/perfetto-traces/ 路径下,且文件名为 trace_file.perfetto-trace
-t 10s 意思就是抓取 10 秒

点击照相APP,操作几下, 10秒后会自动停止抓取

5. 将 trace 从手机拷贝到电脑

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

在哪个路径执行的 上面的命令,文件就会被保存到哪里
可以看到拷贝好的 trace 文件

6. 在浏览器打开这个网址

https://ui.perfetto.dev/

然后把 trace 文件拖进来

7. 在 app 代码中封装一个 Trace 类

这里 GeekCamera2Trace 类是直接调用 Android 系统的 Trace 类的各种函数

package com.deepinout.geekcamera;import android.os.Build;
import android.os.Trace;public class GeekCamera2Trace {...public static void beginAsyncSection(String methodName, int cookie) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Trace.isEnabled()) {Trace.beginAsyncSection(methodName, cookie);}}public static void endAsyncSection(String methodName, int cookie) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Trace.isEnabled()) {Trace.endAsyncSection(methodName, cookie);}}public static void beginSection(String sectionName) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&Trace.isEnabled()) {Trace.beginSection(sectionName);}}public static void endSection() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&Trace.isEnabled()) {Trace.endSection();}}public static void setCounter(String counterName, long counterValue) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&Trace.isEnabled()) {Trace.setCounter(counterName, counterValue);}}
}

8. 在 app 的 openCamera 的代码前后分别加 Trace

9. 编译运行 app

10. 制作 config 文件

打开下面的网址

https://ui.perfetto.dev/

选取下面的选项

选好以后,复制下面的内容到一个文件

buffers: {size_kb: 63488fill_policy: DISCARD
}
buffers: {size_kb: 2048fill_policy: DISCARD
}
data_sources: {config {name: "android.gpu.memory"}
}
data_sources: {config {name: "linux.process_stats"target_buffer: 1process_stats_config {scan_all_processes_on_start: true}}
}
data_sources: {config {name: "linux.sys_stats"sys_stats_config {meminfo_period_ms: 1000meminfo_counters: MEMINFO_MEM_FREEmeminfo_counters: MEMINFO_MEM_TOTALmeminfo_counters: MEMINFO_SWAP_FREEmeminfo_counters: MEMINFO_SWAP_TOTALstat_period_ms: 1000stat_counters: STAT_CPU_TIMESstat_counters: STAT_FORK_COUNTcpufreq_period_ms: 1000}}
}
data_sources: {config {name: "linux.ftrace"ftrace_config {ftrace_events: "sched/sched_switch"ftrace_events: "power/suspend_resume"ftrace_events: "sched/sched_wakeup"ftrace_events: "sched/sched_wakeup_new"ftrace_events: "sched/sched_waking"ftrace_events: "power/cpu_frequency"ftrace_events: "power/cpu_idle"ftrace_events: "power/gpu_frequency"ftrace_events: "gpu_mem/gpu_mem_total"ftrace_events: "sched/sched_process_exit"ftrace_events: "sched/sched_process_free"ftrace_events: "task/task_newtask"ftrace_events: "task/task_rename"ftrace_events: "lowmemorykiller/lowmemory_kill"ftrace_events: "oom/oom_score_adj_update"ftrace_events: "ftrace/print"atrace_categories: "camera"atrace_categories: "gfx"atrace_categories: "hal"atrace_categories: "input"atrace_categories: "ss"atrace_categories: "view"atrace_categories: "wm"atrace_apps: "*"}}
}
duration_ms: 10000

改成自己的 app 的名字

我保存到了 H:\Sdk\emulator 下面,文件名字叫做 record_camera.config
(大家可以按照自己的喜好选择路径和设置文件名字)

在 cmd 或者 Android Studio 的 Terminal 中输入下面的命令

adb push record_camera.config /data/local/tmp/record_camera.config
adb shell “cat /data/local/tmp/record_camera.config | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.perfetto-trace”

报错:

解决办法:

保存
重新 Push 到模拟器
重复执行上面两行命令

adb push record_camera.config /data/local/tmp/record_camera.config
adb shell “cat /data/local/tmp/record_camera.config | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.perfetto-trace”


可以看到可以运行正常
点开 app ,然后点击拍照

这样就抓取好了 trace
拷贝trace 到电脑

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

可以看到抓取的 trace 文件

将这个文件拖到网页

https://ui.perfetto.dev/

搜索 GC2_App_openCamera

perfetto命令 抓取 trace相关推荐

  1. 使用ADB命令抓取手机日志——如手机无响应adb bugreport bugreport.txt

    测试抓包时的神仙技能adb bugreport > bugreport.txt 今天进行app端测试,手机多次出现无响应的情况 现在就可以使用ADB命令抓取一下手机的日志 步骤如下: adb b ...

  2. Android系统开发 默认壁纸的定制 主题风格的开发及定制 DDMS 常用adb 命令 抓取Log

    Android系统开发             Android系统本身的功能在增加和完善过程中.在系统开发中如果涉及系统API的改动,则一定要慎重,系统的API的改动可能涉及Android应用程序的不 ...

  3. android adb命令 抓取系统各种 log

    android adb命令 抓取系统各种 log getLog.bat: adb root adb remount adb wait-for-device adb logcat -v time > ...

  4. 使用ADB命令抓取手机日志——crash等无响应操作(adb bugreport > bugreport.txt 或 adb logcat -> F:/logcat.txt)

    第一步:前提条件安装adb 环境 参考:https://blog.csdn.net/chang995196962/article/details/109997391 第二步:链接手机,执行adb命令 ...

  5. adb 连接逍遥游模拟器搭配monkey命令 抓取 logcat日志

    1.首先必须安装SDK,没下载的下面连接下载 链接:https://pan.baidu.com/s/1oh0oqtNc5EMq7UHqVvLfRw 提取码:zhfc 复制这段内容后打开百度网盘手机Ap ...

  6. 抓取Systrace方法汇总

    目录 1. 使用Android Device Monitor抓取 Systrace 2. 使用命令行抓取 Systrace 3. 命令抓取Atrace 3.1. 抓取atrace 3.2. 转换为sy ...

  7. tcpdump抓取udp报文

    使用tcpdump命令抓取UDP 2000端口报文,并将报文保存到当前目录下的udp.cap文件,命令如下: tcpdump -i 网络接口名称 udp port 2000 -w ./udp.cap ...

  8. 深度解析windows调试技术之一 [抓取user mode dump文件的几重境界]

    抓取user mode dump文件的几重境界 导读 记得去年对一些朋友说过要写一些调试技术相关的文章,但是后来出于种种原因吧,还是没写成.最近终于有些时间,希望可以把这些文章补上.对于软件开发而言, ...

  9. MTK full dump抓取

    MTK full dump 抓取 环境搭建 为什么安装GAT和SpOffineDebugSuite 环境搭建以及使用 实践是检验真理的唯一标准 触发dump前 手动触发panic,使其进入橙屏幕抓取d ...

最新文章

  1. 用GPU拯救世界:英伟达斯坦福呼吁玩家捐献算力,投入新冠病毒相关蛋白质分布式计算...
  2. 51系列中data,idata,xdata,pdata的区别[笔记]
  3. DL之LeNet-5:LeNet-5算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  4. (转载)windows server 2003的注意事项
  5. shapefile导入oracle,shp2sdo.exe用法:shpfile导入OracleSpatial
  6. java8 按条件过滤集合
  7. 【Java】日期字符串转换java.sql.Date对象
  8. 获取线程名称 java 1615387415
  9. NB-IoT将成为未来5G物联网主流技术
  10. 创意美食海报psd分层模板,开启奇思妙想
  11. rip java_JavasScripV1.0.htm
  12. Linux 命令(98)—— basename 命令
  13. [转载] python中getpass模块
  14. 蓝桥杯2015年第六届C/C++省赛C组第一题-隔行变色
  15. 如何用python编写操作系统_操作系统介绍、python基础
  16. 如何在苹果Mac上保存终端命令?
  17. 苹果手机连wifi跳不出来登录网页解决办法
  18. JDK8新特性02 Lambda表达式02_Lambda语法规则
  19. 社会力量如何参与长城保护管理?国家文物局这样说
  20. 《岛》让伤口暴露在空气里吧

热门文章

  1. 在Windows Mobile上运行J2SE/J2ME!!!!!
  2. 房价的“合成谬误”与“棘轮效应”
  3. Stimulsoft Ultimate 2021.3.6 Crack
  4. 一键清理maven仓库无效文件
  5. linux安装软件程序(Debian【aptitude】、Red Hat系统【yum】、源代码安装)————附带详细方法
  6. 华为新系统鸿蒙手机测试,首个华为鸿蒙2.0测试 电池续航提升将近10%
  7. sqlite数据库备份与恢复
  8. 《云GIS技术与实践》第二章 云GIS核心技术 笔记
  9. linux进行校时ntp,Linux下快速搭建ntp时间同步服务器
  10. 关于数据库中的delete,truncate,drop