Sto misurando le prestazioni della mia app con systrace su un Nexus 4 non root su Android 4.2.2. Sto vedendo alcune cose nei rapporti che non hanno senso per me e mi chiedo se potrebbero essere dei bug systrace o se qualcuno potrebbe sapere di eventuali cause alla radice di questi sintomi.Causa della ricorsione di PerformTraversals, tempi lunghi di scambio buffer egl
1- Grande ricorsione sotto performTraversals al termine di una corsa
Link to Report - Si prega di consultare la grande curva alla fine della corsa (~ 18 anni). La mia comprensione è stata che performTraversals è a livello di framework, dove disegna un singolo frame dell'interfaccia utente. Quindi non aveva senso per me che ci potessero essere chiamate ricorsive al di sotto di esso. Anche perché ottengo questo tipo di stack esponenziale alla fine di una corsa, ho pensato che fosse davvero solo un difetto in systrace per i dati alla fine di una corsa. È possibile questo tipo di ricorsione? Cosa significa?
2- performTraversals ricorsione nel mezzo di una corsa con lunghi tempi di tampone di swap
Link to Report - comportamento Interessante partire intorno alla seconda tacca 12. Quando ho visto qualcosa di simile nel mezzo di una corsa mi ha fatto pensare che forse non dovrei scrivere questo. Inoltre, ho speso un sacco di tempo cercando di capire che cosa potrebbe rappresentare un così lungo eglSwapBuffers/queueBuffer (la mia app non usa openGL e usa solo il framework direttamente) senza alcun risultato, quando un collega mi ha detto di ignorarlo perché lo scambio dei buffer sarà sempre istantaneo. Potrebbe esserci di più? C'è qualcosa da investigare qui?
Affascinante, grazie! In precedenza avevo assunto che con systrace Android riempiva internamente un buffer e lo svuotava in modo asincrono quando si avvicinava al pieno. Ma dalla tua risposta deduco che è sbagliato e che i buffer si riempiono e quando ciò accade, smette efficacemente di tracciare. Trovo anche che questo è su una base per-cpu, quindi l'attività su cpu 1 potrebbe continuare a essere seguita dopo che cpu 0 si è riempita se cpu 1 ha avuto meno attività dall'inizio della traccia. È corretto? –
Sì. Ogni core della CPU ha un buffer separato in modo che il codice di registrazione possa scrivere su di esso senza la necessità di utilizzare blocchi o operazioni atomiche. – fadden