EN

Android Systrace -- 系列文章目录

字数统计: 2.5k阅读时长: 9 min
2019/05/26
loading

2026-10-13 技术更新:本页原标注日期为 2019 年,保留了更早教程的更新记录。旧 Systrace 工具流程已过时;历史截图、源码和实验按各篇注明的 Android 版本阅读,不能直接当作当前系统实现。新抓取与分析流程从下方 Perfetto 系列开始。

随着 Systrace 的功能越来越完善,加上 Android 版本的更迭,之前写的 Systrace 系列教程已经有点过时;另外随着自己技能的完善,从 Systrace 里挖掘了更多的信息,对解决各种性能问题很有帮助。这些技能我需要记录下来,增强自己的总结和归纳的能力,如果能帮助到看文章的人,也是极好的

本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待 Android 系统整体的运行,同时也从另外一个角度来对 Framework 进行学习。也许你看了很多讲 Framework 的文章,但是总是记不住代码,或者不清楚其运行的流程,也许从 Systrace 这个图形化的角度,你可以理解的更深入一些。

Perfetto 在我的日常工作中已经基本取代了 Systrace。许多新接触 Android 性能优化的小伙伴,看到 Perfetto 眼花缭乱的界面和复杂的功能就头疼,希望我能把之前的 Systrace 文章用 Perfetto 来呈现。Android 官方已将旧 systrace 工具列为被替代的工具,当前入口见 SDK Platform-Tools 说明。这不代表 ATrace 埋点或内核 ftrace 也被废弃。

这组目录可以按两条线读:Systrace 文章保留当时的 Framework 流程和案例;Perfetto 文章介绍抓取、打开、搜索、SQL 与大 Trace 分析,也会继续解释系统机制。换了查看器,并不意味着旧截图里的函数名、线程关系和时序在所有新版系统上都不变。

现在如何开始:工具与版本

入口或能力 版本与适用范围
旧 systrace.py 历史流程通常生成 HTML 报告;不再按旧教程假定当前 Platform-Tools 中仍带有这个脚本。
开发者选项中的 System Tracing Android 9 / API 28 起提供;Android 9 保存 Systrace 格式(.ctrace),Android 10 / API 29 起保存 Perfetto 格式(.perfetto-trace)。
设备端 perfetto 与抓取服务 Android 9 起有平台服务,Android 11 / API 30 起默认启用;Android 9、10 的部分设备需额外启用,按官方说明核对设备支持。
Perfetto UI 与命令行分析 UI 可以查看 Perfetto 和受支持的旧 Systrace 格式;trace_processor 可做本地 SQL 分析。文件扩展名不是数据完整性的保证。
FrameTimeline Android 12 / API 31 起支持,还需要实际采集相应数据源;把旧 Trace 放入新 UI,不会补出当时没有记录的帧数据。

版本依据:设备端 System Tracing、Perfetto Android 抓取说明、FrameTimeline。当前图形化抓取教程以 Android 11+ 为前提,较老设备走其命令行分支,见 Recording system traces。

第一次阅读可以从 Perfetto 1—3 入手,先完成一次短场景抓取,再沿着具体问题查 MainThread、RenderThread、CPU 或 Binder。分析时记录设备、Android/ROM 版本、刷新率、应用版本和抓取配置;先确认目标时间段、线程和数据源确实在 Trace 里,再判断瓶颈。没有某条轨道,可能是未启用、权限或设备不支持,也可能发生了数据丢失,不能直接解释成耗时为零。

应用开发者可以先用系统提供的抓取入口;修改 Framework、Buffer 配置或启用特权数据源的实验,则需要相应的系统构建和权限。读者无需先修改系统,也不能把系统开发环境里的每个实验都套在普通量产机上。

Perfetto 系列目录

  1. Android Perfetto 系列目录
  2. Android Perfetto 系列 1:Perfetto 工具简介
  3. Android Perfetto 系列 2:Perfetto Trace 抓取
  4. Android Perfetto 系列 3:熟悉 Perfetto View
  5. Android Perfetto 系列 4:使用命令行在本地打开超大 Trace
  6. Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程
  7. Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战
  8. Android Perfetto 系列 7:MainThread 和 RenderThread 解读
  9. Android Perfetto 系列 8:深入理解 Vsync 机制与性能分析
  10. Android Perfetto 系列 9:CPU 信息解读
  11. Android Perfetto 系列 10:Binder 调度与锁竞争
  12. Android Perfetto 系列 11:PerfettoSQL、Trace Processor 与回归检测
  13. Android Perfetto 系列 12:Trace 数据流与丢失排查
  14. Android Perfetto 系列 13:Perfetto SDK、Track Event 与 App 现场 Trace
  15. Android Perfetto 系列 14:heapprofd 与内存 Profiling
  16. Android Perfetto 系列 15:Boot Trace、长时间现场 Trace 与偶发问题抓取
  17. Android Perfetto 系列 16:GPU、Power Counters 与硬件瓶颈分析
  18. Android Perfetto 系列 17:专项场景自动化、问题清单与平台体系
  19. Android Perfetto 系列 18:响应速度实战,从输入事件到首帧反馈
  20. 视频(B站) - Android Perfetto 基础和案例分享
  21. 视频(B站) - Android Perfetto 分享 - 出图类型分享:AOSP、WebView、Flutter + OEM 系统优化分享

