Le sessioni lente sono 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 è considerato lento se non viene presentato meno di 50 ms dopo il frame precedente (equivalente a 20 FPS). Android vitals registra anche una seconda metrica Sessioni lente con un target di 34 ms (equivalente a 30 FPS). Tramite i dati sulle sessioni lente puoi capire l'andamento della frequenza frame del tuo gioco, che incide 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 sui loro telefoni. Tieni presente che Android Vitals inizia a monitorare la frequenza frame solo dopo che il gioco è stato in esecuzione per un minuto.
Per ulteriori dettagli sulla metrica, visita il nostro Centro assistenza.

Come misurare i FPS e rilevare i frame lenti
Il comando dumpsys surfaceflinger timestats
per Android fornisce un'istogramma dei tempi di FPS e dall'attuale all'attuale medi per tutti i livelli in fase di rendering. Il tempo dall'ora corrente a quella attuale di un frame è l'intervallo tra il frame corrente e quello precedente disegnato. Ecco la procedura dettagliata per utilizzare il comando per raccogliere gli FPS del tuo gioco:
Esegui il comando con i flag
enable
eclear
per iniziare a acquisire informazioni:adb shell dumpsys SurfaceFlinger --timestats -clear -enable
Dopo aver giocato a lungo, esegui di nuovo il comando con il flag
dump
per eseguire il dump delle informazioni:adb shell dumpsys SurfaceFlinger --timestats -dump
Le informazioni dumpate forniscono i frame totali e l'istogramma presentToPresent 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
La frequenza frame lenta della sessione potrebbe essere calcolata in base alle informazioni di ciascun livello.
Ad esempio, la percentuale di frame lenti a 20 FPS = (somma dei 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 viene mostrato anche il numero medio di frame al secondo di ogni livello:
... averageFPS = 30.179 ...
Dopo aver raccolto tutte le informazioni, devi disattivare i parametri timestats utilizzando il flag
disable
:adb shell dumpsys SurfaceFlinger --timestats -disable
Cause e soluzioni dei frame lenti
Esistono molti motivi per cui un frame potrebbe essere visualizzato o visualizzato sullo schermo più a lungo rispetto al target dello sviluppatore. Il gioco potrebbe essere limitato da CPU/GPU. In alternativa, il dispositivo si surriscalda e attiva uno stato termico limitato. In alternativa, la frequenza frame del gioco e la frequenza di aggiornamento del display del dispositivo non corrispondono.
Utilizza Android Frame Pacing (Swappy), Vulkan e ADPF per risolvere questi problemi e migliorare il rendimento del tuo gioco.
Che cos'è Swappy
La libreria Frame Pacing di Android, nota anche come Swappy, fa parte delle librerie AGDK. Swappy aiuta i giochi OpenGL e Vulkan a ottenere un rendering fluido e a correggere il pacing dei frame su Android.
La sincronizzazione dei fotogrammi è la sincronizzazione del loop di rendering e della logica di un gioco con il sottosistema di visualizzazione di un sistema operativo e l'hardware di visualizzazione sottostante. Il sottosistema di visualizzazione di Android è stato progettato per evitare artefatti visivi (noti come tearing) che possono verificarsi quando l'hardware del display passa a un nuovo frame durante un aggiornamento. Per evitare questi artefatti, il sottosistema di visualizzazione svolge quanto segue:
- Memorizza internamente i frame precedenti
- Rileva l'invio in ritardo dei fotogrammi
- Ripete la visualizzazione dei frame precedenti quando vengono rilevati frame in ritardo
Scopri come Mir 2 ha utilizzato Swappy per ridurre il tasso di sessioni lente dal 40% al 10%.
Come utilizzare Swappy nei progetti nativi
Consulta le seguenti guide per integrare la libreria Android Frame Pacing nel tuo gioco:
- Integrare la funzionalità Frame Pacing di Android nel renderer OpenGL
- Integrare la funzionalità di pacing dei frame di Android nel renderer Vulkan
Come utilizzare Swappy nel motore di gioco Unity
Unity ha integrato la funzionalità Android Frame Pacing nel proprio motore. Per attivare questa funzionalità in Unity 2019.2 o versioni successive, seleziona la casella di controllo Adattamento del frame ottimizzato in Impostazioni progetto > Player > Impostazioni per Android > Risoluzione e presentazione:

In alternativa, attiva in modo programmatico l'opzione di pacing dei fotogrammi ottimizzato nel codice logico per consentire a Unity di distribuire uniformemente i fotogrammi in modo da ridurre la varianza della frequenza fotogrammi e creare un gameplay più fluido.
Come utilizzare Swappy nel motore di gioco Unreal
Unreal 4.25 e versioni successive integrano la libreria Android Frame Pacing, che fa parte del Android Game Development Kit. L'articolo Temporizzazione frame mobile spiega come attivare la libreria di temporizzazione frame di Android e come controllare la temporizzazione frame dal codice C++.
Che cos'è Vulkan
Vulkan è un'API di grafica 3D moderna e multipiattaforma progettata per ridurre al minimo l'astrazione tra l'hardware grafico del dispositivo e il tuo gioco. Vulkan è l'API grafica di basso livello principale su Android, che sostituisce OpenGL ES. OpenGL ES è ancora supportato su Android, ma non è più in fase di sviluppo attivo.
Vulkan offre i seguenti vantaggi rispetto a OpenGL ES:
- Un'architettura più efficiente con un overhead della CPU inferiore nel driver grafico
- Nuove strategie di ottimizzazione per migliorare le prestazioni della CPU
- Nuove funzionalità grafiche non disponibili in OpenGL ES, come API senza vincoli e ray tracing
Come utilizzare Vulkan nei progetti Android nativi
Il codelab Introduzione a Vulkan su Android ti guida nella configurazione della pipeline di rendering Vulkan e poi nel rendering di un triangolo con texture e in rotazione sullo schermo. Utilizza il codelab per scoprire come eseguire il rendering della grafica del gioco.
Come utilizzare Vulkan nel motore di gioco Unity
Per attivare la selezione automatica del dispositivo in Unity, segui i passaggi per configurare Auto Graphics API.

In alternativa, puoi attivare Vulkan manualmente disattivando l'API Auto Graphics e impostando Vulkan come priorità massima nell'elenco API Graphics. Se utilizzi Unity 2021.1 o una versione precedente, questo è l'unico modo per utilizzare Vulkan.

Utilizza il plug-in del motore Unity VkQuality per fornire consigli al momento del lancio sull'API grafica da utilizzare per il tuo gioco su dispositivi specifici.
Come utilizzare Vulkan nel motore di gioco Unreal
Per attivare l'API grafica Vulkan, vai a Impostazioni progetto > Piattaforme > Android > Build e seleziona Supporta Vulkan. Se selezioni sia Supporta Vulkan sia Supporta OpenGL ES 3.2, Unreal utilizza Vulkan per impostazione predefinita. Se il dispositivo non supporta Vulkan, Unreal esegue il fallback su OpenGL ES 3.2.

Se utilizzi funzionalità Vulkan specifiche che hanno un comportamento indesiderato su determinati dispositivi, puoi personalizzare il file BaseDeviceProfile.ini
in modo da escludere questi dispositivi. Consulta Personalizzazione dei profili del dispositivo e scalabilità per Android per scoprire come personalizzare BaseDeviceProfile.ini
. Poiché i nuovi driver dei dispositivi potrebbero correggere i dispositivi con problemi noti in precedenza, mantieni aggiornato il file BaseDeviceProfile.ini per ottenere tutte le ottimizzazioni.
Che cos'è ADPF
Android Dynamic Performance Framework (ADPF) ottimizza i giochi in base alle funzionalità di gestione termica, CPU e GPU dinamiche su Android. L'attenzione è rivolta ai giochi, ma puoi utilizzare le funzionalità anche per altre app con un elevato utilizzo delle risorse.
ADPF è un insieme di API che consente a giochi e app ad alta intensità di risorse di interagire più direttamente con i sistemi di alimentazione e termici dei dispositivi Android. Con queste API, puoi monitorare il comportamento dinamico sui sistemi Android e ottimizzare le prestazioni del gioco a un livello sostenibile che non surriscalda i dispositivi.
Ecco le principali funzionalità di ADPF:
- API Thermal: 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 sul rendimento che consentono ad Android di scegliere le impostazioni di rendimento giuste (ad esempio, il punto di funzionamento o il core della CPU) per il carico di lavoro.
- API Game Mode e API Game State: consentono di ottimizzare il 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à prestazioni fisse su un dispositivo durante il benchmarking per ottenere misurazioni non alterate dal clock dinamico della CPU.
- Modalità di efficienza energetica: indica alla sessione che i thread nella sessione di suggerimenti sul rendimento possono essere pianificati in sicurezza in modo da dare la priorità all'efficienza energetica rispetto alle prestazioni. Disponibile in Android 15 (livello API 35).
Come utilizzare ADPF nei progetti Android nativi
Il codelab Integrazione delle funzionalità di adattabilità nel tuo gioco nativo ti guida nell'integrazione delle funzionalità ADPF nel tuo gioco con passaggi che puoi seguire a tuo ritmo. Al termine del codelab, avrai integrato le seguenti funzionalità:
- API Thermal: ascolta le condizioni termiche del dispositivo e reagisci prima che il dispositivo entri in uno stato di throttling termico.
- API Game Mode: comprendi le preferenze di ottimizzazione del giocatore (massimizzare le prestazioni o preservare la batteria) e apporta le modifiche del caso.
- API Game State: comunica al sistema lo stato del gioco (caricamento, riproduzione, UI e così via) e il sistema può regolare le risorse di conseguenza (aumentare I/O, CPU, GPU e così via).
- API Performance Hint: comunica al sistema il modello di threading e il carico di lavoro in modo che possa allocare le risorse di conseguenza.
Come utilizzare ADPF nel motore di gioco Unity
Le prestazioni dinamiche di Unity sono uno strumento per gli sviluppatori di giochi che vogliono ottimizzare i propri giochi sui dispositivi mobili, in particolare per il diversificato ecosistema Android. La funzionalità Prestazioni adattiva consente al tuo gioco di adattarsi alle prestazioni e alle caratteristiche termiche del dispositivo in tempo reale, garantendo un'esperienza di gioco fluida ed efficiente.
Il provider Android per il rendimento adattivo ti guida nella procedura di implementazione di ADPF in Unity.

Come utilizzare ADPF nel motore di gioco Unreal

- Scarica il plug-in
- Copia il plug-in nella cartella dei plug-in del progetto
- Attivare il plug-in ADPF Unreal Engine nell'editor Unreal
- Riavviare l'editor Unreal
- Crea e cucina il gioco
Il plug-in Android Dynamic Performance Framework(ADPF) per Unreal Engine offre prestazioni stabili e impedisce la limitazione di temperatura. Scarica il plug-in da GitHub. Questo plug-in modifica le funzionalità impostando valori della console Unreal.