监控卡顿-Runloop

1  对主线程Runloop注册一个回调函数runLoopObserverCallBack。在每次runloop的CFRunLoopActivity改变时回调。

2  开一个子线程。里面使用while循环不断dispatch_semaphore_wait等待主线程进入下一个CFRunLoopActivity时唤醒。(进入一个CFRunLoopActivity会调用dispatch_semaphore_signal)。

3 要是dispatch_semaphore_wait在50ms内没被唤醒。并且当前状态是kCFRunLoopBeforeSources或者kCFRunLoopAfterWaiting则认为是卡顿。卡顿次数加1。进入下一次循环。

4 当卡顿次数大于等于5次后,则使用PLCrashReporter打印当前堆栈信息。

参考:http://www.tanhao.me/code/151113.html/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容