緩慢工作階段是指緩慢影格占比超過 25% 的工作階段,如果影格的顯示時間與前一個影格間隔超過 50 毫秒 (相當於 20 FPS),就屬於緩慢影格。Android Vitals 也會回報第二個「緩慢工作階段」指標,目標為 34 毫秒 (相當於 30 FPS)。緩慢工作階段資料可以協助您掌握遊戲的影格速率效能,從而得知使用者是否獲得流暢的遊戲體驗。
Play 會在適當情況下,開始減少顯示無法達到 20 FPS 的遊戲。請注意,遊戲執行一分鐘後,Android Vitals 才會開始監控影格速率。
如要進一步瞭解這項指標,請前往說明中心。

如何測量 FPS 及偵測緩慢影格
Android dumpsys surfaceflinger timestats 指令會提供平均 FPS,以及所有正在算繪圖層的「顯示到顯示」時間直方圖。影格的「顯示到顯示」時間是指目前影格與上一個繪製影格之間的時間間隔。以下是使用這項指令收集遊戲 FPS 的步驟:
執行加上
enable和clear旗標的指令,開始擷取資訊:adb shell dumpsys SurfaceFlinger --timestats -clear -enable遊戲執行一段時間後,請再次執行指令並加上
dump標記,以傾印資訊:adb shell dumpsys SurfaceFlinger --timestats -dump傾印的資訊會提供 SurfaceFlinger 轉譯的所有圖層的影格總數和 presentToPresent 直方圖。您必須根據
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傾印也會顯示每個圖層的平均 FPS:
... averageFPS = 30.179 ...收集所有資訊後,請使用
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 螢幕子系統經過特別設計,可避免可能發生在顯示硬體切換至新影格途中的瑕疵 (又稱為「撕裂」) 情形。為避免出現這類瑕疵,螢幕子系統會執行以下操作:
- 在內部為已通過的影格預留緩衝區
- 偵測延遲提交的影格
- 偵測到影格延遲時重複顯示已通過的影格
瞭解 Mir 2 如何使用 Swappy,將緩慢工作階段比率從 40% 降至 10%。
如何在原生專案中使用 Swappy
請參閱下列指南,將 Android Frame Pacing 程式庫整合至遊戲中:
如何在 Unity 遊戲引擎中使用 Swappy
Unity 已將 Android Frame Pacing 整合至自家引擎。如要在 Unity 2019.2 以上版本中啟用這項功能,請依序前往「Project Settings」>「Player」>「Settings」,然後勾選「Android」>「Resolution and Presentation」下方的「Optimized Frame Pacing」核取方塊:

