Anroid Perfetto

一、Perfetto 基础介绍

adb shell perfetto 是 Android 系统中调用 Perfetto 追踪工具的核心方式,Perfetto 是 Google 推出的高性能系统追踪工具(替代旧版 Systrace),支持追踪 CPU、内存、GPU、进程 / 线程调度、网络、系统调用、UI 渲染等全维度系统行为,适配 Android 10+(低版本需手动部署二进制文件)。

二、核心用法(adb shell perfetto)

1. 快速录制(极简模式)

直接使用预定义追踪类别,快速生成 trace 文件(适合简单调试):

复制代码
# 录制10秒,输出到默认可写目录,追踪CPU调度、频率、UI渲染等基础维度
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:指定 trace 文件输出路径(/data/misc/perfetto-traces/ 是系统默认可写目录);
  • -t:录制时长(支持 s/ms/m,如 10s5000ms1m);
  • 后续的 sched/freq 等是预定义追踪类别,常用类别:
类别 追踪内容
sched CPU 进程 / 线程调度
freq CPU 频率变化
idle CPU 空闲状态
am ActivityManager 事件
wm WindowManager 事件
gfx 图形渲染(VSync、GPU 绘制)
view View 测量 / 布局 / 绘制
memory 内存分配 / 回收
binder_driver Binder IPC 通信
dalvik ART 虚拟机(GC、JIT)
2 导出 trace 文件到电脑
复制代码
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace e:/temp/Perfetto/Perfetto01  # 导出到电脑

三、分析 trace 文件

  1. 打开 Perfetto 官方分析 UI:https://ui.perfetto.dev/
  2. 点击「Open trace file」上传导出的文件;

四、app 如何加trace

复制代码
//java  加trace

import android.os.Trace;

  public void onDrawFrame(GL10 gl10) {

        mIndex++;
        Trace.traceBegin(Trace.TRACE_TAG_APP, "onDrawFrame_"+mIndex);
        
        .....
   
        Trace.traceEnd(Trace.TRACE_TAG_APP);

    }


//ndk native 加 trace


#include <android/trace.h>

void HelloVK::render() {
    ATrace_beginSection("render");
    
    ....
    
    ATrace_endSection();
}

注意**,**app 加的trace 要起作用, 需要参数指定(-a app_pkg), 不加的话adb shell perfetto 抓不到app加的trace

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 1s -a com.hzqg.ardisplay sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

总结

  • adb命令

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 1s -a com.hzqg.ardisplay sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

  • 导出到电脑

adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace e:/temp/Perfetto/Perfetto07

  • 打开方式

https://ui.perfetto.dev/

相关推荐
_小马快跑_24 分钟前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android
_小马快跑_25 分钟前
Kotlin | 从SparseArray、ArrayMap的set操作符看类型检查的不同
android
_小马快跑_27 分钟前
Android | 为什么有了ArrayMap还要再设计SparseArray?
android
_小马快跑_29 分钟前
Android TextView图标对齐优化:使用LayerList精准控制drawable位置
android
_小马快跑_31 分钟前
Kotlin协程并发控制:多线程环境下的顺序执行
android
_小马快跑_33 分钟前
Kotlin协程异常捕获陷阱:try-catch捕获异常失败了?
android
_小马快跑_35 分钟前
Android | 权限申请与前置说明弹窗同时展示的优雅方案
android
_小马快跑_39 分钟前
Android | Channel 与 Flow的异同点
android
_小马快跑_40 分钟前
Android | 文本测量:从 Paint.measureText 到 StaticLayout 的替换
android
树獭非懒2 小时前
告别繁琐多端开发:DivKit 带你玩转 Server-Driven UI!
android·前端·人工智能