La stima dei tempi di elaborazione dei frame di CPU e GPU (tempi frame) è essenziale per comprendere le prestazioni della tua app e individuare i colli di bottiglia. Quando profila un'app con AGI, System Profiler fornisce dati di traccia che puoi usare per stimare le durate frame.
Tempi di CPU
In AGI, puoi visualizzare le durate frame della CPU totali e attive nel canale della CPU di un profilo di sistema.
Tempo di CPU totale
Per misurare il tempo totale di CPU speso, seleziona l'intervallo di tempo che include il tempo trascorso tra gli eventi successivi di invio dei frame. Gli eventi di invio dei frame sono eglSwapBuffers
(per OpenGL) e vkQueuePresentKHR
(per Vulkan).
Questa misurazione è una stima del tempo di CPU totale,ma non rappresenta necessariamente il tempo di CPU attivo. Ad esempio, nelle app associate alla GPU, la CPU potrebbe attendere il completamento del lavoro della GPU prima di inviare un nuovo frame. Questo accade spesso quando un evento dequeueBuffer
, eglSwapBuffer
(per OpenGL) o vkQueuePresent
(per Vulkan) richiede una grande parte del tempo di CPU.
Il tempo di attesa è incluso nel tempo di CPU totale, ma non nel tempo di CPU attivo.
Tempo di CPU attivo
Il tempo di CPU attivo determina quando la CPU esegue il codice dell'app senza essere in stato di inattività.
Per misurare il tempo di CPU attivo, visualizza le sezioni In esecuzione subito sopra gli eventi CPU. Conta tutte le parti della traccia tra i due eventi di invio frame che sono in stato In esecuzione. Assicurati di includere thread di lavoro.
Un altro modo per misurare il tempo di CPU attivo è visualizzare le sezioni dell'app nei percorsi della CPU. Queste sezioni indicano quando la CPU è in esecuzione e corrispondono alle sezioni Running.
Per identificare le sezioni dell'app, puoi aggiungere indicatori ATrace alla tua app. Gli indicatori verranno visualizzati nel monitoraggio CPU del System Profiler.
Stima i tempi frame della GPU
Per stimare la durata dei frame della GPU, puoi utilizzare sezioni GPU o contatori GPU in System Profiler. La stima è più precisa quando si utilizzano sezioni GPU.
Sezioni GPU
Se System Profiler dispone di informazioni sulle sezioni GPU, puoi ottenere informazioni molto accurate sulla durata frame della GPU misurando la quantità totale di tempo che la tua app dedica alle attività associate a un singolo frame.
Dispositivi in Mali
Sui dispositivi Mali, le sezioni GPU hanno tracce frammenti, non frammenti e, a volte, tracce non frammenti supplementari. Per i frame meno complessi, il lavoro con frammenti e non è sequenziale, pertanto è possibile distinguere il lavoro di un frame dall'altro cercando gli intervalli tra il lavoro di una GPU attiva.
In alternativa, se conosci il lavoro inviato alla GPU, identificare il pattern dei pass di rendering inviati fornisce informazioni su quando inizia e termina un frame.
Per le app con un flusso di lavoro GPU con più paralleli, puoi ottenere le durate dei frame della GPU cercando tutti i frame che hanno lo stesso submissionID nel riquadro Selezione per ogni sezione.
Per le app basate su Vulkan, è possibile utilizzare più contenuti inviati per comporre un frame. Tieni traccia degli ID inviati utilizzando la traccia Eventi Vulkan, che contiene una sezione per ciascun invio. Se selezioni una sezione di invio, verranno evidenziate tutte le sezioni di attività GPU corrispondenti all'invio.
Dispositivi Adreno
Sui dispositivi Adreno, le sezioni GPU vengono visualizzate nella traccia Coda GPU 0 e sono sempre rappresentate in sequenza, quindi puoi esaminare tutte le sezioni che rappresentano le tessere di rendering per un frame e utilizzarle per misurare la durata dei frame della GPU.
Analogamente allo scenario in Mali descritto in precedenza: se l'app utilizza Vulkan, il canale Eventi Vulkan fornisce informazioni sul lavoro inviato per eseguire il frame. Per evidenziare le tessere di rendering, fai clic sulle sezioni Eventi Vulkan associate al frame.
In alcuni scenari è più difficile distinguere i limiti dei frame della GPU perché l'app è fortemente legata alla GPU. In questi scenari, se conosci il lavoro inviato alla GPU, puoi identificare il pattern con cui vengono eseguite le pass di rendering e determinare i limiti dei frame a partire da queste informazioni.
Contatori GPU
Se le informazioni sulle sezioni GPU non sono disponibili in una traccia, puoi stimare la durata frame della GPU utilizzando le tracce del contatore GPU.
Dispositivi in Mali
Sui dispositivi Mali, puoi utilizzare il canale di utilizzo GPU per stimare la durata frame della GPU per un'app che non richiede un uso intensivo della GPU. Quando le app utilizzano meno GPU, le app hanno periodi regolari di attività della GPU elevata e bassa, invece di un'attività costantemente elevata. Per stimare la durata frame della GPU utilizzando il tracciamento Utilizzo GPU, misura la durata dei periodi di attività elevata nel canale.
Se l'app utilizza maggiormente la GPU, puoi utilizzare le tracce frammento e non-frammento per stimare la durata frame della GPU. Cercando pattern nei livelli di attività delle tracce frammento e non-frammento, puoi ottenere una stima approssimativa di dove si trovano i limiti di un frame e utilizzarla per misurare la durata frame della GPU.
Dispositivi Adreno
Sui dispositivi Adreno, se l'app non utilizza un utilizzo intensivo di GPU, puoi stimare la durata dei frame della GPU come faresti con i dispositivi Malli nella sezione precedente.
Se l'app utilizza un utilizzo più intensivo della GPU, puoi utilizzare le tracce Istruzioni/secondo Vertex e Istruzioni per frammento / secondo per stimare la durata dei frame della GPU. Cercando pattern nei livelli di attività di questi canali, puoi ottenere una stima approssimativa dei limiti di un frame e utilizzarla per misurare la durata frame della GPU.
Le altre tracce potrebbero fornire informazioni simili:
- Vertici ombreggiati / secondo
- Frammenti ombreggiati / secondo
- % vertici di ombreggiatura temporale
- % frammenti di tempo