启动耗时
页面加载耗时
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 <sys/sysctl.h>
#import <mach/mach.h>
+ (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方法前的时间都没拿到,起始点过后。
待续。。。。。。
网友评论