「緩慢工作階段」是 Google Play 管理中心新推出的 Android Vitals 指標。緩慢 「工作階段」是指超過 25% 影格的緩慢工作階段。影格 是緩慢的。 相當於 20 FPS。Android Vitals 也會回報第二個緩慢工作階段 目標為 34 毫秒 (相當於 30 FPS)。使用「緩慢工作階段」 可以瞭解遊戲的影格速率效能,進而影響 確保遊戲能帶給使用者流暢且流暢的使用體驗。
Play 會在適當情況下,開始減少顯示無法讓使用者享有的遊戲體驗 手機效能可達到 20 FPS 的標準請注意,Android Vitals 只會開始監控 遊戲執行一分鐘後,即可降低影格速率。
詳情請造訪說明中心 有關指標的資訊
,瞭解如何調查及移除這項存取權。如何評估每秒影格數及偵測緩慢影格
Android dumpsys surfaceflinger timestats
指令提供了平均每秒影格數和
在所有圖層中呈現時間直方圖
轉譯完成的部分。影格的「分享螢幕畫面」時間是指
目前的影格和上一個影格進行繪製以下
使用指令收集遊戲每秒影格數的步驟:
執行含有
enable
和clear
旗標的指令,即可開始擷取 每個 ACL 都由一或多個項目組成 而這些項目包含兩項資訊adb shell dumpsys SurfaceFlinger --timestats -clear -enable
當遊戲進行時間夠長時,請使用以下指令再次執行指令: 旗標
dump
來轉儲資訊:adb shell dumpsys SurfaceFlinger --timestats -dump
傾印的資訊會提供影格總數,並呈現呈現的歷來直方圖 所有由 SurfaceFlinger 轉譯的圖層。您必須找到 根據
layerName
篩選遊戲版面:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
緩慢影格速率指標可以根據 每一個資料層
例如 20 FPS 緩慢影格百分比 = (54 毫秒到 1000 毫秒的加總值) / totalFrames x 100
totalFrames = 274 ... presentToPresent histogram is as below: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
每層的平均每秒影格數也會顯示在傾印中:
... averageFPS = 30.179 ...
收集所有資訊後,您應停用 timestats,使用旗標
disable
:adb shell dumpsys SurfaceFlinger --timestats -disable
緩慢影格原因和解法
許多原因都可能造成影格顯示或轉譯時間較長 而不是開發人員的目標遊戲可能會受到 CPU/GPU 限制。或 裝置過熱,且會啟動節流熱狀態。或 遊戲的影格速率和裝置螢幕不一致 重新整理頻率:
使用 Android Frame Pacing (Swappy)。 Vulkan 和 ADPF 可將 解決這些問題並提升遊戲效能。
什麼是 Swappy
Android Frame Pacing 程式庫 (又稱為 Swappy) 是 AGDK 程式庫。Swappy 可協助 OpenGL 和 Vulkan 遊戲 讓 Android 裝置能流暢顯示畫面,並修正影格同步情形。
影格同步是指遊戲的邏輯和算繪迴圈 OS 螢幕子系統和底層顯示硬體。Android 螢幕子系統的設計可避免視覺失真 (又稱撕裂) 顯示硬體切換至新影格中斷時可能發生的問題 更新狀態為了避免出現這類瑕疵,螢幕子系統會 包括:
- 在內部為已通過的影格預留緩衝區
- 偵測延遲提交的影格
- 偵測到影格延遲時重複顯示已通過的影格
如何在原生專案中使用 Swappy
請參閱下列指南,整合 Android Frame Pacing 程式庫 加入遊戲:
如何在 Unity 遊戲引擎中使用 Swappy
Unity 已將 Android Frame Pacing 整合至自家引擎。如要啟用這項功能,請按照下列步驟操作: Unity 2019.2 的功能 或以上版本,在「Project Settings」>下方,勾選「Optimized Frame Pacing」核取方塊。 播放器 >「Android 設定」>解決方法與呈現方式:
或者,透過程式輔助方式,在邏輯程式碼中啟用「Optimized Frame Pacing 選項」,讓 Unity 平均運作 發布影格速率較低的影格速率,讓遊戲過程更順暢。
如何在 Unreal 遊戲引擎中使用 Swappy
Unreal 4.25 以上版本整合了 Android Frame Pacing 程式庫 (屬於 Android Game Development Kit:參閱「Mobile Frame Pacing」一文後,瞭解如何啟用 Android Frame Pacing 程式庫,以及如何透過 C++ 程式碼控制影格使用速度。
什麼是 Vulkan
Vulkan 是新型的跨平台 3D 圖形 API,旨在盡可能減少裝置圖形處理硬體與遊戲間的抽象化情形。雖說 Vulkan 是 Android 的主要低階圖形 API,可取代 OpenGL ES,OpenGL ES 仍支援 Android,但已不再提供相關功能 。
與 OpenGL ES 相較,Vulkan 具有下列優點:
- 更有效率的架構,圖形驅動程式的 CPU 負擔較小
- 全新的最佳化策略,可提升 CPU 效能
- OpenGL ES 未提供的全新圖形處理功能,例如無繫結 API 和 光線追蹤
如何在原生 Android 專案中使用 Vulkan
「開始使用 Android 上的 Vulkan」程式碼研究室會逐步引導您完成設定 改善 Vulkan 算繪管道,然後算繪具有紋理的旋轉三角形 。請使用程式碼研究室,瞭解如何轉譯遊戲圖形。
如何在 Unity 遊戲引擎中使用 Vulkan
如要在 Unity 上啟用自動選取裝置功能,請按照相關步驟進行設定 Auto Graphics API,
或者,您也可以停用 Auto Graphics API,手動啟用 Vulkan。 並將 Vulkan 排在「Graphics API」清單中最高。如果您是 使用 Unity 2021.1 或舊版,這是使用 Vulkan 的唯一方法。
使用 VkQuality Unity 引擎外掛程式 為遊戲提供圖形 API 的啟動時間建議 在特定裝置上放送
如何在 Unreal 遊戲引擎中使用 Vulkan
如要啟用 Vulkan 圖形 API,請依序前往「Project Settings」>平台 > Android >「建構」並選取「支援 Vulkan」。當您同時選取 [Support] (支援) Vulkan 和支援 OpenGL ES3.2,Unreal 預設使用 Vulkan。如果裝置 不支援 Vulkan,Unreal 會改回使用 OpenGL ES 3.2。
如果您使用特定的 Vulkan 功能,且該功能已造成不良行為
特定裝置,你可以自訂要排除的 BaseDeviceProfile.ini
檔案
連結裝置。請參閱自訂裝置設定檔與擴充性
這篇文章,瞭解如何
自訂 BaseDeviceProfile.ini
。因為新的裝置驅動程式可能會
請將 BaseDeviceProfile.ini 檔案保持在更新狀態
以及相關最佳化作業
什麼是 ADPF
Android 動態效能架構 (ADPF) 根據動態熱能、CPU 和 GPU 管理功能,將遊戲最佳化 。重點在於遊戲,但您也可以將這類功能用於其他 需要大量效能資料的應用程式
ADPF 是一組 API,可讓遊戲和會耗用大量效能的應用程式 更直接與 Android 裝置的電源和熱系統互動。取代為 這些 API,您可以監控 Android 系統的動態行為 透過不會讓裝置過熱的永續等級最佳化遊戲效能。
以下是 ADPF 的主要功能:
- Thermal API:監控裝置的熱力狀態,讓應用程式在無法維持永續等級前主動調整工作負載。
- CPU Performance Hint API:提供效能提示,讓 Android 選擇適當的工作負載效能設定 (例如 CPU 操作點或核心)。
- Game Mode API 和 Game State API:根據使用者的設定和遊戲專屬設定,優先最佳化效能或電池續航力特性,藉此啟用遊戲最佳化功能。
- 固定效能模式:在基準測試期間啟用裝置固定效能模式,取得不受動態 CPU 時脈影響的測量結果。
- 「電源效率模式」:向工作階段指示,您可以放心安排效能提示工作階段中的執行緒,使其較重視電池效能,而非效能。適用於 Android 15 (API leve 35)。
如何在原生 Android 專案中使用 ADPF
「在原生遊戲中整合適應性功能」程式碼研究室可引導您將 ADPF 功能整合至 遊戲過程,使用者可以依個人步調逐步完成。結尾處 您在程式碼研究室中會整合下列功能:
- 熱能 API:監聽裝置熱力狀況,並在裝置進入過熱保護狀態前做出回應。
- Game Mode API:瞭解玩家最佳化偏好設定 (最大化效能或節省電力),並據此進行調整。
- Game State API:讓系統瞭解遊戲狀態 (載入、播放、UI 等),系統就能據此調整資源 (加強 I/O、CPU、GPU 等)。
- Performance Hint API:告知系統您的執行緒模型和工作負載,讓系統據此分配資源。
如何在 Unity 遊戲引擎中使用 ADPF
Unity 的自動調整效能是 這個工具專為遊戲開發人員所設計 尤其是多元的 Android 生態系統「自動調整效能」可啟用 以配合裝置的效能和熱力特性 即時,確保玩家獲得流暢且有效率的遊戲體驗。
自動調整效能 Android 供應商 會逐步引導您在 Unity 中實作 ADPF。
如何在 Unreal 遊戲引擎中使用 ADPF
Android 動態效能架構(ADPF) 外掛程式 Unreal Engine 則提供 讓效能穩定,防止熱節流。 下載外掛程式 從 GitHub 取得。這個外掛程式會藉由設定 Unreal 主控台值: