Sessioni lente (solo giochi)

Sessioni lente è una nuova metrica di Android vitals in Google Play Console. Una sessione lenta è una sessione in cui oltre il 25% dei frame è lento. Un frame è lento se non viene presentato meno di 50 ms dopo il frame precedente (equivalente a 20 f/s). Android vitals segnala anche una seconda metrica Sessioni lente con un target di 34 ms (equivalente a 30 f/s). Con le sessioni lente puoi comprendere le prestazioni della frequenza frame del tuo gioco, che incidono sulla fluidità del gioco percepita dagli utenti.

A tempo debito, Google Play inizierà ad indirizzerà gli utenti lontano dai giochi che non possono raggiungere i 20 FPS sul telefono. Tieni presente che Android vitals inizia a monitorare la frequenza frame solo dopo che il gioco è stato in esecuzione per un minuto.

Visita il nostro Centro assistenza per maggiori dettagli sulla metrica.

Immagini in stile grafico a torta che mostrano il numero di frame lenti e non lenti.
Figura 1. Una sessione lenta in Android vitals.

Come misurare i FPS e rilevare i frame lenti

Il comando dumpsys surfaceflinger timestats di Android fornisce l'istogramma dei tempi medi di presentazione e presentazione per tutti i livelli in fase di rendering. La durata da presente a presente di un frame è l'intervallo tra il frame corrente e quello precedente disegnato. Di seguito sono riportati i passaggi per utilizzare il comando per raccogliere gli FPS del gioco:

  1. Esegui il comando con i flag enable e clear per iniziare ad acquisire informazioni:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Quando il gioco è stato utilizzato per un tempo sufficiente, esegui di nuovo il comando con il flag dump per eseguire il dump delle informazioni:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Le informazioni sottoposte a dump forniscono i frame totali e l'istogramma presentaToPresent per tutti i livelli visualizzati da SurfaceFlinger. Devi trovare la sezione del tuo gioco filtrando in base a layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    È possibile calcolare una frequenza frame lenta della sessione in base alle informazioni di ciascun livello.

    Ad esempio, percentuale di frame lenti 20 FPS = (somma di valori da 54 ms a 1000 ms) / 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
    

    Nel dump vengono mostrati anche i FPS medi di ogni livello:

    ...
    averageFPS = 30.179
    ...
    
  3. Dopo aver raccolto tutte le informazioni, devi disabilitare le statistiche temporali utilizzando il flag disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Cause e soluzioni per frame lenti

Un frame potrebbe presentare o visualizzare più a lungo sullo schermo rispetto al target dello sviluppatore. Il gioco potrebbe essere legato a CPU/GPU. Oppure il dispositivo si sta surriscaldando e attiva uno stato termico limitato. Oppure la frequenza fotogrammi del gioco e la frequenza di aggiornamento del display del dispositivo non corrispondono.

Usa Android Frame Pacing (Overridepy), Vulkan e ADPF per risolvere questi problemi e migliorare il rendimento del tuo gioco.

Che cos'è Spotpy

La libreria Android Frame Pacing, nota anche come Spotpy, fa parte delle librerie AGDK. Spotpy consente ai giochi OpenGL e Vulkan di ottenere un rendering fluido e il pacing dei frame su Android.

Il pacing dei frame è la sincronizzazione della logica e del ciclo di rendering di un gioco con il sottosistema di un sistema operativo di visualizzazione e l'hardware del display sottostante. Il sottosistema del display di Android è stato progettato per evitare artefatti visivi (noti come strappi) che possono verificarsi quando l'hardware del display passa a un nuovo frame durante un aggiornamento. Per evitare questi artefatti, il sottosistema display esegue le seguenti operazioni:

  • Memorizza internamente i frame oltre i frame
  • Rileva gli invii tardivi di frame
  • Ripete la visualizzazione dei frame precedenti quando vengono rilevati frame finali

Come utilizzare Switchpy nei progetti nativi

Consulta le seguenti guide per integrare la libreria di pacing del frame Android nel tuo gioco:

Come utilizzare Switchpy nel motore grafico Unity

