网上已经有不少相关 Instruments
的介绍,今天从另外的角度再罩一个轮子。主要内容来自 WWDC&Using Time Profiler in Instruments,接下来仅简单的介绍一下开发中忽略的点(即便是你看过了 WWDC, 可能也会忽略的)。
先看这张图:
git
Time Profiler
的功能原理:
Time Profiler
会检测当前的调用栈,而后以调用栈的形式记录于详细视图中(如上图的底部显示)。
初略
作核心的解释)的统计。
说到这里、再来看另外一张图:
github
Time Profiler
原本就是用来检测一个函数/方法的执行效率(时间)的。这一句怎么理解????
Time Profiler
仅仅是一个
初略 的统计。在 WWDC 视频中也有提到,并不是是简单的:结束时间减去开始时间,其中也有一些优化(具体什么样的优化,没有发现)。
// touch
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 调用开始
os_log_t osObj = os_log_create("hg-cubsystem", "hg-category");
os_signpost_interval_begin(osObj, 6666, "hg-name");
// 调用测试代码
[self testSleep];
// 调用结束
os_signpost_interval_end(osObj, 6666, "hg-name");
}
// 测试代码
- (void)testSleep {
for (NSInteger j=0; j<5; j++) {
for (NSInteger i=0; i<10000; i++) {
NSLog(@"%zd", i);
}
}
}
复制代码
想经过 Time Profiler
来检测一下 testSleep 方法的执行效率(时间),最终的结果以下:
api
Instruments
是看不出来的,我主要是依赖
标注 2 的信息,
标注 2
是我使用
os_signpost_interval_begin
与
os_signpost_interval_end
在项目代码中埋的点,从上面的代码能够看到。关于这两个
api,主要是经过
Instruments
的
os_signpost
进行查看的。是苹果 在 2018 年
Xcode
提供的
自定义 Instruments 的核心 api。之后有时间会介绍
Xcode 自定义 Instruments 相关的技术实现。
Timer Profiler
来检测项目中卡顿等一系列的问题仍是颇有帮助的。虽然是不许确的效率(时间)统计,可是在必定程度上能体现出那些执行相对较高的函数/方法。
Time Profiler
是不许确的?
Time Profiler
来作自动化性能分析的,初步设想是经过
TraceUtility 这个工具来进行
Instruments.trace
文件解析、找出感兴趣的函数/方法的执行时间。后来通过一段时间的研究以及在 WWDC 上的学习,发现这个方案是不可行的。其次也是由于近期本身在研究
Xcode 自定义 Instruments 相关的学习。
最后提醒: 虽然 Time Profiler
并不是百分百准确,可是其用途是毋庸置疑的,别被当前文档产生误解。bash