您当前的位置: 首页 >  ios

鱼儿-1226

暂无认证

  • 0浏览

    0关注

    1100博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

iOS 设备跟踪 GPU 使用率

鱼儿-1226 发布时间:2020-12-14 17:53:12 ,浏览量:0

关于如何用代码跟踪 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 方便后人使用。感谢所有为开源做出贡献的人!

参考资料
  • https://github.com/mikepj/XRG/
  • https://github.com/matthiasgasser/IOKitBrowser
关注
打赏
1604459285
查看更多评论
立即登录/注册

微信扫码登录

0.0445s