Unity ha integrato il pacing del frame Android nel proprio motore. Per attivare questa funzionalità in Unity 2019.2 o versioni successive, seleziona la casella di controllo Pacing frame ottimizzato in Impostazioni progetto > Player > Impostazioni per Android > Risoluzione e presentazione:

Finestra di dialogo Impostazioni progetto.
Figura 2. Attiva il pacing del frame in Unity Engine.

In alternativa, attiva in modo programmatico l'opzione Pacing dei frame ottimizzato nel tuo codice logico per consentire a Unity di distribuire uniformemente i frame per meno varianza nella frequenza fotogrammi, creando un gameplay più fluido.

Come utilizzare Switchpy nel motore di gioco Unreal

Unreal 4.25 e versioni successive integrano la libreria Android Frame Pacing, che fa parte dell'Android Game Development Kit. L'articolo Pacing frame mobile spiega come attivare la libreria di pacing frame Android e come controllare il pacing frame dal codice C++.

Cos'è Vulkan

Vulkan è una moderna API grafica 3D multipiattaforma progettata per ridurre al minimo l'astrazione tra l'hardware della grafica del dispositivo e il tuo gioco. Vulkan è l'API grafica di basso livello principale su Android, sostituisce OpenGL ES. OpenGL ES è ancora supportato su Android, ma non è più in fase di sviluppo di funzionalità attive.

Vulkan offre i seguenti vantaggi rispetto a OpenGL ES:

  • Un'architettura più efficiente con un overhead della CPU inferiore nel driver di grafica
  • Nuove strategie di ottimizzazione per migliorare le prestazioni della CPU
  • Nuove funzionalità grafiche non disponibili in OpenGL ES, come le API bindless e il ray tracing

Come utilizzare Vulkan nei progetti Android nativi

Il codelab Iniziare a utilizzare Vulkan su Android ti guida nella configurazione della pipeline di rendering di Vulkan e nel rendering di un triangolo con texture rotante sullo schermo. Usa il codelab per imparare a eseguire il rendering della grafica del tuo gioco.

Come utilizzare Vulkan nel motore grafico Unity

Per attivare la selezione automatica dei dispositivi su Unity, segui i passaggi per configurare l'API Auto Graphics.

Finestra di dialogo Impostazioni progetto.
Figura 3. Attiva l'API Unity Auto Graphics.

In alternativa, puoi abilitare Vulkan manualmente disattivando l'API Auto Graphics e inserire Vulkan con la priorità più alta nell'elenco API grafiche. Se utilizzi Unity 2021.1 o una versione precedente, questo è l'unico modo per utilizzare Vulkan.

Finestra di dialogo Impostazioni progetto.
Figura 4. Scegli manualmente Vulkan come API grafica principale in Unity.

Utilizza il plug-in del motore VkQuality Unity per fornire suggerimenti sulla data di lancio dell'API grafica per il tuo gioco da utilizzare su dispositivi specifici.

Come utilizzare Vulkan nel motore grafico Unreal

Per abilitare l'API grafica Vulkan, vai a Impostazioni progetto > Piattaforme > Android > Build e seleziona Supporta Vulkan. Quando selezioni sia Supporta Vulkan sia Supporta OpenGL ES3.2, Unreal utilizza Vulkan per impostazione predefinita. Se il dispositivo non supporta Vulkan, Unreal utilizza la modalità OpenGL ES 3.2.

Finestra di dialogo Impostazioni progetto.
Figura 5. Attiva Vulkan in Unreal Engine.

Se utilizzi funzionalità Vulkan specifiche che si comportano in modo inadeguato su alcuni dispositivi, puoi personalizzare il file BaseDeviceProfile.ini per escluderli. Consulta Personalizzazione dei profili dei dispositivi e scalabilità per Android per scoprire come personalizzare BaseDeviceProfile.ini. Poiché i nuovi driver potrebbero correggere dispositivi dannosi conosciuti in precedenza, mantieni aggiornato il file BaseDeviceProfile.ini per ottenere tutte le ottimizzazioni.

Che cos'è l'ADPF

