一行代码监测FPS/内存/CPU

点击上方“程序员大咖”,选择“置顶公众号”

关键时刻,第一时间送达!640?640?wx_fmt=gif















































































































































































































































































































    先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明明只是灵武七重,而在这两个月不到的时间,连跳两重修为,又跳过一个大境界,踏入了元武一重,这般进步速度,简直堪称变态啊。


    “这楚枫不简单,原来是一位天才,若是让他继续成长下去,绝对能成为一号人物,不过可惜,他太狂妄了,竟与龚师兄定下生死约战,一年时间,他再厉害也无法战胜龚师兄。”有人认识到楚枫的潜力后,为楚枫感到惋惜。


    “哼,何须一年,此子今日就必败,巫九与龚师兄关系甚好,早就看他不顺眼了,如今他竟敢登上生死台挑战巫九,巫九岂会放过他?”但也有人认为,楚枫今日就已是在劫难逃。


    “何人挑战老子?”就在这时,又是一声爆喝响起,而后一道身影自人群之中掠出,最后稳稳的落在了比斗台上。


    这位身材瘦弱,身高平平,长得那叫一个猥琐,金钩鼻子蛤蟆眼,嘴巴一张牙带色儿,说话臭气能传三十米,他若是当面对谁哈口气,都能让那人跪在地上狂呕不止。


    不过别看这位长得不咋地,他在核心地带可是鼎鼎有名,剑道盟创建者,青龙榜第九名,正是巫九是也。


    “你就是巫九?”楚枫眼前一亮,第一次发现,世间还有长得如此奇葩的人。


    巫九鼻孔一张,大嘴一咧,拍着那干瘪的肚子,得意洋洋的道:“老子就是巫九,你挑战老子?”


    “不是挑战你,是要宰了你。”楚枫冷声笑道。


    “好,老子满足你这个心愿,长老,拿张生死状来,老子今日在这里了解了这小子。”巫九扯开嗓子,对着下方吼了一声。


    如果他对内门长老这么说话,也就算了,但是敢这么跟核心长老说话的,他可真是算作胆肥的,就连许多核心弟子,都是倒吸了一口凉气,心想这楚枫够狂,想不到这巫九更狂。


    不过最让人无言的就是,巫九话音落下不久,真有一位核心长老自人群走出,缓缓得来到了比斗台上,左手端着笔墨,右手拿着生死状,来到了巫九的身前。


    “我去,这巫九什么身份,竟能这般使唤核心长老?”有人吃惊不已,那长老修为不低,乃是元武七重,比巫九还要高两个层次,但却这般听巫九的话,着实让人吃惊不已。


    “这你就不知道了吧,巫九在前些时日,拜了钟离长老为师尊,已正式得到钟离长老的亲传。”有人解释道。


    “钟离长老?可是那位性情古怪的钟离一护?”


    “没错,就是他。”


    “天哪,巫九竟然拜入了他的门下?”


    人们再次大吃一惊,那钟离一护在青龙宗可是赫赫有名,若要是论其个人实力,在青龙宗内绝对能够排入前三,连护宗六老单打独斗都不会是他的对手。


    只不过那钟离一护,如同诸葛青云一样,也是一位客卿长老,所以在青龙宗内只是挂个头衔,什么事都不管,更别说传授宗内弟子技艺了,如今巫九竟然能拜入他老人家门下,着实让人羡慕不已。


    “恩怨生死台,的确可以决斗生死,但必须要有所恩怨,你们两个人,可有恩怨?”那位长老开口询问道。































































































项目开发都会做一些调试,比如看看FPS的情况。


网上有不少工具,自己就参考做了一个比较简单的工具WHDebugTool,可以监测内存,CPU和FPS。


GitHub地址:https://github.com/remember17/WHDebugTool



640?wx_fmt=gif

WHDebugTool

1、快速使用


1.1 pod或直接把文件拖入项目


如果pod找不到WHDebugTool,就先pod setup


pod 'WHDebugTool''~> 1.1'


1.2 导入头文件


如果是pod进项目:


#import <WHDebugTool/WHDebugToolManager.h>


如果是直接把文件拖入项目:


#import "WHDebugToolManager.h"


1.3 调用开关方法


一行代码开启或关闭监测。


// 这个方法调用的时候会判断监测是不是处于打开的状态,如果打开了则关闭,如果没有打开就开启。
[[WHDebugToolManager sharedInstance] toggleWith:DebugToolTypeAll];


1.4 可选:也可以通过如下方式初始化和关闭


// 打开
- (void)showWith:(DebugToolType)type;
// 关闭
- (void)hideWith:(DebugToolType)type;


