这是我参与「第四届青训营」笔记创作活动的第六天。这篇笔记主要是对安卓客户端"初识性能优化及工具"这节课中最佳工具选型部分的记录。
笔记
最佳工具选型
性能监控价值
监控和优化相生相伴;监控有攻也有防;攻是为了发现现有问题,指导优化方向;防是为了劣化问题,及时止损;线上监控发现问题并聚合排序,线下监控座位线上辅助,并发版前置发现问题。
GPU呈现模式(快速找出流畅性问题)
原理: 系统通过记录每一帧的相关数据,然后通过图形的形式呈现。
优点: 无需二次开发,简单易用。
缺点: 并不完全准确,且无法明确指出造成卡顿问题的原因。
Layertool(快速找出布局问题)
原理: 通过遍历ViewTree信息,输出View层级关系
优点: 清楚明了,可以宏观感知ViewTree现状,也可以定制,帮助分析overdraw
缺点: 还不能够清楚明确的分析出UI的性能瓶颈
CPU Profiler(深入性能归因-初阶)
原理: 基于JVMTI
优点: 完整的方法调用栈输出,支持Java、C、C++方法耗时检测,上手简单
缺点: 性能损耗太大
TraceView(深入性能归因-中阶)
Instrument
虚拟监听函数入口回调,Enter/Exit/Unwind
耗时点:都时间、写数据到buffer、加锁等指令
Sample
通过定时抓取多次堆栈diff,近似确定函数的进入和退出时间
耗时点:堆栈diff、同Instrument
间隔抓取堆栈的时间越长性能损耗越少,而越导致短函数检测不到
Systrace(深入性能归因-高阶)
ftrace: debugfs采集和读取trace数据,记录trace events
atrace: 用户侧的trace跟踪,聚合所有trace events
系统级的trace数据: 锁监控等
btrace(抖音)
rhea-systrace: 全函数插桩,自动生成Trace代码,对层数做限制,性能损耗50%
rhea-mtrace: 全函数插桩,抛弃systrace,自己统计函数耗时,最后数据展现同systrace
rhea-atrace: 优化systrace性能,聚合更多性能数据:类加载、Lock、IO等
Battery Historian(找出功耗问题)
检测各应用的功耗并分析
总结
通过这个部分我了解到了在Android客户端开发的性能优化部分的很多工具,也了解了抖音自研的很多工具,收益颇多。