美文网首页
iOS卡顿监测方案总结

iOS卡顿监测方案总结

作者: 雷霸龙 | 来源:发表于2021-04-07 07:52 被阅读0次
1、FPS

FPS (Frames Per Second) 是图像领域中的定义,表示每秒渲染帧数,通常用于衡量画面的流畅度,每秒帧数越多,则表示画面越流畅,60fps 最佳,一般我们的APP的FPS 只要保持在 50-60之间,用户体验都是比较流畅的。

实现原理是向主线程的RunLoop的添加一个commonModes的CADisplayLink,每次屏幕刷新的时候都要执行CADisplayLink的方法,所以可以统计1s内屏幕刷新的次数,也就是FPS了

2、RunLoop

其实FPS中CADisplayLink的使用也是基于RunLoop,都依赖main RunLoop。RunLoop调用方法主要集中在kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting之间,有人可能会问kCFRunLoopAfterWaiting之后也有一些方法调用,为什么不监测呢,我的理解,大部分导致卡顿的的方法是在kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting之间,比如source0主要是处理App内部事件,App自己负责管理(出发),如UIEvent(Touch事件等,GS发起到RunLoop运行再到事件回调到UI)、CFSocketRef。开辟一个子线程,然后实时计算 kCFRunLoopBeforeSources 和 kCFRunLoopAfterWaiting 两个状态区域之间的耗时是否超过某个阀值,来断定主线程的卡顿情况,比如可以设置连续5次超时50ms认为卡顿。

3、子线程Ping

但是由于主线程的RunLoop在闲置时基本处于Before Waiting状态,这就导致了即便没有发生任何卡顿,这种检测方式也总能认定主线程处在卡顿状态。这套卡顿监控方案大致思路为:创建一个子线程通过信号量去ping主线程,因为ping的时候主线程肯定是在kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting之间。每次检测时设置标记位为YES,然后派发任务到主线程中将标记位设置为NO。接着子线程沉睡超时阙值时长,判断标志位是否成功设置成NO,如果没有说明主线程发生了卡顿。

相关文章

  • iOS卡顿监测方案总结

    iOS卡顿监测方案总结iOS卡顿监测方案总结

  • iOS卡顿优化优秀文章

    1、iOS卡顿监测方案总结[https://juejin.cn/post/6844903944867545096]...

  • iOS卡顿监测方案总结

    最近在写APM相关的东西,所以整理了一下iOS中卡顿监测的那些方案,不了解卡顿的原理的可以看这篇文章iOS 保持界...

  • iOS卡顿监测方案总结

    1、FPS FPS (Frames Per Second) 是图像领域中的定义,表示每秒渲染帧数,通常用于衡量画面...

  • iOS通过runloop监控卡顿

    质量监控-卡顿检测iOS实时卡顿监控基于Runloop简单监测iOS卡顿的demo微信iOS卡顿监控系统iOS-R...

  • iOS版界面卡顿监测方案

    实现思路在开始之前,我们先思考一下,界面卡顿是由哪些原因导致的? 1.死锁:主线程拿到锁 A,需要获得锁 B,而同...

  • 卡顿检测资料

    微信iOS卡顿监控系统 卡顿方案思考 卡顿检测 移动端监控体系之技术原理 iOS性能检测

  • iOS 卡顿监测

    matrix[https://github.com/Tencent/matrix#matrix_ios_cn]

  • iOS开发UI卡顿&掉帧原因

    一、UI卡顿原因 二、 卡顿监控的实现一般有两种方案: (1)主线程卡顿监控。通过子线程监测主线程的 runLoo...

  • iOS页面卡顿监测

    页面卡顿是由哪些原因导致的? 1.死锁: 主线程拿到锁A, 需要获取锁B, 而同时子线程拿了锁B, 需要锁A, 这...

网友评论

      本文标题:iOS卡顿监测方案总结

      本文链接:https://www.haomeiwen.com/subject/zvoekltx.html