Le tracce sono spesso la migliore fonte di informazioni quando si analizzano un problema di prestazioni. Consentono di formulare un'ipotesi di quale sia il problema da dove iniziare a cercare.
Android supporta due livelli di tracciamento: tracciamento del sistema e metodo di tracciamento.
Poiché il tracciamento del sistema traccia solo le aree specificamente contrassegnate per il tracciamento, un overhead ridotto e non influisce notevolmente sulle prestazioni dell'app. Sistema il tracciamento è ottimo per vedere quanto tempo prendono sezioni specifiche del tuo codice eseguire.
Il tracciamento del metodo monitora ogni chiamata di funzione nell'app. È molto costoso e di conseguenza influisce notevolmente sulle prestazioni della tua app, ma ti offre un totale un'immagine di ciò che sta succedendo, di quali funzioni vengono chiamate e della frequenza viene chiamato.
Per impostazione predefinita, le tracce di sistema non includono singole funzioni componibili. Sono disponibili nelle tracce dei metodi.
Stiamo attualmente testando una nuova funzionalità di tracciamento del sistema per mostrare gli elementi componibili all'interno delle tracce di sistema. Offre una bassa invasività del sistema il tracciamento, con il metodo che traccia i livelli di dettaglio nella composizione.
Configura il tracciamento della composizione
Per provare il tracciamento di ricomposizione nel tuo progetto, devi eseguire l'aggiornamento a almeno le seguenti versioni:
- Fenicottero in Android Studio
- UI di Compose: 1.3.0
- Compilatore della composizione: 1.3.0
Anche il dispositivo o l'emulatore su cui esegui la traccia deve avere il livello API minimo 30.
Inoltre, devi aggiungere una nuova dipendenza sulla traccia di runtime di Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Con questa dipendenza, quando esegui una traccia di sistema che include la ricomposizione, puoi vedere automaticamente le funzioni componibili.
Esegui una traccia di sistema
Per eseguire una traccia del sistema e vedere il nuovo tracciamento di ricomposizione in azione, segui questi passaggi:
Apri il profiler:
.Fai clic su Cronologia CPU
.Vai all'app fino alla UI che vuoi monitorare, quindi seleziona Sistema. Trace e Record
.Utilizza l'app per causare la ricomposizione e interrompere la registrazione. Una volta che la traccia è elaborati e visualizzati, ora dovresti essere in grado di vedere gli elementi componibili la traccia di ricomposizione. Puoi utilizzare la tastiera e il mouse per lo zoom e la panoramica intorno alla traccia; Se non hai dimestichezza con l'esplorazione di una traccia, consulta la Registra le tracce.
.Se fai doppio clic su un elemento componibile nel grafico, accedi al codice sorgente corrispondente.
Puoi visualizzare i componibili anche nel diagramma a fiamme insieme al file e alla linea numero:
.
Precisazioni
Overhead dimensioni APK
Il nostro obiettivo è ridurre il più possibile l'overhead associato alla funzionalità, c'è un aumento delle dimensioni dell'APK per le app Compose provenienti da stringhe di tracciamento incorporate nell'APK dal compilatore Compose. L'aumento delle dimensioni può essere relativamente piccolo se l'app non utilizza molto o meno Compose per Compose completa. app. Queste stringhe di tracciamento non sono inoltre né offuscate in modo da poter essere visualizzate di tracciamento avanzati, come mostrato in precedenza. Il compilatore Compose li inserisce in tutti a partire dalla versione 1.3.0.
Le stringhe di tracciamento possono essere rimosse nella build di produzione aggiungendo 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 possono cambiare in futuro, ma eventuali modifiche verranno menzionate in le note di rilascio di Compose.
Tieni presente che tenerli dentro, pur avendo un costo per le dimensioni dell'APK, garantisce che l'APK profilato è lo stesso eseguito dagli utenti dell'app.
Tempistica accurata
Per una profilazione accurata, come per qualsiasi test delle prestazioni, è necessario effettuare
app profileable
e non-debuggable
in base alle applicazioni profilabili.
Acquisisci una traccia dal terminale
È possibile acquisire una traccia di composizione dal terminale. Per farlo, devi per 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 record
- Genera un comando di registrazione utilizzando Perfetto.
Aggiungi manualmente la sezione dell'origine dati
track_event
come indicato 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 che hai creato in precedenza.
Apri la traccia
adb pull <location>
la traccia dal dispositivo (posizione specificata nel ).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 macrobenchmarks, 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 argomento di strumentazione
androidx.benchmark.fullTracing.enable=true
prima di eseguire i benchmark. Controlla la strumentazione Macrobenchmark argomenti per ulteriori informazioni su Macrobenchmark di strumentazione.
Feedback
Ci piacerebbe ricevere il tuo feedback su questa funzionalità, eventuali bug riscontrati ed eventuali richieste. Puoi inviarci un feedback tramite il problema tracker.