Ottimizzare le frequenze di aggiornamento

Android 15 imposta una frequenza di aggiornamento predefinita di 60 Hz per i giochi per ottimizzare il consumo energetico. Per sbloccare frame rate più elevati, come 120 FPS, ora devi richiederli esplicitamente utilizzando l'API Frame Rate o la libreria Swappy.

Tuttavia, il sistema potrebbe ignorare questa richiesta in base a fattori come il livello della batteria o la temperatura del dispositivo. Sebbene le frequenze di aggiornamento più elevate migliorino la fluidità visiva, richiedono anche più energia e generano più calore. Pertanto, è fondamentale offrire agli utenti la possibilità di scegliere la frequenza di aggiornamento preferita e monitorare attentamente le prestazioni per garantire un'esperienza utente equilibrata.

Utilizzare l'API setFrameRate()

L'API setFrameRate() consente agli sviluppatori di giochi di utilizzare una frequenza di aggiornamento specifica del display. Per farlo, devi eseguire due operazioni:

  1. Verifica la compatibilità del dispositivo e della versione di Android.
  2. Richiedi un numero elevato di FPS utilizzando setFrameRate().

Verifica della compatibilità del dispositivo e della versione di Android:

Utilizza i metodi Display.getSupportedModes() per determinare se il dispositivo supporta 90 Hz, 120 Hz o altre frequenze di aggiornamento. Se il dispositivo è limitato a 60 Hz, non è possibile superare questo limite.

Kotlin

val display = windowManager.defaultDisplay
val supportedModes = display.supportedModes
for (mode in supportedModes) {
  Log.d("DisplayInfo", "Supported mode: ${mode.physicalWidth}x${mode.physicalHeight}, ${mode.refreshRate}Hz")
}

Richiedi FPS elevati

Richiama setFrameRate() all'inizio del ciclo di rendering, durante l'inizializzazione della finestra di gioco o quando gli FPS di destinazione devono modificare la frequenza di aggiornamento del display.

Anche se richiedi una frequenza più elevata, il sistema potrebbe comunque limitare la frequenza di aggiornamento a 60 Hz a causa di fattori come la modalità di risparmio energetico o la limitazione termica. Se le prestazioni di rendering del tuo gioco non raggiungono gli FPS target, richiedere una frequenza di aggiornamento più elevata potrebbe comportare un consumo energetico non necessario e aumentare la temperatura del dispositivo.

Il seguente snippet mostra come evitare una frequenza di aggiornamento eccessivamente elevata con l'API setFrameRate().

Kotlin

val targetFps = 120f
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
  window.setFrameRate(
      targetFps,
      Window.FrameRateCompatibility.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
      0
  )
}

La pagina Frame rate fornisce informazioni più dettagliate per approfondire l'argomento.

Utilizzare la libreria di pacing dei frame

La libreria di frame pacing, o Swappy, è una libreria open source progettata per semplificare la gestione della sincronizzazione verticale e la pianificazione dei frame nei motori di gioco C/C++ per Android. Questo strumento semplifica il processo di ottimizzazione delle frequenze di aggiornamento, fungendo di fatto da livello di astrazione di livello superiore rispetto a funzionalità come setFrameRate(). Inoltre, Swappy offre funzionalità aggiuntive che possono migliorare la fluidità e le prestazioni complessive del gioco.

La pagina Swappy fornisce informazioni più dettagliate.

Altri suggerimenti per risultati ottimali

La sezione seguente illustra alcuni suggerimenti principali:

  1. Commutazione dinamica della frequenza fotogrammi.
  2. Performance Monitoring.
  3. Fornisci opzioni FPS in base alla frequenza di aggiornamento massima del display.

Commutazione dinamica della frequenza dei fotogrammi

Per ottimizzare sia le prestazioni che il consumo energetico, valuta la possibilità di implementare il cambio dinamico della frequenza fotogrammi nel tuo gioco. Questa tecnica ti consente di passare senza problemi da frequenze di aggiornamento più elevate, come 120 Hz, per un gameplay più fluido durante le scene più impegnative, a frequenze più basse, come 60 Hz, durante i momenti meno intensi o quando la durata della batteria è un problema o si punta a meno di 60 FPS. L'esecuzione costante a 120 Hz può causare un'eccessiva generazione di calore e un rapido consumo eccessivo della batteria, con conseguente esperienza utente negativa. Regolando in modo intelligente la frequenza di aggiornamento in base al carico di rendering corrente e alle condizioni del dispositivo, puoi trovare un equilibrio tra fedeltà visiva ed efficienza energetica.

Performance Monitoring

Per garantire prestazioni ottimali del gioco a frequenze di aggiornamento più elevate, integra strumenti di monitoraggio delle prestazioni come un contatore di frame o una sovrapposizione delle prestazioni. Questi strumenti forniscono un feedback in tempo reale sulla frequenza fotogrammi effettiva del gioco, consentendoti di verificare se stai raggiungendo costantemente il target di 120 FPS.

Se la frequenza fotogrammi fluttua in modo significativo, valuta la possibilità di impostare una frequenza fotogrammi inferiore raggiungibile sul dispositivo in questione. In questo modo, l'esperienza sarà più fluida senza i problemi di prestazioni che potrebbero verificarsi quando si punta alla frequenza di aggiornamento più elevata.

Fornire opzioni f/s in base alla frequenza di aggiornamento massima del display

Il gioco deve rilevare la frequenza di aggiornamento del display massima supportata dal dispositivo corrente, ad esempio 60 Hz, 90 Hz o 120 Hz, e limitare le impostazioni FPS di conseguenza. Ad esempio, se il dispositivo supporta solo fino a 60 Hz, è consigliabile disattivare qualsiasi opzione superiore a 60 FPS nelle impostazioni del gioco per evitare di confondere il giocatore.