Flutter卡顿问题的监控与思考
如何判断当前发生了卡顿。
如何在卡顿时获取堆栈。
栈帧采集的方案整体思路如下:
获取当前进程中的所有线程,并找到Flutter UI TaskRunner对应的线程
暂停该线程,并获取该线程当前的寄存器的值,重点为PC和FP
根据栈帧回溯算法,获取堆栈
让该线程继续运行
在当前进程或者远端做符号化
方案实现
接下来我们来看看如何实现这个方案,我们以iOS端为例子,来说明如何实现这个方案:
task_threads
来获取所有的线程,代码如下:
thread_get_state
去获取这个线程此时此刻的寄存器的值了,其中能够帮助我们做栈帧回溯的两个寄存器分别是pc和fp,我们这里的代码是以arm64为例子的,在实际的产品中,还需要考虑到其他的架构:
栈帧回溯原理
上文说到,我们获得了pc和fp寄存器的值,该如何做栈帧回溯呢?
我们来对比一下上面提到的3个方案,它们的区别如下图所示:
闲鱼技术团队不仅是阿里巴巴集团旗下闲置交易社区的创造者,更是移动与高并发大数据应用新技术的引导者与创新者。我们与Google Flutter/Dart小组密切合作,为社区贡献了多个高star的项目和大量PR。我们正在积极探索深度学习和视觉技术在互动、交易、社区场景的创新应用。闲鱼技术与集团中间件团队共同打造的FaaS平台每天支持数以千万级用户的高并发访问场景。
就是现在!客户端/服务端java/架构/前端/质量工程师面向社会+校园招聘,base杭州阿里巴巴西溪园区,一起做有创想空间的社区产品、做深度顶级的开源项目,一起拓展技术边界成就极致!
*投喂简历给小闲鱼→[email protected]