2. 参数说明


初始化方法中带有一个枚举参数

这个参数可以让三种监测随意组合。例如只想要监测FPS,就传入DebugToolTypeFPS


DebugToolTypeAll = 0,   // FPS & Memory & CPU
    DebugToolTypeFPS,       // FPS
    DebugToolTypeMemory,    // Memory
    DebugToolTypeCPU,       // CPU
    DebugToolTypeFPSMemory, // FPS & Memory
    DebugToolTypeFPSCPU,    // FPS & CPU
    DebugToolTypeCPUMemory, // Memory & CPU


3. 实现方法


3.1 FPS实现方法(参考了YYKit中的检测工具)


首先简单介绍一下FPS:


FPS的意思是:每秒传输帧数(刷新率)。

值越高,画面越流畅,值越低越卡顿。


下面来看一下iOS实现检测FPS的原理:


主要用的是CADisplayLink:一个和屏幕刷新率相同定时器。

创建CADisplayLink对象的时候会指定一个selector,把创建的CADisplayLink对象加入runloop,所以就实现了以屏幕刷新的频率调用某个方法。

在调用的方法中计算执行的次数,用次数除以时间,就算出了FPS。

注:iOS正常刷新率为每秒60次。


- (void)setDisplayLink {
// 初始化CADisplayLink
    _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTicks:)];
// 把CADisplayLink对象加入runloop
    [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}

- (void)displayLinkTicks:(CADisplayLink *)link {
// 累加方法执行的次数
    _performTimes ++;
    if (_lastTimestamp == 0) {
        _lastTimestamp = link.timestamp;
        return;
    }
// 记录执行的时间
    NSTimeInterval interval = link.timestamp - _lastTimestamp;
// 当时间经过一秒的时候再计算FPS,否则计算的太过频繁
    if (interval >= 1) {
// iOS正常刷新率为每秒60次,执行次数/时间
        float fps = _performTimes / interval;
// 重新初始化记录值
        _performTimes = 0;
        _lastTimestamp = link.timestamp;
// 把计算的值传出去
        if (self.fpsBlock) {
            self.fpsBlock(fps);
        }
    }
}


3.2 内存监测实现方法


- (float)getUsedMemory {
    task_basic_info_data_t taskInfo;
    mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
    kern_return_t kernReturn = task_info(mach_task_self(),
                                         TASK_BASIC_INFO,
                                         (task_info_t)&taskInfo,
                                         &infoCount);
    if (kernReturn != KERN_SUCCESS) { return NSNotFound; }
    return taskInfo.resident_size/1024.0/1024.0;
}


3.3 CUP检测实现方法


float cpu_usage() {
    kern_return_t kr;
    task_info_data_t tinfo;
    mach_msg_type_number_t task_info_count;

    task_info_count = TASK_INFO_MAX;
    kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);
    if (kr != KERN_SUCCESS) {
        return -1;
    }

    task_basic_info_t      basic_info;
    thread_array_t         thread_list;
    mach_msg_type_number_t thread_count;

    thread_info_data_t     thinfo;
    mach_msg_type_number_t thread_info_count;

    thread_basic_info_t basic_info_th;
    uint32_t stat_thread = 0;

    basic_info = (task_basic_info_t)tinfo;

    kr = task_threads(mach_task_self(), &thread_list, &thread_count);
    if (kr != KERN_SUCCESS) {
        return -1;
    }
    if (thread_count > 0)
        stat_thread += thread_count;

    long tot_sec = 0;
    long tot_usec = 0;
    float tot_cpu = 0;
    int j;

    for (j = 0; j < thread_count; j++)
    {
        thread_info_count = THREAD_INFO_MAX;
        kr = thread_info(thread_list[j], THREAD_BASIC_INFO,
                         (thread_info_t)thinfo, &thread_info_count);
        if (kr != KERN_SUCCESS) {
            return -1;
        }

        basic_info_th = (thread_basic_info_t)thinfo;

        if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {
            tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;
            tot_usec = tot_usec + basic_info_th->user_time.microseconds + basic_info_th->system_time.microseconds;
            tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0;
        }

    }

    kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));
    assert(kr == KERN_SUCCESS);

    return tot_cpu;
}


后记


WHDebugTool

内存监测的值与Xcode给的有出入,所以这些工具给出的值仅供参考。

CUP和FPS的检测结果相对来说比较接近。


我的GitHub:https://github.com/remember17


640.jpeg

  • 作者:remember17

  • https://www.jianshu.com/p/0d94a81a31db

  • 程序员大咖整理发布,转载请联系作者获得授权

640?wx_fmt=gif640?【点击成为源码大神】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值