Questa guida descrive la procedura per analizzare e ottimizzare le prestazioni dei giochi sui dispositivi Android per un'esperienza utente ottimale. Vengono trattati l'identificazione dei colli di bottiglia delle prestazioni, la distinzione tra problemi di CPU e GPU e la verifica dei risultati dell'ottimizzazione.
Non importa quanto sia divertente o coinvolgente un gioco, se non funziona bene sui dispositivi mobili, i giocatori non lo apprezzeranno e non avrà successo. Anche i giochi divertenti possono avere problemi come un basso numero di frame al secondo (FPS) o il surriscaldamento del dispositivo. Questi problemi rendono i giocatori infelici. Pertanto, migliorare le prestazioni del gioco è essenziale e devi capire come ottimizzarle.
Il processo di ottimizzazione del rendimento prevede i seguenti passaggi:
Misurazione del rendimento complessivo del gioco. Quantifica il degrado delle prestazioni in base alla scena per individuare le anomalie.
Controllo dei limiti di CPU e GPU. Determina la causa principale, che sia legata alla CPU o alla GPU.
Strumenti:Unreal Insight, Unity Profiler, Perfetto e strumenti di misurazione delle prestazioni.
Ottimizzazione della CPU. Correggi i colli di bottiglia delle prestazioni identificati.
Strumenti:Unreal Insight, Unity Profiler, Perfetto e Simpleperf.
Ottimizzazione della GPU. Correggi i colli di bottiglia delle prestazioni identificati.
Strumenti:RenderDoc, Arm Mobile Studio, AGI, strumento specifico del fornitore.
Test A/B. Esegui test A/B per convalidare rigorosamente l'efficacia delle ottimizzazioni implementate.
Strumenti:Unreal Insight, Unity Profiler, Perfetto e strumenti di misurazione delle prestazioni, blocco della frequenza della CPU o della GPU e RenderDoc.
Questo processo iterativo (1-5) viene mantenuto finché non vengono raggiunti correttamente i parametri FPS e termici target.
Prerequisiti
Avere una build del gioco pronta per il test su un dispositivo Android.
Installa i seguenti strumenti:
Analizzare il rendimento completo del gioco
Devi controllare le prestazioni complessive del gioco e identificare eventuali anomalie o cali di prestazioni in base alla scena. Prima di ottimizzare il gioco, controlla le sue prestazioni attuali. Poiché i giochi includono molte UI e scene, analizza le scene con un utilizzo elevato di CPU o GPU o i layout che hanno prestazioni impreviste per monitorare il degrado delle prestazioni e l'utilizzo di CPU o GPU per scena.
- Quantifica il peggioramento delle prestazioni: utilizza gli strumenti di misurazione delle prestazioni per misurare il rendimento complessivo del gioco. Misura le prestazioni per scena per identificare aree specifiche con degrado o anomalie.
- Identifica le scene problematiche: analizza i dati per trovare le scene con un utilizzo elevato di CPU o GPU o in cui i layout dello schermo non producono le prestazioni previste.
- Raccogli dati di traccia:utilizza gli strumenti di traccia per raccogliere dati dettagliati sulle prestazioni per le scene problematiche identificate.
Identificare i colli di bottiglia della CPU o della GPU
Se il gioco non raggiunge il target FPS, determina se è CPU-bound o GPU-bound. L'analisi del comportamento di CPU e GPU è fondamentale per trovare opportunità di ottimizzazione, anche quando il dispositivo si surriscalda o consuma troppa energia durante il gioco. Puoi utilizzare vari metodi per scoprire se il sistema è CPU-bound o GPU-bound.
Analizza i dati di traccia:utilizza lo strumento che preferisci per analizzare i dati di traccia:
- Unreal Insight (Unreal Engine): analizza la traccia per visualizzare i tempi di
GameThread,RenderThreadeRHIThread.- Se
GameThreadoRenderThreadsuperano il limite di tempo del frame (ad esempio, 33,3 ms per 30 FPS), il gioco è CPU-bound. - Se
RHIThreadmostra un'esecuzione prolungata o rappresenta la maggior parte della durata frame, il gioco è limitato dalla GPU.
- Se
Figura 2. Traccia di approfondimento di Unreal con GameThread, RenderThread e RHIThread (fai clic per ingrandire). - Unity Profiler (Unity): se il thread principale consuma molto tempo
su marcatori come
Gfx.WaitForPresentOnGfxThreadmentre il thread di rendering mostraGfx.PresentFrameo<GraphicsAPIName>.WaitForLastPresent, il gioco è limitato dalla GPU.
Figura 3. Esempio di limite della GPU per Unity Profiler (fai clic per ingrandire). - Perfetto:analizza le assegnazioni dei core della CPU e i dettagli di esecuzione dei thread. Questa analisi facilita l'identificazione dei colli di bottiglia delle prestazioni tramite l'esame dettagliato delle informazioni sull'esecuzione dei thread.
Overhead della CPU: la traccia indica che il carico di lavoro su
GameThreadeRenderThread, insieme a VSync, è responsabile dei ritardi diQueuePresentdel thread RHI, il che indica uno scenario legato alla CPU.
Figura 4. Tracce Perfetto con dettagli di esecuzione della CPU (fai clic per ingrandire). Overhead della GPU: se il tempo di completamento della GPU supera il limite di durata frame, ad esempio 25 ms, il gioco è limitato dalla GPU. La traccia indica che il completamento della GPU supera i 25 ms, il che indica uno scenario vincolato alla GPU.
Figura 5. Tracce Perfetto con dettagli sull'overhead della GPU (fai clic per ingrandire).
- Unreal Insight (Unreal Engine): analizza la traccia per visualizzare i tempi di
Utilizza i comandi stat di Unreal Engine:
stat unit: confronta il tempo allocato ai thread Game, Draw e RHI. Se i tempi di gioco e di disegno sono bassi, ma il tempo RHI supera costantemente il limite di tempo del frame, il gioco è limitato dalla GPU. Ad esempio, se gli FPS richiesti sono 30 (equivalenti a 33,33 ms per frame) e i thread di gioco e di disegno rimangono costantemente in un intervallo di 10-15 ms, ma l'RHI supera costantemente i 30 ms, ciò suggerisce fortemente uno scenario in cui le prestazioni sono limitate dalla GPU.
Figura 6. L'unità Stat facilita la stima delle condizioni vincolate alla GPU. stat VulkanRHI: controlla le durate di invio e presentazione della coda.
Figura 7. Stat VulkanRHI facilita la stima delle condizioni di limite della GPU (fai clic per ingrandire). stat slow: esamina attentamente il tempo allocato ai thread Game, Render e RHI per individuare gli ostacoli.
Controlla le metriche sul rendimento: utilizza i risultati dell'analisi completa del rendimento del gioco. Su Android:
- CPU-bound:utilizzo della CPU (normalizzato) superiore al 15%, con utilizzo della GPU basso e FPS basso.
- Vincolato alla GPU: utilizzo della GPU superiore al 90%.
In genere, se gli FPS e l'utilizzo della GPU sono bassi mentre l'utilizzo della CPU supera il 15%, la situazione può essere considerata CPU-bound.
Figura 8. Metriche sul rendimento con utilizzo di CPU e GPU.
Ottimizzare le prestazioni della CPU
Se l'analisi indica che il gioco è vincolato alla CPU, esegui ulteriori indagini per individuare thread o API specifici che causano il collo di bottiglia.
Per indicazioni dettagliate, consulta Suggerimenti per l'ottimizzazione di CPU e GPU per Android.
Ottimizzare le prestazioni della GPU
Se l'analisi indica che il gioco è limitato dalla GPU, esegui ulteriori indagini utilizzando i debugger di frame per analizzare la pipeline di rendering e le chiamate di disegno.
Per indicazioni dettagliate, consulta Suggerimenti per l'ottimizzazione di CPU e GPU per Android.
Verificare l'efficacia dell'ottimizzazione
- Esegui test A/B: crea una build con le ottimizzazioni implementate.
- Misura il rendimento:utilizza gli stessi strumenti e metodi dell'analisi iniziale per misurare il rendimento della build ottimizzata.
- Confronta i risultati:confronta i nuovi dati sul rendimento con i dati iniziali per verificare che i colli di bottiglia identificati siano stati risolti e che gli obiettivi di FPS e termici siano stati raggiunti.
- Itera:ripeti i passaggi di analisi e ottimizzazione finché non ottieni il rendimento desiderato.