Android Dynamic Performance Framework (ADPF) ottimizza i giochi in base alle funzionalità di gestione dinamica termica, CPU e GPU su Android. I giochi sono incentrati sui giochi, ma puoi utilizzare le funzionalità anche per altre app che richiedono prestazioni elevate.

ADPF è un insieme di API che consente a giochi e app ad alte prestazioni di interagire più direttamente con i sistemi di alimentazione e termica dei dispositivi Android. Con queste API puoi monitorare il comportamento dinamico sui sistemi Android e ottimizzare le prestazioni dei giochi a un livello sostenibile per non surriscaldare i dispositivi.

Di seguito sono riportate le principali funzionalità di ADPF:

  • API termica: monitora lo stato termico di un dispositivo in modo che l'applicazione possa regolare in modo proattivo il carico di lavoro prima che diventi insostenibile.
  • API CPU Performance Hint: fornisce suggerimenti sulle prestazioni che consentono ad Android di scegliere le impostazioni giuste per le prestazioni (ad esempio, core o punto operativo della CPU) per il carico di lavoro.
  • API Game Mode e API Game State: attiva l'ottimizzazione del gameplay dando la priorità alle caratteristiche di prestazioni o durata della batteria in base alle impostazioni dell'utente e alle configurazioni specifiche del gioco.
  • Modalità prestazioni fisse: attiva la modalità a prestazioni fisse su un dispositivo durante il benchmarking per ottenere misurazioni che non vengono alterate dal clock dinamico della CPU.
  • Modalità di efficienza energetica: indica alla sessione che i thread nella sessione di suggerimenti sulle prestazioni possono essere pianificati in modo sicuro in modo da preferire l'efficienza energetica alle prestazioni. Funzionalità disponibile in Android 15 (livello API 35).

Come utilizzare ADPF nei progetti Android nativi

Il codelab Integrazione delle funzionalità di adattabilità nel gioco nativo illustra come integrare le funzionalità ADPF nel tuo gioco seguendo i passaggi che puoi seguire secondo i tuoi tempi. Alla fine del codelab, avrai integrato le seguenti funzionalità:

  • API termica: ascolta la condizione termica del dispositivo e reagisci prima che questo entri in stato di limitazione termica.
  • API Game Mode: comprendi le preferenze di ottimizzazione dei giocatori (ottimizza le prestazioni o preserva la batteria) e apporta le modifiche necessarie.
  • API Game State: consenti al sistema di conoscere lo stato del gioco (caricamento, riproduzione, UI e così via) e consentire al sistema di regolare le risorse di conseguenza (incremento di I/O oppure CPU, GPU e così via).
  • API Performance Hint: comunica al sistema il tuo modello di threading e il carico di lavoro in modo che il sistema possa allocare le risorse di conseguenza.

Come utilizzare ADPF nel motore grafico Unity

Prestazioni adattive di Unity è uno strumento per gli sviluppatori di giochi che vogliono ottimizzare i propri giochi sui dispositivi mobili, in particolare per l'ecosistema Android diversificato. Le prestazioni adattive consentono al tuo gioco di adattarsi in tempo reale alle prestazioni e alle caratteristiche termiche del dispositivo, garantendo un'esperienza di gioco fluida ed efficiente.

Il provider per Android Adaptive Performance ti guida nei passaggi per implementare ADPF in Unity.

Finestra di dialogo Impostazioni progetto.
Figura 6. Integra ADPF in Unity Engine.

Come utilizzare ADPF in Unreal Game Engine

Finestra di dialogo Impostazioni progetto.
Figura 7. Integra ADPF in Unreal Engine.
  1. Scarica il plug-in.
  2. Copia il plug-in nella cartella dei plug-in del progetto
  3. Attiva il plug-in ADPF Unreal Engine nell'editor Unreal
  4. Riavvia l'editor Unreal
  5. Crea e cucina il gioco

Il plug-in Android Dynamic Performance Framework(ADPF) per Unreal Engine offre prestazioni stabili e previene la limitazione termica. Scarica il plug-in da GitHub. Questo plug-in modifica le funzionalità impostando Valori irreali della console.