iOS 设备跟踪 GPU 使用率

关于如何用代码跟踪 App 的 CPU 使用率,网上相关文章已经很多了,但是很难搜索到 GPU 使用率相关的东西。这个原因可能是多样的:

  1. App 开发者一般不太关心 GPU 使用的问题,游戏开发者更关心一些。而游戏开发的有很强大的 Unity 工具可以实时跟踪
  2. 最近的 Xcode 本身也提供了 GPU 跟踪的功能(仅当 App 中存在 OpenGLES Layer 时)
  3. Instruments 工具也可以跟踪设备上的 GPU 使用率(选择 Core Animation 可以跟踪没有 OpenGLES 的 App 的 GPU 使用率,其它的暂时没有试过)

    image

然而,跟踪 App 的 GPU 使用率是有必要的。一些不好的编程习惯会导致 GPU 占用率上升到 70~80%,已经比普通游戏的 20-40% 高出很多,如下图的列表 Cell 的阴影绘制:

image

或者滥用 layer.mask 等情况。

GPU 占用过高,一方面导致 App 耗电量增大,另一方面导致卡顿,而这种卡顿是 DisplayLink 方法检测不出来的(主线程 Runloop 上加的 DisplayLink 实际上检测出来的是 CPU Runloop 的卡顿)。

在一阵搜索之后,找到一个开源的 mac 上的系统监控软件 XRG,功能类似 iStat,但界面丑一点。发现它通过 IOKit 查找系统信息可以获取 GPU 的使用情况,那同样的方式是不是可以用到 iOS 呢?

IOKit 是私有的框架,没有任何文档说明,因而也找不到对应的 IOService 名字用于查找。幸运地是,又找到另一个开源的工具 IOKitBrowser,可以在真机上运行,按层级浏览所有的 Service,并且支持搜索!在搜索关键词 GPU 后,发现不同型号的设备 GPU 不一样,但它们都共有一个 sgx 父节点,只需做两层遍历即可!

整理过后,将本文的工作封装为一个库:GPUUtilization 方便后人使用。感谢所有为开源做出贡献的人!

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值