iOS 性能检测

启动耗时
页面加载耗时
CPU占用
内存占用
传送门:https://github.com/CYHAI9/MonitorTools

启动耗时

image.png

启动耗时主要分main函数前后时间,pre-main的时间是相对较难拿到的,参考美团性能检测([https://tech.meituan.com/2018/12/06/waimai-ios-optimizing-startup.html](https://tech.meituan.com/2018/12/06/waimai-ios-optimizing-startup.html)
可以从获取进程的开始的时间。

#import 
#import 

+ (BOOL)processInfoForPID:(int)pid procInfo:(struct kinfo_proc*)procInfo
{
    int cmd[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
    size_t size = sizeof(*procInfo);
    return sysctl(cmd, sizeof(cmd)/sizeof(*cmd), procInfo, &size, NULL, 0) == 0;
}

+ (NSTimeInterval)processStartTime
{
    struct kinfo_proc kProcInfo;
    if ([self processInfoForPID:[[NSProcessInfo processInfo] processIdentifier] procInfo:&kProcInfo]) {
        return kProcInfo.kp_proc.p_un.__p_starttime.tv_sec * 1000.0 + kProcInfo.kp_proc.p_un.__p_starttime.tv_usec / 1000.0;
    } else {
        NSAssert(NO, @"无法取得进程的信息");
        return 0;
    }
}

业界当中虽然有采用加载某个执行文件load方法打点和找到叶子节点的dylib,然后以其中某个类的+load方法的执行时间作为起始点这两个方法,两个方法在于精确性问题,所以同样存在一个问题,就是Initializers方法前的时间都没拿到,起始点过后。
待续。。。。。。

你可能感兴趣的:(iOS 性能检测)