Tracciamento della composizione

Le tracce sono spesso la migliore fonte di informazioni quando si esamina per la prima volta un problema di rendimento. Consentono di formulare un'ipotesi del problema e da dove iniziare a cercare.

Android supporta due livelli di tracciamento: tracciamento del sistema e tracciamento dei 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 tracciamento del sistema è ottimo per vedere quanto tempo richiedono l'esecuzione di specifiche sezioni del tuo codice.

Il tracciamento del metodo monitora ogni chiamata di funzione nella tua app. È molto costoso e quindi influisce notevolmente sulle prestazioni dell'app, ma ti offre un quadro completo di ciò che sta accadendo, di quali funzioni vengono chiamate e della frequenza con cui vengono chiamate.

Per impostazione predefinita, le tracce di sistema non includono singole funzioni componibili. Sono disponibili nelle tracce dei metodi.

Attualmente stiamo testando una nuova funzionalità di tracciamento del sistema per mostrare le funzioni componibili all'interno delle tracce del sistema. Grazie al tracciamento del sistema, offre una bassa invasività con livelli di dettaglio del metodo nella composizione.

Configura il tracciamento della composizione

Per provare il tracciamento di ricomposizione nel progetto, devi eseguire l'aggiornamento almeno alle 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 effettui 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 funzionamento del nuovo tracciamento di ricomposizione:

  1. Apri il profiler:

    Android Studio - Inizia profilazione
    Figura 2. Android Studio: inizia a profilare
  2. Fai clic su Cronologia CPU

    Profiler di Android Studio - Sequenza temporale della CPU
    Figura 3. Profiler di Android Studio - Sequenza temporale della CPU
  3. Vai all'app fino alla UI che vuoi monitorare, quindi seleziona Tracciamento del sistema e Registra.

    Opzioni di tracciamento: traccia del sistema
    Figura 4. Opzioni di traccia: traccia del sistema
  4. Utilizza l'app per causare la ricomposizione 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.

    Tracciamento del sistema
    Figura 5. Traccia del sistema

    Se fai doppio clic su un elemento componibile nel grafico, accedi al codice sorgente corrispondente.

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

    Grafico a fiamme
    Figura 6. Grafico a fiamme

Precisazioni

Overhead dimensioni APK

Il nostro obiettivo è ridurre il più possibile il carico di lavoro della funzionalità, ma c'è un aumento delle dimensioni dell'APK per le app Compose derivante dal tracciamento delle stringhe incorporate nell'APK dal compilatore 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. Queste stringhe di tracciamento non sono inoltre offuscate e possono 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 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 menzionate nelle note di rilascio di Compose.

Tieni presente che, se li mantieni, comporta un costo per le dimensioni dell'APK, garantendo che l'APK profilato sia lo stesso eseguito dagli utenti dell'app.

Tempistica accurata

Per una profilazione accurata, come per qualsiasi test delle prestazioni, devi impostare l'app profileable e non-debuggable in base alle applicazioni profilate.

Acquisisci 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 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 tracciamento della composizione con 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 l'argomento strumentazione androidx.benchmark.fullTracing.enable=true prima di eseguire i benchmark. Controlla gli argomenti di Macrobenchmark instrumentation per ulteriori informazioni sugli argomenti di Macrobenchmark instrumentation.

Feedback

Ci piacerebbe ricevere il tuo feedback su questa funzionalità, eventuali bug riscontrati in questa funzionalità e qualsiasi tua richiesta. Puoi inviarci feedback tramite il tracker dei problemi.