或者,您也可以在邏輯程式碼中以程式輔助方式啟用最佳化影格使用速度選項,讓 Unity 平均分配影格,減少影格速率差異,使遊戲更順暢。
如何在 Unreal 遊戲引擎中使用 Swappy
Unreal 4.25 以上版本整合了 Android Frame Pacing 程式庫,這是 Android Game Development Kit 的一部分。行動影格放送速度文章說明如何啟用 Android Frame Pacing 程式庫,以及如何透過 C++ 程式碼控制影格放送速度。
什麼是 Vulkan
Vulkan 是新型的跨平台 3D 圖形 API,旨在盡可能減少裝置圖形處理硬體與遊戲間的抽象化情形。雖說 Vulkan 是 Android 的主要低階圖形 API,可取代 OpenGL ES,但 Android 仍支援 OpenGL ES,只是我們不再積極開發相關功能。
與 OpenGL ES 相較,Vulkan 具有下列優點:
- 更有效率的架構,圖形驅動程式的 CPU 負擔較小
- 全新的最佳化策略,可提升 CPU 效能
- OpenGL ES 未提供的全新圖形處理功能,例如無繫結 API 和光線追蹤
如何在 Android 原生專案中使用 Vulkan
「開始在 Android 上使用 Vulkan」程式碼研究室會引導您設定 Vulkan 算繪管道,然後在畫面上算繪帶有紋理的旋轉三角形。請使用這個程式碼研究室,瞭解如何算繪遊戲圖像。
如何在 Unity 遊戲引擎中使用 Vulkan
如要在 Unity 上啟用自動選取裝置功能,請按照步驟設定自動圖像 API。
或者,您也可以手動啟用 Vulkan,方法是停用「Auto Graphics API」,然後將 Vulkan 放在「Graphics APIs」清單中的最高優先順序。如果您使用 Unity 2021.1 或舊版,這是使用 Vulkan 的唯一方法。
使用 VkQuality Unity 引擎外掛程式,在遊戲啟動時提供圖形 API 建議,供遊戲在特定裝置上使用。
如何在 Unreal 遊戲引擎中使用 Vulkan
如要啟用 Vulkan 圖形 API,請依序前往「Project Settings」>「Platforms」>「Android」>「Build」,然後選取「Support Vulkan」。同時選取「Support Vulkan」和「Support OpenGL ES3.2」時,Unreal 預設會使用 Vulkan。如果裝置不支援 Vulkan,Unreal 會改用 OpenGL ES 3.2。
如果您使用的特定 Vulkan 功能在某些裝置上會發生問題,可以自訂 BaseDeviceProfile.ini 檔案,排除這些裝置。請參閱「自訂 Android 裝置設定檔和可擴充性」,瞭解如何自訂 BaseDeviceProfile.ini。由於新版裝置驅動程式可能會修正先前已知有問題的裝置,請更新 BaseDeviceProfile.ini 檔案,取得所有最佳化設定。
什麼是 ADPF
Android 動態效能架構 (ADPF) 可根據 Android 上的動態熱能、CPU 和 GPU 管理功能,對遊戲進行最佳化調整。本文說明重點在於遊戲,但您也可以將這些功能用於其他耗用大量效能的應用程式。
ADPF 是一組 API,可讓遊戲和需要耗用大量效能執行的應用程式直接與 Android 裝置的電力和熱溫系統互動。這些 API 可讓您監控 Android 系統的動態行為,並且在不會使裝置過熱的永續等級最佳化遊戲效能。
以下是 ADPF 的主要功能:
- Thermal API:監控裝置的熱力狀態,讓應用程式在無法維持永續等級前主動調整工作負載。
- CPU 效能提示 API:提供效能提示,讓 Android 為工作負載選擇正確的效能設定 (例如 CPU 運作點或核心)。
- 遊戲模式 API 和遊戲狀態 API:根據使用者設定和遊戲專屬設定,優先最佳化效能或電池續航力特性,提升遊戲體驗。
- 固定效能模式:在基準化期間為裝置啟用固定效能模式,以取得非由動態 CPU 時脈變更的測量數據。
- 能源效率模式:告知工作階段,可安全地排定 Performance Hint Session 中的執行緒,優先考量能源效率而非效能。適用於 Android 15 (API 級別 35)。
如何在 Android 原生專案中使用 ADPF
在原生遊戲中整合適應性功能程式碼研究室會引導您逐步將 ADPF 功能整合到遊戲中,您可以按照自己的步調操作。完成本程式碼研究室後,您將整合下列功能:
- Thermal API:監聽裝置的熱力狀態,並在裝置進入熱節流狀態前做出反應。
- 遊戲模式 API:瞭解玩家的最佳化偏好設定 (盡量提升效能或延長電池續航力),並據此調整。
- 遊戲狀態 API:讓系統瞭解遊戲狀態 (載入、播放、使用者介面等),系統即可相應調整資源 (提升 I/O 或 CPU、GPU 等)。
- Performance Hint API:讓系統瞭解執行緒模型和工作負載,以便系統相應分配資源。
如何在 Unity 遊戲引擎中使用 ADPF
Unity 的自適應效能是專為遊戲開發人員設計的工具,可協助他們在行動裝置上最佳化遊戲,特別是針對多元的 Android 生態系統。透過「適應性效能」,遊戲可即時配合裝置的效能和熱力特性進行調整,確保遊戲體驗順暢有效率。
Android 自適應效能供應器會逐步說明如何在 Unity 中導入 ADPF。
如何在 Unreal 遊戲引擎中使用 ADPF
Android 動態效能架構(ADPF) 的 Unreal Engine 外掛程式可提供穩定效能,並防止熱節流。從 GitHub 下載外掛程式。這個外掛程式會透過設定 Unreal 控制台值來變更功能。