Tracciamento della composizione

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 su quale sia il problema e da dove iniziare a cercare.

Su Android sono supportati due livelli di tracciamento: il tracciamento del sistema e il tracciamento dei metodi.

Poiché la tracciabilità del sistema monitora solo le aree contrassegnate in modo specifico per la tracciabilità, ha un overhead basso e non influisce in modo significativo sulle prestazioni della tua app. Il tracciamento del sistema è ideale per vedere quanto tempo impiegano determinate sezioni del codice per essere eseguite.

Il tracciamento dei metodi monitora ogni chiamata di funzione nella tua app. Questa operazione è molto costosa e influisce notevolmente sulle prestazioni della tua app, ma ti offre un quadro completo di ciò che sta accadendo, delle funzioni chiamate e della loro frequenza.

Per impostazione predefinita, le tracce di sistema non includono 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à della tracciatura del sistema, con livelli di dettaglio nella composizione della tracciatura dei metodi.

Configurazione del tracciamento della composizione

Per provare il tracciamento della ricomposizione nel tuo progetto, devi eseguire l'aggiornamento almeno alle seguenti versioni:

  • Android Studio Flamingo
  • UI di Compose: 1.3.0
  • Compilatore Compose: 1.3.0

Il dispositivo o l'emulatore su cui esegui la traccia deve avere almeno il livello API 30.

Inoltre, devi aggiungere una nuova dipendenza da Compose Runtime Tracing:

implementation("androidx.compose.runtime:runtime-tracing:1.12.0")

Se utilizzi la BOM di Compose, non devi specificare la versione:

val composeBom = platform("androidx.compose:compose-bom:2026.08.00")
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.

Acquisire una traccia di sistema

Per eseguire una traccia di sistema e vedere la nuova traccia di ricomposizione in azione, segui questi passaggi:

  1. Apri il profiler:

    Android Studio - Start Profiling
    Figura 2. Android Studio - Avvia profilazione
  2. Fai clic su Cronologia CPU.

    Android Studio Profiler - Cronologia CPU
    Figura 3. Android Studio Profiler - Cronologia CPU
  3. Vai all'interfaccia utente che vuoi tracciare e seleziona System Trace e Record.

    Opzioni di tracciamento - Tracciamento del sistema
    Figura 4. Opzioni di tracciamento - Tracciamento del sistema
  4. Utilizza l'app per causare la ricomposizione e interrompere la registrazione. Una volta elaborata e visualizzata la traccia, dovresti essere in grado di vedere i composable nella traccia di ricomposizione. Puoi utilizzare la tastiera e il mouse per ingrandire e spostare la traccia. Se non hai familiarità con la navigazione in una traccia, consulta la documentazione relativa alle tracce di registrazione.

    Un esempio di visualizzazione della traccia di sistema in Android Studio.
    Figura 5. Tracciamento del sistema

    Se fai doppio clic su un elemento componibile nel grafico, viene visualizzato il relativo codice sorgente.

  5. Puoi anche visualizzare i composable nel grafico a fiamma insieme al numero di file e di riga:

    Esempio di grafico a fiamma che mostra le funzioni componibili.
    Figura 6. Flame chart

Precisazioni

Quando utilizzi la tracciabilità della composizione, tieni presente i seguenti avvisi relativi alle dimensioni e al rendimento dell'APK.

Overhead delle dimensioni dell'APK

Sebbene abbiamo cercato di ridurre al minimo l'overhead della funzionalità, si verifica un aumento delle dimensioni dell'APK per le app Compose a causa delle stringhe di tracciamento incorporate nell'APK dal compilatore Compose. Questo aumento delle dimensioni può essere relativamente piccolo se la tua app non utilizza molto Compose o più grande per le app Compose complete. Queste stringhe di tracciamento vengono inoltre deoffuscate in modo che possano essere visualizzate negli strumenti di tracciamento, 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 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 menzionate nelle note di rilascio di Compose.

Tieni presente che mantenere le funzioni, pur comportando un certo costo in termini di dimensioni dell'APK, garantisce che l'APK di cui viene eseguito il profiling sia lo stesso eseguito dagli utenti dell'app.

Tempistica accurata

Per una profilazione accurata, come per qualsiasi test delle prestazioni, devi rendere l'app profileable e non-debuggable come indicato 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 per te in modo automatico.

Aggiungi dipendenze

Innanzitutto, aggiungi le dipendenze aggiuntive alla tua app.

implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")

Genera un comando di registrazione

  1. Genera un comando di registrazione utilizzando Perfetto.
  2. 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

Acquisire una traccia

  1. Avvia l'app e prepara la sezione che vuoi tracciare.
  2. Attiva la tracciatura 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.TracingReceiver
    
  3. Avvia il comando di registrazione che hai creato in precedenza.

Apri la traccia

  1. adb pull <location> la traccia dal dispositivo (posizione specificata nel comando di registrazione).

  2. Apri in Perfetto.

Acquisire una traccia con Jetpack Macrobenchmark

Puoi misurare le prestazioni con Jetpack Macrobenchmark, che fornisce tracce come risultati. Per abilitare il tracciamento della composizione con macrobenchmark, devi:

  1. 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")
    
  2. Aggiungi l'argomento di instrumentazione androidx.benchmark.fullTracing.enable=true prima di eseguire i benchmark. Per ulteriori informazioni sugli argomenti di strumentazione di Macrobenchmark, consulta Argomenti di strumentazione di Macrobenchmark.

Feedback

Ci farebbe piacere ricevere il tuo feedback su questa funzionalità, eventuali bug che riscontri e qualsiasi richiesta. Puoi inviarci un feedback utilizzando lo strumento Issue Tracker.