Systrace 系列文章目录

本篇文章是一个目录,之后的文章更新后,会在这里进行汇总,内容如下:

从旧 Systrace 迁移到新 Perfetto 时,可以先按主题对照阅读:

Systrace 主题 对应 Perfetto 文章
简介、预备知识、抓取与打开 Perfetto 1 / Perfetto 2 / Perfetto 3
Why 60 fps、高刷新率 Perfetto 6
Choreographer、MainThread、RenderThread、流畅性 Perfetto 5 / Perfetto 7
Vsync、SurfaceFlinger、Triple Buffer Perfetto 8
CPU、线程状态 Perfetto 9
Binder、锁竞争、SystemServer 等待 Perfetto 10
启动、响应速度与输入到首帧 Perfetto 18
  1. Systrace 简介
  2. Systrace 基础知识 - Systrace 预备知识
  3. Systrace 基础知识 - Why 60 fps ?
  4. Systrace 基础知识 - SystemServer 解读
  5. Systrace 基础知识 - SurfaceFlinger 解读
  6. Systrace 基础知识 - Input 解读
  7. Systrace 基础知识 - Vsync 解读
  8. Systrace 基础知识 - Vsync-App :基于 Choreographer 的渲染机制详解
  9. Systrace 基础知识 - MainThread 和 RenderThread 解读
  10. Systrace 基础知识 - Binder 和锁竞争解读
  11. Systrace 基础知识 - Triple Buffer 解读
  12. Systrace 基础知识 - CPU Info 解读
  13. Systrace 流畅性实战 1 :了解卡顿原理
  14. Systrace 流畅性实战 2 :案例分析: MIUI 桌面滑动卡顿分析
  15. Systrace 流畅性实战 3 :卡顿分析过程中的一些疑问
  16. Systrace 响应速度实战 1 :了解响应速度原理
  17. Systrace 响应速度实战 2 :响应速度实战分析-以启动速度为例
  18. Systrace 响应速度实战 3 :响应速度延伸知识
  19. Systrace 线程 CPU 运行状态分析技巧 - Runnable 篇
  20. Systrace 线程 CPU 运行状态分析技巧 - Running 篇
  21. Systrace 线程 CPU 运行状态分析技巧 - Sleep 和 Uninterruptible Sleep 篇

2023-10 update:

开始准备 Perfetto 系列(历史进度;已发布文章见上方目录)

面向读者群

本系列的文章既适用于应用开发者,也适用于系统开发者,我会在写作的时候兼顾两者。作为一名系统开发者,我大概理了一下我的优势:

  1. 有系统源码,可以很方便地进行调试和修改代码,并随时在手机上看到结果
  2. 对系统框架有一定的了解
  3. 对系统调优有一定的了解

基于上面几点,我在写作的时候也会利用这些优势,给大家带来不太一样的:

  1. 通过 Systrace 来学习 Android Framework
  2. 修改某些系统配置,让大家看看结果:比如 Buffer 个数对应用的影响
  3. 介绍一些系统厂商在做系统的时候的考虑和取舍
  4. 介绍一些应用开发时候你不会注意但是很重要的点

更新日志

以下保留当时的更新记录,日期不都等同于当前文章 URL 中的日期。

计划是每周更新一篇,给自己一个目标 ,给自己一个交代吧。

  1. 2018-03-30 目录更新:Systrace 系列文章目录
  2. 2018-04-01 更新文章:Systrace 基础知识 - Why 60 fps ?
  3. 2019-07-23 更新文章:Systrace 基础知识 - Systrace 预备知识
  4. 2019-10-22 更新问题:Systrace 基础知识 - Vsync-App :基于 Choreographer 的渲染机制详解
  5. 2019-11-04 更新文章:Systrace 基础知识 - Input 解读
  6. 2019-11-06 更新文章:Systrace 基础知识 - MainThread 和 RenderThread 解读
  7. 2019-12-01 更新文章:Systrace 基础知识 - Vsync 解读
  8. 2019-12-06 更新文章: Systrace 基础知识 - Binder 和锁竞争解读
  9. 2019-12-15 更新文章:Systrace 基础知识 - Triple Buffer 解读
  10. 2019-12-21 更新文章:Systrace 基础知识 - CPU Info 解读
  11. 2020-02-04 更新文章:Systrace 基础知识 - SystemServer 解读
  12. 2020-02-14 更新文章:Systrace 基础知识 - SurfaceFlinger 解读
  13. 2021-04-24 更新文章:Systrace 流畅性实战 1 :了解卡顿原理
  14. 2021-04-24 更新文章:Systrace 流畅性实战 2 :案例分析: MIUI 桌面滑动卡顿分析
  15. 2021-04-24 更新文章:Systrace 流畅性实战 3 :卡顿分析过程中的一些疑问
  16. 2021-10-28 更新文章:Systrace 响应速度实战 1 :了解响应速度原理
  17. 2021-10-28 更新文章:Systrace 响应速度实战 2 :响应速度实战分析-以启动速度为例
  18. 2021-10-28 更新文章:Systrace 响应速度实战 3 :响应速度延伸知识

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. 现在如何开始:工具与版本
  • Perfetto 系列目录
  • Systrace 系列文章目录
    1. 1. 面向读者群
    2. 2. 更新日志
  • 关于我 && 博客