Tracciamento della composizione

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 monitoraggio del sistema monitora solo le aree contrassegnate specificamente per il monitoraggio, ha un overhead ridotto e non influisce in modo significativo sul rendimento 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 le 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 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 tracciamento di ricomposizione nel tuo progetto, devi eseguire l'aggiornamento a almeno le 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 il livello API minimo 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 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:

  1. Apri il profiler:

    Android Studio - Inizia profilazione
    Figura 2. Android Studio - Avvia il profiling
  2. Fai clic su Cronologia CPU.

    Profiler di Android Studio - Sequenza temporale della CPU
    Figura 3. Android Studio Profiler - Sequenza temporale della CPU
  3. Vai all'interfaccia utente che vuoi monitorare nell'app, quindi seleziona Monitoraggio sistema e Registra.

    Opzioni di traccia - Traccia di sistema
    Figura 4. Opzioni di tracciamento: traccia del sistema
  4. Utilizza l'app per causare la ricompozione 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 eseguire lo zoom e la panoramica della traccia. Se non hai dimestichezza con la navigazione in una traccia, consulta la documentazione relativa alla registrazione delle tracce.

    Tracciamento del sistema
    Figura 5. Traccia del sistema

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

  5. Puoi visualizzare i componibili anche nel diagramma a fiamme insieme al file e alla linea numero:

    Grafico a fiamme
    Figura 6. Grafico a fiamme

Limitazioni

Overhead delle dimensioni dell'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 di dimensioni maggiori per Compose 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 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 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.

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

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

  1. Avvia l'app e prepara la sezione che vuoi tracciare.
  2. 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
    
  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 record).

  2. Apri in Perfetto.

Acquisire una traccia con Jetpack Macrobenchmark

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

  1. 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")
    
  2. 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 farebbe piacere ricevere il tuo feedback su questa funzionalità, eventuali bug rilevati e le tue richieste. Puoi inviarci un feedback tramite il problema tracker.