iOS 設(shè)備跟蹤 GPU 使用率

關(guān)于如何用代碼跟蹤 App 的 CPU 使用率,網(wǎng)上相關(guān)文章已經(jīng)很多了,但是很難搜索到 GPU 使用率相關(guān)的東西。這個原因可能是多樣的:

  1. App 開發(fā)者一般不太關(guān)心 GPU 使用的問題,游戲開發(fā)者更關(guān)心一些。而游戲開發(fā)的有很強(qiáng)大的 Unity 工具可以實(shí)時(shí)跟蹤
  2. 最近的 Xcode 本身也提供了 GPU 跟蹤的功能(僅當(dāng) App 中存在 OpenGLES Layer 時(shí))
  3. Instruments 工具也可以跟蹤設(shè)備上的 GPU 使用率(選擇 Core Animation 可以跟蹤沒有 OpenGLES 的 App 的 GPU 使用率,其它的暫時(shí)沒有試過)
    image

然而,跟蹤 App 的 GPU 使用率是有必要的。一些不好的編程習(xí)慣會導(dǎo)致 GPU 占用率上升到 70~80%,已經(jīng)比普通游戲的 20-40% 高出很多,如下圖的列表 Cell 的陰影繪制:

image

或者濫用 layer.mask 等情況。

GPU 占用過高,一方面導(dǎo)致 App 耗電量增大,另一方面導(dǎo)致卡頓,而這種卡頓是 DisplayLink 方法檢測不出來的(主線程 Runloop 上加的 DisplayLink 實(shí)際上檢測出來的是 CPU Runloop 的卡頓)。

在一陣搜索之后,找到一個開源的 mac 上的系統(tǒng)監(jiān)控軟件 XRG,功能類似 iStat,但界面丑一點(diǎn)。發(fā)現(xiàn)它通過 IOKit 查找系統(tǒng)信息可以獲取 GPU 的使用情況,那同樣的方式是不是可以用到 iOS 呢?

IOKit 是私有的框架,沒有任何文檔說明,因而也找不到對應(yīng)的 IOService 名字用于查找。幸運(yùn)地是,又找到另一個開源的工具 IOKitBrowser,可以在真機(jī)上運(yùn)行,按層級瀏覽所有的 Service,并且支持搜索!在搜索關(guān)鍵詞 GPU 后,發(fā)現(xiàn)不同型號的設(shè)備 GPU 不一樣,但它們都共有一個 sgx 父節(jié)點(diǎn),只需做兩層遍歷即可!

整理過后,將本文的工作封裝為一個庫:GPUUtilization 方便后人使用。感謝所有為開源做出貢獻(xiàn)的人!

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容