Android Performance Tuner 總覽 (原生)

本主題說明如何整合 Android Performance Tuner (又稱為 Tuning Fork 程式庫),以記錄及上傳原生 (C 和 C++) 遊戲引擎的影格時間資料。

如需 Unity 遊戲引擎,請參閱 Unity 指南

背景

遊戲體驗的其中一個關鍵是呈現效能。呈現效能是下列兩個輸入的結果:

  • 影格速率:影格的繪製頻率。
  • 圖形品質設定:影格呈現的擬真度 (包括模擬擬真度和圖形)。

遊戲的良好呈現效能定義如下:

  • 提供穩定且一致的影格速率 (即以所需頻率呈現影格百分比)。
  • 盡可能以最高頻率呈現影格,同時維持穩定性。通常是 30 或 60 FPS,視遊戲類型而定。
  • 在指定使用者的螢幕尺寸和密度設定的情況下,盡可能為使用者提高細節等級,同時又能達到所需的穩定影格速率。

Android Frame Pacing 程式庫會限制影格時間的大部分變化,為遊戲提供穩定影格速率。影格時間的剩餘變化是由於遊戲過程中特定情境顯示的細節等級,以及裝置的圖形功能所致。如果使用 Android Performance Tuner,您可以在遊戲過程中找出影格時間比目標慢或快的時間點,瞭解這些問題和改進空間與以下項目的關聯:

  • 特定畫質設定
  • 遊戲中的特定情境
  • 特定裝置型號或裝置規格

記錄及上傳資料

Tuning Fork 程式庫依賴的是它的一個刻點函式,在每個影格中由 Android Frame Pacing 程式庫呼叫。在程式庫中,此刻點資訊會彙整為直方圖,然後定期透過 HTTP 端點上傳至 Google Play。每個刻點都會記錄為與檢測金鑰註解相關聯,也就是您在通訊協定緩衝檔中指定的定義。

檢測金鑰

檢測金鑰代表刻點在影格中的位置,是傳遞給每個刻點函式呼叫的整數。Android Frame Pacing 程式庫使用一組在 swappy_common.h 中定義的預定義檢測金鑰。如果您不使用 Frame Pacing 程式庫,也可以定義自己的檢測金鑰。

註解

註解可提供您遊戲當下發生情況的情境資訊。舉例來說,註解可以識別下列任一項目:

  • 目前的遊戲等級
  • 螢幕上顯示「大老闆」
  • 任何其他相關遊戲狀態資訊

註解是由 com.google.tuningfork.Annotation 通訊協定緩衝區訊息定義。如要設定目前的註解,您可以傳送您定義至 TuningFork_setCurrentAnnotation() 的訊息序列化。除非您設定了其他註解,否則所有後續的刻點資料都會與這項註解建立關聯。以下是註解的 Proto 定義範例:

import "tuningfork.proto"
enum Level {
  INVALID_LEVEL = 0;
  Level_1 = 1;
  Level_2 = 2;
  Level_3 = 3;
}
message Annotation {
  optional Level level = 1;
}

擬真度參數

擬真度參數會影響遊戲的效能和圖形擬真度,例如網格細緻度、紋理解析度和鋸齒消除方法。與註解一樣,擬真度參數也是使用 com.google.tuningfork.FidelityParams 通訊協定緩衝區訊息來定義。以下是擬真度參數的 Proto 定義範例:

import "tuningfork.proto"
message FidelityParams {
  int32 texture_quality_level = 1;
  int32 shadow_resolution = 2;
  float terrain_details_percent = 3;
  int32 post_processing_effects_level = 4;
}

在 Tuning Fork 初始化時,您可傳遞遊戲使用的參數序列化。例如,就算使用者變更遊戲呈現設定,且後續的上傳資料與新參數相關聯,您也可以變更這些參數。

為了讓 Google Play 瞭解您定義的註解和擬真度參數,含有這些定義的通訊協定緩衝區檔案必須隨附在遊戲 APK 中,並提供初始化設定。此外,您也必須為 APK 中的常見擬真度參數組合提供預設值,才能在 Google Play UI 中依據這些預設值區隔資料。 詳情請參閱定義品質等級

記憶體與 CPU 負擔

為避免在遊戲過程中產生意外,系統會在初始化時分配 Tuning Fork 程式庫使用的所有記憶體。資料大小取決於檢測金鑰的數量、可能的註解數量,以及每個直方圖中的值區數量;它是上述所有數量乘以每個值區的四個位元組的倍數。此外,所有直方圖都有兩個副本,方便以雙緩衝的方式提交。

提交內容是獨立處理,且不會阻止刻點呼叫。如果沒有可用的上傳連線,系統會將提交內容排入佇列,以便稍後上傳。

呼叫刻點函式幾乎不會產生處理負擔,只會將索引計算為直方圖值區陣列,並增加整數計數。

整合 Tuning Fork 程式庫

這份整合指南分為兩個部分。第一部分說明如何使用試用版應用程式和 Google Play 管理中心執行端對端測試。第二部分說明如何將 Tuning Fork 程式庫整合至工具鏈,以及如何使用程式庫提供的函式。點選下方的「下一步」連結即可開始。