先把结论放在前面:卡顿与启动慢的根因往往不在应用进程内,而在跨进程链路上。应用侧的主线程栈只能告诉你"卡在哪一行",而系统级追踪告诉你"这一帧等的是谁"。Systrace是基于atrace的方案,Perfetto是它的继任者——前者基于 ftrace 的文本通道,后者基于可配置的数据源与持久化缓冲,能力边界完全不同。
面试里这题属于"性能排查硬功夫"。答得浅的是"Systrace能看卡顿";答得深的是能说清atrace的 trace point 与beginSection/end的埋点方式、Perfetto 的数据源(linux.ftrace、process_stats、java_heap、gpu_memory)与 Trace Processor 的 SQL 分析模型、ATRACE_BEGIN在 release 构建里的自动裁剪,以及Choreographer与FrameMetrics两条互补的观测路径。
两条互补的观测路径
先建立框架:应用侧指标回答"这一帧花了多久",系统级追踪回答"这一帧的时间花去了哪里"。两者不能互相替代。