CoreAnimation有一个很好用的类CADisplayLink
,这个类会在每一帧绘制以前调用,而且能够获取时间戳。因而,咱们只要统计出,在1s内的帧数便可。git
- (void)envokeDisplayLink:(CADisplayLink *)displayLink{
if (_lastTimestamp == -1) { _lastTimestamp = displayLink.timestamp; return; } _countPerFrame ++; NSTimeInterval interval = displayLink.timestamp - _lastTimestamp; if (interval < 1) { return; } _lastTimestamp = displayLink.timestamp; CGFloat fps = _countPerFrame / interval; //... }
CPU和内存的获取采用了mach头文件中的方法,调用了底层API,采用C方式来获取。github