Android cpu profiler 总结

202 阅读2分钟

adb 启动页面

PS D:\soucecode\lessonRoom\calObserver> adb shell
garnet:/ $ am start -S -W com.fly.heat/.ui.HomeAc
Stopping: com.fly.heat
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.fly.heat/.ui.HomeAc }
Status: ok
LaunchState: COLD
Activity: com.fly.heat/.ui.HomeAc
TotalTime: 2897
WaitTime: 2903
Complete
garnet:/ $

CPU profiler

颜色

黄色:系统的

绿色:自己写的

蓝色:第三方api的

快捷键
  • ctrl + 左箭头 向左平移
  • ctrl + 右箭头 向右平移
  • ctrl + 加号 放大视图
  • ctrl + 减号 缩小视图
图标视图:
  • 减号: 缩小视图
  • 加号: 放大视图
  • 重置: 重置视图
Call Chart
展示方式:
  • 树状结构:以树形结构展示调用栈,从根方法开始逐层展开子方法,子方法位于父方法上方
  • 自上而下:从最顶层的方法向下展示其所有子方法及其调用关系。
  • 可展开/折叠:可以手动展开或折叠节点,查看更详细的调用信息。
特点:
  • 详细信息:提供了每个方法的详细调用次数、总时间和自身时间等信息。
  • 灵活筛选:可以通过设置过滤条件(如最小时间阈值)来减少不必要的细节。
使用场景:
  • 深入分析调用链:适合仔细分析特定方法的调用路径和性能瓶颈。
  • 调试复杂逻辑:对于复杂的调用链路,可以帮助你逐步排查问题。

51f9afe37d2409895ca0aa88e2e237f.png

93cbfd0a0e690ff953e006cc9af9f91.png

Flame Chart
展示方式:
  • 水平布局:以水平堆叠的方式展示调用栈,宽度表示时间占比。
  • 层次结构:每一层代表一个调用栈帧,子方法位于父方法下方,形成火焰形状。
  • 颜色编码:通常使用不同颜色来区分不同类型的函数或模块。
特点:
  • 直观性强:可以快速识别哪些方法占用了大部分时间,因为宽度直接反映了时间占比。
  • 易于理解调用深度:通过垂直方向上的层级关系,可以清楚地看到调用链的深度。
使用场景:
  • 快速定位热点:适合快速查找占用大量 CPU 时间的方法。
  • 整体视图:提供了一个全局视角,帮助你了解各个方法的时间分布情况。

f154d4c6dd2243fafdcd659ff251dd4.png

Top Down
  • 特点:从根方法开始向下展示调用栈。
  • 用途:适合查看整体的调用层次结构。
  • 使用场景:当你想要了解整个调用链路以及每个方法在整个执行过程中所占的比例时,可以使用 Top-Down 视图。它有助于理解不同模块之间的相互调用关系及其性能影响。

1b0bf2c7e33caa98454320fceb4081a.png

Bottom up
  • 特点:从最底层的方法开始向上展示调用栈。
  • 用途:适合查找占用大量 CPU 时间的具体方法或函数。
  • 使用场景:当你想要找出哪些具体的方法消耗了最多的 CPU 时间时,可以使用 Bottom-Up 视图。它会列出所有方法,并按照它们自身的时间开销排序,帮助你快速定位热点方法。

8c0187c0acb8e091c750e3c726c7bf9.png