AppStartTime icon indicating copy to clipboard operation
AppStartTime copied to clipboard

获取首屏时间

Open zhongwuzw opened this issue 7 years ago • 1 comments

获取首屏时间直接在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;
}

zhongwuzw avatar Jun 14 '18 02:06 zhongwuzw

也可以

        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两次,可以参考这个项目改进一下。

JunyiXie avatar Jul 08 '18 07:07 JunyiXie