Profila un microbenchmark

Per impostazione predefinita, i Microbenchmarks forniscono informazioni su tempistiche e allocazioni del codice eseguito. Se vuoi capire perché il codice misurato viene eseguito lentamente, puoi eseguire i benchmark con il profiler della CPU collegato.

Per selezionare la configurazione del profiler, aggiungi l'argomento runner della strumentazione androidx.benchmark.profiling.mode con uno degli argomenti MethodTracing, StackSampling o None, come mostrato nello snippet seguente.

Per ulteriori informazioni sulle opzioni, vedi Scegliere una configurazione di registrazione. MethodTracing è l'equivalente di "Trace Java Methods" e StackSampling è l'equivalente di "Sample Java Methods" come definito nel documento.

trendy

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'
    }
}

Kotlin

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling"
    }
}

Quando profila un benchmark, un file .trace di output viene copiato nell'host nella directory insieme ai risultati JSON. Per esaminare i risultati della profilazione nel Profiler CPU in Android Studio, seleziona File > Apri. Per scoprire di più sulla lettura e sulla comprensione delle tracce, consulta Ispezionare le tracce.

Tracciamento del metodo

Il tracciamento dei metodi è utile quando cerchi di ottimizzare il tuo codice perché può aiutarti a identificare i metodi che richiedono più tempo di esecuzione rispetto ad altri. Puoi quindi concentrarti sull'ottimizzazione dei metodi che hanno il maggiore impatto sul rendimento.

La profilazione avviene in sequenza dopo la misurazione del codice, quindi il tuo test restituisce tempi e risultati della profilazione accurati.

Campionamento dello stack

Il tracciamento dei campioni consente inoltre di identificare metodi costosi senza l'overhead in termini di prestazioni del tracciamento dei metodi. Tuttavia, se l'app inserisce un metodo dopo l'acquisizione di uno stack di chiamate e quest'ultimo viene chiuso prima dell'acquisizione successiva, la chiamata al metodo non viene registrata. Per monitorare correttamente i metodi con cicli di vita breve, usa il tracciamento dei metodi anziché il tracciamento del campione.

Con il campionamento degli stack, i campioni di benchmark mostrano gli stack di chiamate al termine del riscaldamento. Puoi controllare la frequenza del campione e la durata del campionamento utilizzando gli argomenti della strumentazione.

Su Android 10 (API 29) e versioni successive, il campionamento dello stack utilizza Simpleperf per campionare gli stack di chiamata dell'app, incluso il codice C++. Su Android 9 (API 28) e versioni precedenti, utilizza Debug.startMethodTracingSampling per acquisire esempi di stack.

Puoi configurare questa modalità di profilazione aggiungendo un altro argomento di strumentazione:

  • androidx.benchmark.profiling.sampleFrequency

    • Numero di campioni di stack da acquisire al secondo.
    • Tipo di argomento: numero intero
    • Il valore predefinito è 1000 campioni al secondo.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • Durata del benchmark da eseguire.
    • Tipo di argomento: numero intero
    • Il valore predefinito è 5 secondi.

Nessun valore

Questo argomento non acquisisce un file di profilazione. Le informazioni su tempistiche e allocazioni vengono comunque misurate.