iOS 检查应用卡顿工具类

iOS检查界面是否卡顿,通常是监听RunLoop的状态,网上已经有大量的学习教程,这里就不详细描述了。

最近在学习C++,利用C++编写了一个检查应用卡顿工具类,暂时属于半完成品。

  • 实现思路:开启一个子线程, 分别获取在主线程和子线程下获取时间,对比两个时间的差,是否超过8秒,超过则是耗时函数。

github:https://github.com/misaka14/WatchDog

部分代码

// 子线程开启GJiOSCheckWatchDog
static void GJiOSCheckWatchDog() 
{
    // 获取当前时间
    uint64_t curr = GJiOSGetUpTime();

    // 获取上一次主线程的时间
    pthread_mutex_lock(&g_watchdog_lock);
    uint64_t last_time = g_last_time;
    pthread_mutex_unlock(&g_watchdog_lock);
    
    // 说明已经开始警告了
    if (last_time && (curr > last_time + WATCHDOG_ALARM))
    {
        // 打印堆栈信息
        GJiOSAnrAlarmHandler(curr - last_time);
    }

    // 主线程更新一次时间
    dispatch_async(dispatch_get_main_queue(), ^{
        pthread_mutex_lock(&g_watchdog_lock);
        g_last_time = GJiOSGetUpTime();
        pthread_mutex_unlock(&g_watchdog_lock);
    });
}

你可能感兴趣的:(iOS 检查应用卡顿工具类)