La stima dei tempi di elaborazione dei frame (tempi di frame) della CPU e della GPU è essenziale per comprendere le prestazioni dell'app e individuare i colli di bottiglia. Quando profili un'app con AGI, lo strumento System Profiler fornisce i dati di traccia che puoi utilizzare per stimare i tempi di frame.
Tempi della CPU
In AGI, puoi visualizzare i tempi di frame della CPU totale e attiva nel canale CPU di un profilo di sistema.
Tempo di CPU totale
Per misurare il tempo totale della CPU speso,
seleziona l'intervallo di tempo
che include il tempo tra gli eventi di invio di frame successivi. Gli eventi di invio del frame sono eglSwapBuffers
(per OpenGL) e vkQueuePresentKHR
(per Vulkan).

eglSwapBuffer
.
vkQueuePresentKHR
.Questa misurazione è una stima del tempo CPU totale,ma non rappresenta necessariamente il tempo CPU attivo. Ad esempio, nelle app legate alla GPU, la CPU potrebbe attendere che la GPU completi il proprio lavoro prima di inviare un nuovo frame. Questo accade spesso quando un evento dequeueBuffer
, eglSwapBuffer
(per OpenGL) o
vkQueuePresent
(per Vulkan) occupa una grande parte del tempo della CPU.
Il tempo di attesa è incluso nel tempo CPU totale, ma non nel tempo CPU attivo.

dequeueBuffer
e eglSwapBuffer
.
Tempo di CPU attivo
Il tempo della CPU attivo determina quando la CPU esegue il codice dell'app senza essere in stato di inattività.
Per misurare il tempo della CPU attiva, visualizza le sezioni In esecuzione appena sopra gli eventi della CPU. Conta tutte le parti della traccia tra i due eventi di invio del frame in stato In esecuzione. Assicurati di includere i thread in esecuzione.


Un altro modo per misurare il tempo CPU attivo è visualizzare i segmenti di app nei canali CPU. Questi slice indicano quando la CPU è in esecuzione e corrispondono ai slice In esecuzione.

Per identificare più facilmente i segmenti di app, puoi aggiungere alla tua app indicatori ATrace. Questi indicatori verranno visualizzati nel canale CPU di System Profiler.

Stimare i tempi di frame della GPU
Per stimare i tempi di frame della GPU, puoi utilizzare i seggiolini della GPU o i contatori della GPU in System Profiler. La stima è più accurata quando si utilizzano i segmenti GPU.
Slice GPU
Se lo strumento di analisi del sistema dispone di informazioni sui segmenti GPU, puoi ottenere informazioni molto precise sulla durata frame della GPU misurando il tempo totale impiegato dall'app per le attività associate a un singolo frame.
Dispositivi Mali
Sui dispositivi Mali, i segmenti GPU hanno tracce fragment, non-fragment e talvolta non-fragment supplementari. Per i frame meno complessi, il lavoro dei frammenti e non è sequenziale, quindi è possibile distinguere il lavoro di un frame da quello di un altro cercando gli spazi tra il lavoro della GPU attiva.
In alternativa, se hai dimestichezza con il lavoro inviato alla GPU, identificare il pattern dei passaggi di rendering inviati fornisce informazioni su quando inizia e termina un frame.


Per le app con un flusso di lavoro GPU più parallelizzato, puoi ottenere le durate frame della GPU cercando tutti i frame con lo stesso submissionID nel riquadro Selezione per ogni segmento.
Per le app basate su Vulkan, è possibile utilizzare più invii per comporre un frame. Tieni traccia degli ID di invio utilizzando il canale Eventi Vulkan, che contiene un'analisi per ogni invio. La selezione di un segmento di invio evidenzierà tutti i segmenti di attività della GPU corrispondenti all'invio.


Dispositivi Adreno
Sui dispositivi Adreno, i seggiolini della GPU vengono visualizzati nel canale Coda GPU 0 e sono sempre rappresentati in sequenza, quindi puoi esaminare tutti i seggiolini che rappresentano le pass di rendering per un frame e utilizzarli per misurare le durate dei frame della GPU.


Analogamente allo scenario Mali descritto in precedenza: se l'app utilizza Vulkan, il canale Vulkan Events fornisce informazioni sul lavoro inviato per eseguire il frame. Per evidenziare le pass di rendering, fai clic sulle sezioni Eventi Vulkan associate al frame.

In alcuni casi, i confini dei frame della GPU sono più difficili da distinguere perché l'app è fortemente vincolata alla GPU. In questi scenari, se hai familiarità con il lavoro inviato alla GPU, puoi identificare il pattern con cui vengono eseguiti i passaggi di rendering e determinare i confini del frame da queste informazioni.

Contatori GPU
Se le informazioni sui seggi GPU non sono disponibili in una traccia, puoi stimare il tempo di frame della GPU utilizzando i canali Contatore GPU.
Dispositivi Mali
Sui dispositivi Mali, puoi utilizzare il monitoraggio dell'utilizzo della GPU per stimare il tempo di frame della GPU per un'app che non richiede un'intensa attività della GPU. Quando le app sono meno intensive per la GPU, presentano periodi regolari di attività GPU elevata e ridotta, anziché un'attività costantemente elevata. Per stimare i tempi di frame della GPU utilizzando il monitoraggio dell'utilizzo della GPU, misura la durata dei periodi di attività elevata nel monitoraggio.

Se l'app è più intensiva per la GPU, l'utilizzo della GPU può essere costantemente molto elevato. In questo caso, puoi utilizzare i canali Utilizzo coda frammenti e Utilizzo coda non frammenti per monitorare l'attività della GPU e stimare i tempi di frame della GPU. Cercando schemi nei canali fragment e non-fragment, puoi ottenere una stima approssimativa dei confini di un fotogramma e utilizzarla per misurare il tempo del fotogramma della GPU.

Dispositivi Adreno
Sui dispositivi Adreno, se l'app non richiede un'elaborazione intensiva della GPU, puoi stimare i tempi di frame della GPU nello stesso modo in cui puoi farlo con i dispositivi Mali nella sezione precedente.

Se l'app è più intensiva per la GPU e l'applicazione ha una percentuale di utilizzo della GPU costantemente elevata, puoi utilizzare le tracce Istruzioni vertex/secondo e Istruzioni frammento / secondo per stimare i tempi di frame della GPU. Cercando schemi nei livelli di attività di questi canali, puoi ottenere una stima approssimativa dei confini di un frame e utilizzarla per misurare il tempo del frame della GPU.

Questi altri canali potrebbero fornire informazioni simili:
- Vertici ombreggiati / secondo
- Frammenti ombreggiati / secondo
- % vertici con ombreggiatura temporale
- % frammenti di ombreggiatura del tempo