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.