AppStartTime
AppStartTime copied to clipboard
获取首屏时间
获取首屏时间直接在didFinishLaunchingWithOptions方法中使用async在下一个Runloop中获取就可以了.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
dispatch_async(dispatch_get_main_queue(), ^{
// Here to get the end time of first rendering
});
return YES;
}
也可以
else if (livePort == dispatchPort) {
CFRUNLOOP_WAKEUP_FOR_DISPATCH();
__CFRunLoopModeUnlock(rlm);
__CFRunLoopUnlock(rl);
_CFSetTSD(__CFTSDKeyIsInGCDMainQ, (void *)6, NULL);
#if DEPLOYMENT_TARGET_WINDOWS
void *msg = 0;
#endif
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__(msg);
_CFSetTSD(__CFTSDKeyIsInGCDMainQ, (void *)0, NULL);
__CFRunLoopLock(rl);
__CFRunLoopModeLock(rlm);
sourceHandledThisLoop = true;
didDispatchPortLastTime = true;
} else {
dispatch_async利用了这里的处理逻辑。
这个仓库处理首屏渲染的思路是 利用runloop和渲染的关系,插入执行的代码进行时间统计。无论是用哪种分配任务的方式,符合runloop的执行逻辑都可以做到。 之前有滴滴的员工在load dispatch_async两次,可以参考这个项目改进一下。