[转载] Matrix-iOS 耗电监控
前言
在微信开发过程中,有时会收到一些反馈说,手机使用微信一段时间后就开始发烫了。为了跟进用户的发烫问题,最开始的时候,我们只能通过日志看看用户在这段时间做了些什么操作,努力去复现问题。
会导致手机发烫的原因很多,有可能只是用户在阳光下使用手机;但也有可能真的是微信某个模块代码有问题,导致当前 CPU 占用过高。这很让人头疼。如果能像查卡顿问题一样,有堆栈就好了。
在 WWDC 2018 What’s New in Energy Debugging 苹果推介了 Energy Log 这种日志来查耗电问题。系统定期会获取当前应用的线程堆栈,当应用在前台平均三分钟或者后台平均一分钟内 CPU 占用超过 80%,系统会将收集到的线程堆栈组合成一颗函数调用树形成 Energy Log。
在 “Xcode -> Organizer -> Energy Log” 中可以看到应用上报上来的 Energy Log 数据。这些数据确实暴露了微信的一些代码问题,拿到几份 Energy Log 后,我们能快速地定位出一些耗电场景。但是 Energy Log 日志是 iOS 系统收集的,我们无法对日志做定制化,无法扩展;而且在日常开发过程中,获取 Energy Log 的成本很高。
经 Energy Log 的启发,我们在 Matrix 扩展实现了耗电监控功能,现在 Matrix 也能上报应用的 “Energy Log” —— 耗电堆栈。