Panoramica di Android Performance Tuner (nativo)

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

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

Premessa

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

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

Per i giochi, una buona prestazione di rendering si definisce 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, a 30 o 60 FPS, a seconda del tipo di gioco.
  • Massimizzazione del livello di dettaglio per un utente in base alle dimensioni e alla densità dello schermo, ottenendo comunque una frequenza fotogrammi stabile e desiderata.

La libreria del pacing dei frame Android limita gran parte della variazione della durata dei frame, fornendo una frequenza fotogrammi stabile per i giochi. La restante variazione 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 del tuo target e correlare questi problemi e opportunità per:

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

Registra e carica i dati

La libreria di Tuning Fork si basa su una delle sue funzioni di graduazione che è chiamata ogni frame dalla libreria di pacing dei frame Android. 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 definizioni specificate in un file di buffer di protocollo.

Tasti degli strumenti

Un tasto strumento indica la provenienza del frame nel frame ed è un numero intero che deve essere passato a ogni chiamata di funzione di graduazione. La libreria di pacing dei frame Android utilizza un set predefinito di chiavi strumento, definito in swappy_common.h. Puoi anche definire le tue chiavi strumentali se non usi la libreria di pacing dei frame.

Annotazioni

Le annotazioni forniscono informazioni contestuali sull'attività del gioco quando viene registrato un tick. Ad esempio, un'annotazione potrebbe identificare quanto segue:

  • Il livello di gioco corrente
  • 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 attuale, devi passare una serializzazione del messaggio definito a TuningFork_setCurrentAnnotation(). Tutti i successivi dati di graduazione 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à influiscono sulle prestazioni e sulla 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 successivi dati caricati vengono associati ai nuovi parametri.

Per consentire a Google Play di comprendere le annotazioni e i parametri di fedeltà che definisci, il file di buffer di protocollo che contiene queste definizioni deve essere associato all'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 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 tutti questi moltiplicati per quattro byte per ogni bucket. Esistono anche due copie di tutti gli istogrammi per consentire l'invio con doppio buffer.

L'invio avviene su un thread separato e non blocca le chiamate dei segni di graduazione. Se non è disponibile alcuna connessione per il caricamento, i contenuti inviati vengono messi in coda per essere caricati in un secondo momento.

La chiamata di una funzione di graduazione richiede un sovraccarico di elaborazione minimo: calcola semplicemente un indice nell'array di bucket a istogrammi e incrementa un conteggio intero.

Integrare la libreria 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 Tuning Fork nella toolchain e come utilizzare le funzioni fornite dalla libreria. Fai clic sul link Avanti di seguito per iniziare.