如何在保持界面响应的同时以可接受的性能logging屏幕?

我在基于Objective-C的iOS应用程序中寻找有关性能问题的帮助。

我有一个iOS应用程序,使用CALayer的renderInContext方法捕获屏幕的内容。 它试图捕获足够的屏幕帧,使用AVFoundation创buildvideo。 然后将屏幕录制与其他元素结合起来用于可用性的研究。 在捕捉屏幕的同时,应用程序也可能会显示UIWebView的内容,通过networking去获取数据等等。Web视图的内容不在我的控制之下 – 它是来自网页。

这个设置正在工作,但你可能想象的是,它不是平稳的。 由于图层必须在主线程上呈现,因此比我想要的更多的UI争用。 我想要做的就是进行一个设置,将UI的响应优先于屏幕截图。 例如,如果用户正在滚动Web视图,我宁愿放弃录制的帧,而不是有可怕的滚动体验。

我已经尝试了几种技术,从dispatch_source合并到将框架捕获请求作为块提交给主要队列到CADisplayLink。 到目前为止,他们似乎都performance相同。 当前正在屏幕的主视图的drawRect中触发帧捕获。

我在这里问的是:鉴于上述情况,你会build议我采取什么技术来实现我的目标? 我意识到答案可能是没有很好的答案…但是我想尝试一下,不过听起来很古怪。

注意:无论什么技术都需要App Store友好。 不能使用显示logging器使用/使用的CoreSurface入侵。

谢谢你的帮助!

“由于图层必须在主线程上呈现”,这是不正确的,只要你不触摸UIKit。

请参阅https://stackoverflow.com/a/12844171/136305

也许你可以logging在一半的分辨率来加快事情,如果这符合要求?