美文网首页
FPS 检测

FPS 检测

作者: foolish_hungry | 来源:发表于2018-06-18 19:02 被阅读0次

    iOS 的显示系统是由 VSync 信号驱动的,VSync 信号由硬件时钟生成,每秒钟发出 60 次(这个值取决设备硬件,比如 iPhone 真机上通常是 59.97)

    什么是CADisplayLink

    CADisplayLink是CoreAnimation提供的另一个类似于NSTimer的类,它总是在屏幕完成一次更新之前启动,它的接口设计的和NSTimer很类似,所以它实际上就是一个内置实现的替代,但是和timeInterval以秒为单位不同,CADisplayLink有一个整型的frameInterval属性,指定了间隔多少帧之后才执行。默认值是1,意味着每次屏幕更新之前都会执行一次。如果指定frameInterval为2,就是说动画每隔两帧执行一次, 依次类推.

    CADisplayLink创建

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick:)];
        [link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    

    通俗地讲就是屏幕刷新一次执行一次selector, 那这样的话, 我们可以按60HZ(也就是1秒)为单位, 进行一个屏幕刷新次数的统计

    - (void)tick:(CADisplayLink *)link {
        //执行次数
        _scheduleTimes++;
        
        //当前时间戳
        if(_timestamp == 0){
            _timestamp = link.timestamp;
        }
        CFTimeInterval timePassed = link.timestamp - _timestamp;
        
        // 等于1, 是为了和 60fps 作比较  1分钟60次 也就是60HZ
        if(timePassed >= 1.f) {
            //fps
            CGFloat fps = _scheduleTimes/timePassed;
            printf("fps:%.1f, timePassed:%f\n", fps, timePassed);
            //reset
            _timestamp = link.timestamp;
            _scheduleTimes = 0;
        }
    }
    

    全局变量声明

    {
        CFTimeInterval _timestamp;
        NSInteger _scheduleTimes;
    }
    

    相关文章

      网友评论

          本文标题:FPS 检测

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