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 della durata frame da motori di gioco nativi (C e C++).

Per il motore grafico Unity, consulta la guida di Unity.

Premessa

Un componente chiave dell'esperienza di gioco sono le prestazioni di rendering. Le prestazioni di rendering sono il risultato dei due input seguenti:

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

Per i giochi, una buona prestazione di rendering viene definita come segue:

  • Pubblicazione di una frequenza fotogrammi stabile e coerente (ovvero la percentuale di frame visualizzati alla frequenza desiderata).
  • Viene eseguito il rendering dei frame alla massima frequenza 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 la frequenza fotogrammi stabile e desiderata.

La libreria del pacing dei frame Android limita gran parte della variazione nelle durate frame, fornendo una frequenza fotogrammi stabile per i giochi. La variazione restante della durata dei frame è dovuta al livello di dettaglio visualizzato durante determinate scene del gameplay e alle funzionalità grafiche del dispositivo. Con Android Performance Tuner, puoi individuare i momenti del gameplay in cui la durata frame è più lenta o più veloce dell'obiettivo e correlare questi problemi e opportunità per:

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

Registra e carica i dati

La libreria di diapason si basa su una delle sue funzioni di tick, che viene chiamata ogni frame dalla libreria di pacing dei frame Android. All'interno della libreria, le 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 definizioni specificate in un file del buffer di protocollo.

Tasti degli strumenti

Un tasto 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 graduazione. La raccolta del pacing dei frame Android utilizza un insieme predefinito di chiavi degli strumenti, definito in swappy_common.h. Puoi anche definire le tue chiavi degli strumenti se non usi la raccolta del pacing dei frame.

Annotazioni

Le annotazioni forniscono informazioni contestuali sull'attività del gioco quando viene registrato un segno di spunta. Ad esempio, un'annotazione potrebbe identificare uno qualsiasi dei seguenti elementi:

  • Il livello di gioco attuale
  • Sullo schermo c'è un "grande capo"
  • Qualsiasi altra informazione pertinente sullo stato del gioco

Le annotazioni sono definite dal messaggio del buffer del protocollo com.google.tuningfork.Annotation. Per impostare l'annotazione corrente, passi a TuningFork_setCurrentAnnotation() una serializzazione del messaggio che hai definito. Tutti i dati dei segni di graduazione successivi vengono quindi associati a questa annotazione fino a quando non viene impostata un'altra annotazione. Di seguito è riportato un esempio di definizione di protocollo 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 gioco, ad esempio il livello di dettaglio del mesh, la risoluzione delle texture e il metodo di anti-alias. Come le annotazioni, i parametri di fedeltà vengono definiti utilizzando il messaggio del buffer del protocollo com.google.tuningfork.FidelityParams. Di seguito è riportato un esempio di definizione di protocollo 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 vengono associati ai nuovi parametri.

Per consentire a Google Play di comprendere le annotazioni e i parametri di fedeltà che definisci, il file del buffer di protocollo che contiene queste definizioni deve essere incluso nell'APK del gioco, insieme alle impostazioni di inizializzazione. Devi inoltre fornire valori predefiniti per le combinazioni di parametri di fedeltà comuni nell'APK per poter segmentare i dati in base a tali combinazioni nell'interfaccia utente di Google Play. Per ulteriori informazioni, consulta Definire i livelli qualitativi.

Overhead di memoria e CPU

Tutta la memoria utilizzata dalla libreria di Tuning Fork viene allocata all'inizializzazione per evitare sorprese durante il gameplay. La dimensione dei dati dipende dal numero di chiavi degli strumenti, dal numero di possibili annotazioni e dal numero di bucket in ogni istogramma; è un multiplo di tutte queste volte quattro byte per ogni bucket. Esistono inoltre due copie di tutti gli istogrammi per consentire l'invio con doppio buffer.

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

Le chiamate a una funzione di spunta richiedono un overhead di elaborazione ridotto: calcola semplicemente un indice nell'array di bucket a istogrammi e incrementa un conteggio intero.

Integrare la libreria di Tuning Fork

Questa guida all'integrazione è divisa 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 di Tuning Fork nella tua toolchain e come utilizzare le funzioni fornite dalla libreria. Fai clic sul link Avanti di seguito per iniziare.