Le tracce sono spesso la migliore fonte di informazioni quando si esamina per la prima volta un problema di prestazioni. Ti consentono di formulare un'ipotesi sul problema e di capire da dove iniziare a cercare.
Su Android sono supportati due livelli di tracciamento: tracciamento del sistema e tracciamento dei metodi.
Poiché il tracciamento del sistema tiene traccia solo delle aree contrassegnate in modo specifico per il tracciamento, ha un overhead ridotto e non influisce in modo significativo sulle prestazioni dell'app. Il tracciamento del sistema è ideale per vedere quanto tempo impiegano a essere eseguite determinate sezioni del codice a essere eseguite.
Il tracciamento dei metodi tiene traccia di ogni chiamata di funzione nell'app. Questa operazione è molto costosa e influisce notevolmente sulle prestazioni dell'app, ma ti offre un quadro completo di ciò che sta accadendo, delle funzioni chiamate e della frequenza con cui vengono chiamate.
Per impostazione predefinita, le tracce di sistema non includono le singole funzioni componibili. Sono disponibili nelle tracce dei metodi.
Il tracciamento della composizione mostra le funzioni componibili all'interno delle tracce di sistema. La funzionalità offre la bassa intrusività del tracciamento del sistema, con livelli di dettaglio del tracciamento dei metodi nella composizione.
Configurazione del tracciamento della composizione
Per provare il tracciamento della ricomposizione nel tuo progetto, devi eseguire l'aggiornamento at least alle seguenti versioni:
- Android Studio Flamingo
- UI Compose: 1.3.0
- Compilatore Compose: 1.3.0
Il dispositivo o l'emulatore su cui esegui la traccia deve essere almeno di livello API 30.
Inoltre, devi aggiungere una nuova dipendenza da Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.10.4")
Se utilizzi il BOM di Compose, non devi specificare la versione:
val composeBom = platform("androidx.compose:compose-bom:2026.02.01")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Con questa dipendenza, quando esegui una traccia di sistema che include la ricomposizione, puoi visualizzare automaticamente le funzioni componibili.
Eseguire una traccia di sistema
Per eseguire una traccia di sistema e vedere il nuovo tracciamento della ricomposizione in azione, svolgi i seguenti passaggi:
Apri il profiler:
Figura 2. Android Studio - Avvia profilazione Fai clic su Sequenza temporale della CPU
Figura 3. Profiler di Android Studio - Sequenza temporale della CPU Nell'app, vai all'UI di cui vuoi tenere traccia, quindi seleziona Traccia di sistema e Registra
Figura 4. Opzioni di traccia - Traccia di sistema Utilizza l'app per causare la ricomposizione e interrompi la registrazione. Una volta elaborata e visualizzata la traccia, dovresti essere in grado di vedere i componibili nella traccia di ricomposizione. Puoi utilizzare la tastiera e il mouse per ingrandire e spostarti nella traccia. Se non hai familiarità con la navigazione in una traccia, consulta la documentazione Registrare le tracce.
Figura 5. Traccia di sistema Se fai doppio clic su un componibile nel grafico, viene visualizzato il relativo codice sorgente.
Puoi anche visualizzare i componibili nel flame chart insieme al file e al numero di riga:
Figura 6. Flame chart
Precisazioni
Overhead delle dimensioni dell'APK
Sebbene abbiamo cercato di ridurre al minimo l'overhead della funzionalità, le dimensioni dell'APK delle app Compose aumentano a causa delle stringhe di tracciamento incorporate nell'APK dal compilatore Compose. Questo aumento delle dimensioni può essere relativamente piccolo se l'app non utilizza molto Compose o più grande per le app Compose complete. Inoltre, queste stringhe di tracciamento non sono offuscate, quindi possono essere visualizzate in strumenti di tracciamento, come mostrato in precedenza. Il compilatore Compose le 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 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 in the Compose release notes.
Tieni presente che, sebbene le funzioni comportino un aumento delle dimensioni dell'APK, assicurano che l'APK di cui viene eseguita la profilazione sia lo stesso eseguito dagli utenti dell'app.
Tempistica precisa
Per una profilazione accurata, come per qualsiasi test delle prestazioni, devi rendere l'
app profileable e non-debuggable come descritto in Applicazioni profilabili.
Acquisire una traccia dal terminale
È possibile acquisire una traccia di composizione dal terminale. Per farlo, devi eseguire i passaggi che Android Studio esegue normalmente in modo automatico.
Aggiungere 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")
Generare un comando di registrazione
- Genera un comando di registrazione utilizzando in Perfetto.
Aggiungi manualmente la sezione dell'origine dati
track_eventcome 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
Acquisire una traccia
- Avvia l'app e prepara la sezione di cui vuoi tenere traccia.
Attiva il tracciamento nell'app inviando 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.TracingReceiverAvvia il comando di registrazione creato in precedenza.
Aprire la traccia
adb pull <location>la traccia dal dispositivo (posizione specificata nel comando di registrazione).Apri in Perfetto.
Acquisire una traccia con Jetpack Macrobenchmark
Puoi misurare le prestazioni con Jetpack Macrobenchmark, che fornisce le tracce come risultati. Per attivare il tracciamento della composizione con i macrobenchmark:
Aggiungi queste dipendenze aggiuntive 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 instrumentazione
androidx.benchmark.fullTracing.enable=trueprima di eseguire i benchmark. Per ulteriori informazioni sugli argomenti di instrumentazione di Macrobenchmark, consulta la pagina Macrobenchmark instrumentation arguments.
Feedback
Ci piacerebbe ricevere il tuo feedback su questa funzionalità, su eventuali bug riscontrati e su eventuali richieste. Puoi inviarci un feedback utilizzando il tracker dei problemi.