緩慢工作階段

「緩慢工作階段」是 Google Play 管理中心新推出的 Android Vitals 指標。緩慢 「工作階段」是指超過 25% 影格的緩慢工作階段。影格 是緩慢的。 相當於 20 FPS。Android Vitals 也會回報第二個緩慢工作階段 目標為 34 毫秒 (相當於 30 FPS)。使用「緩慢工作階段」 可以瞭解遊戲的影格速率效能,進而影響 確保遊戲能帶給使用者流暢且流暢的使用體驗。

Play 會在適當情況下,開始減少顯示無法讓使用者享有的遊戲體驗 手機效能可達到 20 FPS 的標準請注意,Android Vitals 只會開始監控 遊戲執行一分鐘後,即可降低影格速率。

詳情請造訪說明中心 有關指標的資訊

圓餅圖類似圖形,可呈現緩慢影格和未緩慢影格的數量。
圖 1. Android Vitals 的緩慢工作階段。

如何評估每秒影格數及偵測緩慢影格

Android dumpsys surfaceflinger timestats 指令提供了平均每秒影格數和 在所有圖層中呈現時間直方圖 轉譯完成的部分。影格的「分享螢幕畫面」時間是指 目前的影格和上一個影格繪製的項目以下 使用指令收集遊戲每秒影格數的步驟:

  1. 執行含有 enableclear 旗標的指令,即可開始擷取 每個 ACL 都由一或多個項目組成 而這些項目包含兩項資訊

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. 當遊戲進行時間夠長時,請使用以下指令再次執行指令: 旗標 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
    ...
    
  3. 收集所有資訊後,您應停用 timestats,使用旗標 disable

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

緩慢影格原因和解法

許多原因都可能造成影格顯示或轉譯時間較長 而不是開發人員的目標遊戲可能會受到 CPU/GPU 限制。或 裝置過熱,且會啟動節流熱狀態。或 遊戲的影格速率和裝置螢幕不一致 重新整理頻率

使用 Android Frame Pacing (Swappy)VulkanADPF 可將 解決這些問題並提升遊戲效能。

什麼是 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 設定」>解決方法與呈現方式

專案設定對話方塊。
圖 2. 在 Unity Engine 中啟用 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

專案設定對話方塊。
圖 3. 啟用 Unity Auto Graphics API。

或者,您也可以停用 Auto Graphics API,手動啟用 Vulkan。 並將 Vulkan 排在「Graphics API」清單中最高。如果您是 使用 Unity 2021.1 或舊版,這是使用 Vulkan 的唯一方法。

專案設定對話方塊。
圖 4. 在 Unity 中手動選擇 Vulkan 做為主要圖形 API。

使用 VkQuality Unity 引擎外掛程式 為遊戲提供圖形 API 的啟動時間建議 在特定裝置上放送

如何在 Unreal 遊戲引擎中使用 Vulkan

如要啟用 Vulkan 圖形 API,請依序前往「Project Settings」>平台 > Android >「建構」並選取「支援 Vulkan」。當您同時選取 [Support] (支援) Vulkan支援 OpenGL ES3.2,Unreal 預設使用 Vulkan。如果裝置 不支援 Vulkan,Unreal 會改回使用 OpenGL ES 3.2。

專案設定對話方塊。
圖 5. 在 Unreal Engine 中啟用 Vulkan。

如果您使用特定的 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。

專案設定對話方塊。
圖 6. 在 Unity Engine 中整合 ADPF。

如何在 Unreal 遊戲引擎中使用 ADPF

專案設定對話方塊。
圖 7.在 Unreal Engine 中整合 ADPF。
  1. 下載外掛程式
  2. 將外掛程式複製到專案外掛程式資料夾
  3. 在 Unreal 編輯器中啟用 ADPF Unreal Engine 外掛程式
  4. 重新啟動 Unreal 編輯器
  5. 打造並烹飪遊戲

Android 動態效能架構(ADPF) 外掛程式 Unreal Engine 則提供 讓效能穩定,防止熱節流。 下載外掛程式 從 GitHub 取得。這個外掛程式會藉由設定 Unreal 主控台值: