Le tracce sono spesso la migliore fonte di informazioni quando si esamina per la prima volta un problema di rendimento. Ti consentono di formulare un'ipotesi sul problema e su dove iniziare a cercare.
Su Android sono supportati due livelli di monitoraggio: monitoraggio di sistema e monitoraggio metodi.
Poiché il tracciamento del sistema monitora solo le aree specificamente contrassegnate per il tracciamento, ha un overhead ridotto e non influisce notevolmente sulle prestazioni dell'app. Il monitoraggio del sistema è ottimo per vedere il tempo di esecuzione di determinate sezioni del codice.
Il monitoraggio dei metodi tiene traccia di ogni chiamata di funzione nella tua app. Si tratta di un'operazione molto dispendiosa, che influisce notevolmente sulle prestazioni dell'app, ma ti offre un quadro completo di cosa sta succedendo, quali funzioni vengono chiamate e con quale frequenza.
Per impostazione predefinita, le tracce di sistema non includono le singole funzioni componibili. Sono disponibili nelle tracce dei metodi.
Al momento stiamo testando una nuova funzionalità di monitoraggio del sistema per mostrare le funzioni composable all'interno delle tracce di sistema. Offre la bassa invasività del monitoraggio sistema, con i livelli di dettaglio della composizione del monitoraggio dei metodi.
Configura il tracciamento della composizione
Per provare il monitoraggio della ricostituzione nel tuo progetto, devi eseguire l'aggiornamento almeno alle seguenti versioni:
- Fenicottero in Android Studio
- Interfaccia utente di Compose: 1.3.0
- Compose Compiler: 1.3.0
Anche il dispositivo o l'emulatore su cui esegui la traccia deve avere almeno il livello API 30.
Inoltre, devi aggiungere una nuova dipendenza dal monitoraggio del runtime di Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Con questa dipendenza, quando acquisisci una traccia di sistema che include la ricostituzione, puoi vedere automaticamente le funzioni componibili.
Acquisisci una traccia di sistema
Per eseguire una traccia del sistema e vedere il funzionamento del nuovo tracciamento di ricomposizione:
Apri il profiler:
Fai clic su Cronologia CPU
Vai all'interfaccia utente che vuoi monitorare nell'app, quindi seleziona Monitoraggio sistema e Registra.
Utilizza l'app per causare la ricompozione e interrompere la registrazione. Una volta che la traccia è stata elaborata e visualizzata, dovresti essere in grado di vedere gli elementi componibili nella traccia di ricomposizione. Puoi utilizzare la tastiera e il mouse per eseguire lo zoom e la panoramica della traccia; se non hai dimestichezza con l'esplorazione di una traccia, consulta la documentazione relativa alla registrazione di tracce.
Se fai doppio clic su un elemento componibile nel grafico, accedi al codice sorgente corrispondente.
Nel grafico a forma di fiamma puoi anche vedere i composabili, oltre al numero di file e riga:
Limitazioni
Overhead delle dimensioni dell'APK
Anche se abbiamo cercato di ridurre al minimo l'overhead della funzionalità, si è verificato un aumento delle dimensioni dell'APK per le app Compose proveniente dalle stringhe di monitoraggio incorporate nell'APK dal compilatore di Compose. L'aumento delle dimensioni può essere relativamente ridotto se la tua app non utilizza molto Compose o un numero maggiore per le app Compose complete. Inoltre, queste stringhe di monitoraggio non sono offuscate, quindi possono essere visualizzate negli strumenti di monitoraggio, come mostrato in precedenza. Il compilatore Compose li inserisce in tutte le app, a partire dalla versione 1.3.0.
Le stringhe di tracciamento possono essere rimosse nella build di produzione aggiungendo la seguente regola di proGuard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
Queste funzioni potrebbero cambiare in futuro, ma eventuali modifiche verranno indicate nelle note di rilascio di Scrivi.
Tieni presente che, se li mantieni, pur con un costo aggiuntivo per le dimensioni dell'APK, hai la garanzia che l'APK di cui viene eseguito il profilo sia lo stesso che viene eseguito dagli utenti dell'app.
Tempistiche precise
Per una profilazione accurata, come per qualsiasi test delle prestazioni, devi impostare l'app profileable
e non-debuggable
in base alle applicazioni profilate.
Acquisire una traccia dal terminale
È possibile acquisire una traccia di composizione dal terminale. Per farlo, devi eseguire automaticamente la procedura che Android Studio svolge normalmente.
Aggiungi dipendenze
Innanzitutto, aggiungi le dipendenze aggiuntive all'app.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Genera un comando di registrazione
- Genera un comando di registrazione utilizzando Perfetto.
Aggiungi manualmente la sezione dell'origine dati
track_event
come nell'esempio seguente:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
Acquisisci una traccia
- Avvia l'app e prepara la sezione che vuoi tracciare.
Attiva il tracciamento nell'app trasmettendo una trasmissione.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
Avvia il comando di registrazione creato in precedenza.
Apri la traccia
adb pull <location>
la traccia dal dispositivo (posizione specificata nel comando record).Apri in Perfetto.
Acquisire una traccia con Jetpack Macrobenchmark
Puoi misurare le prestazioni con Jetpack Macrobenchmark, che fornisce tracce come risultati. Per attivare il tracciamento della composizione con macrobenchmark, devi:
Aggiungi queste ulteriori dipendenze al modulo di test Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Aggiungi l'argomento di misurazione
androidx.benchmark.fullTracing.enable=true
prima di eseguire i benchmark. Consulta Argomenti di misurazione di Macrobenchmark per ulteriori informazioni sugli argomenti di misurazione di Macrobenchmark.
Feedback
Ci farebbe piacere ricevere il tuo feedback su questa funzionalità, eventuali bug rilevati e le tue richieste. Puoi inviarci un feedback tramite il tracker dei problemi.