Uno dei problemi più difficili per gli sviluppatori di app è garantire un'animazione fluida, senza interruzioni e senza interruzioni. Il debug è particolarmente difficile quando il sistema esegue anche attività in background che consumano molte risorse. Non c'è un modo semplice per determinare se alcuni jank sono causati dalla tua app o dal sistema. Tuttavia, esiste uno strumento Profiler che può aiutarti a identificare la possibile origine del comportamento dannoso.
Rendering su ChromeOS
Un'app ottimizzata, come un gioco, di solito utilizza il doppio buffering per ridurre il più possibile il tempo di risposta dell'utente. Tuttavia, ci sono molti fattori che possono ridurre le prestazioni. Ad esempio, se il rendering di un frame richiede troppo tempo, il risultato visualizzato non è pronto per lo scambio del buffer successivo e, di conseguenza, il frame precedente si ripete.
Dopodiché, il renderer non può avviare il rendering del frame successivo, causando altri problemi. Questo scenario è familiare agli sviluppatori per dispositivi mobili Android. Quando un'app viene eseguita su ChromeOS, il contesto è ancora più complicato.
Un'app in esecuzione sul desktop non viene visualizzata direttamente nel frame di visualizzazione dello schermo. ma trasforma i dati in una texture. Di solito ci sono più app e ognuna esegue il rendering della grafica in una trama. Il sistema crea la visualizzazione sullo schermo utilizzando un compositore per combinare tutte le texture in un'unica immagine sul desktop.
Il compositore opera in modo trasparente sullo sfondo. Tuttavia, introduce un ritardo di un frame per massimizzare l'uso della pipeline GPU. In un mondo ideale, questo potrebbe non essere necessario, ma agevola le fluttuazioni delle prestazioni del sistema e consente di bilanciare un carico asimmetrico.
Quando il sistema operativo funziona molto, la GPU potrebbe essere ridotta. Può verificarsi un ritardo dal momento del rendering di un frame al momento in cui appare sullo schermo. A seconda dell'hardware, il sistema potrebbe ricorrere a quadrupli buffering per compensare. Anche con un buffering più profondo, la pipeline grafica può comunque presentare problemi.
L'utilità di traccia grafica ARC
ChromeOS dispone di uno strumento di profilazione che mostra come i buffer vengono percolati nel sistema, quando si verificano scambi di memoria, quanto è occupata la CPU/GPU e cosa sta facendo l'applicazione in un determinato momento, come mostrato nell'immagine seguente:
Configurare il profiler
Per utilizzare il profiler, devi eseguire la versione M75 o successiva. Per risultati ottimali, utilizza un dispositivo Intel.
Prima di utilizzare il profiler, esegui il seeding della tua app con le tracce.
Aggiungi Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);
al codice
dove vuoi includere una traccia. Utilizza un carattere Event
che inizia con
il prefisso customTrace
. Il prefisso non viene visualizzato nel messaggio di traccia.
Per configurare il profiler, procedi nel seguente modo:
- Attiva la modalità sviluppatore.
- Attiva le impostazioni di Chrome e abilita lo strumento di visualizzazione dei buffer grafici ARC.
- Vai a
chrome://arc-graphics-tracing
.
Esegui il profiler
- Seleziona stop on jank (interrompi su jank).
- Esegui l'app per Android.
- Quando l'app per Android è attiva e contrassegnata come attiva, premi Ctrl+Maiusc+G.
Quando si verificano dei ritardi, si apre una finestra del browser. Utilizza i tasti W e S per ingrandire e ridurre la sequenza temporale.