perfetto命令 抓取 trace

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: 63488
    fill_policy: DISCARD
}
buffers: {
    size_kb: 2048
    fill_policy: DISCARD
}
data_sources: {
    config {
        name: "android.gpu.memory"
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}
data_sources: {
    config {
        name: "linux.sys_stats"
        sys_stats_config {
            meminfo_period_ms: 1000
            meminfo_counters: MEMINFO_MEM_FREE
            meminfo_counters: MEMINFO_MEM_TOTAL
            meminfo_counters: MEMINFO_SWAP_FREE
            meminfo_counters: MEMINFO_SWAP_TOTAL
            stat_period_ms: 1000
            stat_counters: STAT_CPU_TIMES
            stat_counters: STAT_FORK_COUNT
            cpufreq_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

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值