Panoramica di Android Performance Tuner (nativo)

Questo argomento descrive come integrare Android Performance Tuner, noto anche come libreria Tuning Fork, per registrare e caricare i dati sul tempo frame dai motori di gioco nativi (C e C++).

Per il motore di gioco Unity, consulta la guida per Unity.

Sfondo

Un componente fondamentale dell'esperienza di gioco è il rendimento del rendering. Il rendimento del rendering è il risultato dei seguenti due input:

  • Frequenza fotogrammi: la frequenza con cui viene disegnato un fotogramma.
  • Impostazioni della qualità grafica: livello di fedeltà con cui viene presentato un frame, inclusa la fedeltà della simulazione e della grafica.

Per i giochi, un buon rendimento del rendering è definito come segue:

  • Offrire un frame rate stabile e coerente (ovvero la percentuale di frame renderizzati alla frequenza desiderata).
  • Rendering dei frame alla frequenza più elevata possibile mantenendo la stabilità, in genere 30 o 60 FPS a seconda del tipo di gioco.
  • Massimizzare il livello di dettaglio per un utente in base alle dimensioni e alla densità dello schermo, ottenendo comunque un frame rate stabile e desiderato.

La libreria Android Frame Pacing limita gran parte della variazione dei tempi di frame, fornendo un frame rate stabile per i giochi. La variazione rimanente nei tempi di frame è dovuta al livello di dettaglio visualizzato durante alcune scene del gameplay e alle funzionalità grafiche del dispositivo. Utilizzando Android Performance Tuner, puoi individuare i momenti del gameplay in cui la durata frame è più lenta o più veloce del target e correlare questi problemi e opportunità a:

  • Impostazioni di qualità specifiche
  • Scene specifiche del gioco
  • Modelli di dispositivi o specifiche dei dispositivi specifici

Registrare e caricare i dati

La libreria Tuning Fork si basa su una delle sue funzioni di tick che viene chiamata ogni frame dalla libreria Android Frame Pacing. All'interno della libreria, queste informazioni sui segni di spunta vengono aggregate in istogrammi che vengono poi caricati periodicamente su Google Play tramite un endpoint HTTP. Ogni segno di spunta viene registrato come associato a una chiave dello strumento e a un'annotazione, le cui definizioni vengono specificate in un file buffer del protocollo.

Chiavi di instrumentazione

Una chiave dello strumento indica da dove proviene il segno di spunta nel frame ed è un numero intero che deve essere passato a ogni chiamata di funzione di segno di spunta. La libreria Android Frame Pacing utilizza un insieme predefinito di chiavi di strumentazione, definito in swappy_common.h. Puoi anche definire i tasti dello strumento se non utilizzi la libreria Frame Pacing.

Annotazioni

Le annotazioni forniscono informazioni contestuali su cosa sta facendo il gioco quando viene registrato un tick. Ad esempio, un'annotazione potrebbe identificare uno dei seguenti elementi:

  • Il livello attuale del gioco
  • Sullo schermo è presente un "capo"
  • Qualsiasi altra informazione pertinente sullo stato del gioco

Le annotazioni sono definite dal messaggio del buffer di protocollo com.google.tuningfork.Annotation. Per impostare l'annotazione corrente, devi passare una serializzazione del messaggio che hai definito a TuningFork_setCurrentAnnotation(). Tutti i dati successivi vengono associati a questa annotazione finché non viene impostata un'altra annotazione. Di seguito è riportata una definizione proto di esempio per le annotazioni:

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

Parametri di fedeltà

I parametri di fedeltà influenzano le prestazioni e la fedeltà grafica del tuo gioco, ad esempio il livello di dettaglio della mesh, la risoluzione delle texture e il metodo di anti-aliasing. Come le annotazioni, i parametri fidelity vengono definiti utilizzando il messaggio del buffer di protocollo com.google.tuningfork.FidelityParams. Di seguito è riportato un esempio di definizione proto per i parametri di fedeltà:

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;
}

Durante l'inizializzazione di Tuning Fork, passi una serializzazione dei parametri utilizzati dal gioco. Puoi modificare questi parametri se, ad esempio, l'utente modifica le impostazioni di rendering del gioco e i dati caricati successivamente sono associati ai nuovi parametri.

Affinché Google Play possa comprendere le annotazioni e i parametri di fedeltà che definisci, il file di protocol buffer contenente queste definizioni deve essere incluso nell'APK del gioco, insieme alle impostazioni di inizializzazione. Devi anche fornire valori predefiniti per le combinazioni comuni di parametri di fedeltà nel tuo APK per segmentare i dati in base a questi parametri nell'interfaccia utente di Google Play. Per maggiori informazioni, consulta la sezione Definire i livelli di qualità.

Overhead di memoria e CPU

Tutta la memoria utilizzata dalla libreria Tuning Fork viene allocata all'inizializzazione per evitare sorprese durante il gioco. Le dimensioni dei dati dipendono dal numero di chiavi dello strumento, dal numero di annotazioni possibili e dal numero di bucket in ogni istogramma; sono un multiplo di tutti questi valori moltiplicato per quattro byte per ogni bucket. Esistono anche due copie di tutti gli istogrammi per consentire l'invio in modalità a doppio buffer.

L'invio avviene in un thread separato e non blocca le chiamate di controllo. Se non è disponibile una connessione di caricamento, l'invio viene messo in coda per il caricamento successivo.

La chiamata di una funzione di tick comporta un sovraccarico di elaborazione minimo: calcola semplicemente un indice nella matrice dei bucket dell'istogramma e incrementa un conteggio intero.

Integra la libreria Tuning Fork

Questa guida all'integrazione è suddivisa in due parti. La prima parte descrive come eseguire un test end-to-end utilizzando un'app demo e Google Play Console. La seconda parte descrive come integrare la libreria Tuning Fork nella toolchain e come utilizzare le funzioni fornite dalla libreria. Per iniziare, fai clic sul link Avanti qui sotto.