Profila un microbenchmark

Per impostazione predefinita, i microbenchmark forniscono informazioni sulla tempistica e sulle allocazioni del codice eseguito. Se vuoi capire perché il codice misurato viene eseguito lentamente, esamina la traccia del metodo, acquisita per impostazione predefinita nelle versioni del sistema operativo supportate, o seleziona altre configurazioni di profilazione.

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

Per saperne di più sulle opzioni, consulta Registrare metodi Java/Kotlin. MethodTracing è l'equivalente del tracciamento e StackSampling è l'equivalente del campionamento come definito in questo documento.

Groovy

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 profili un benchmark, un file di output .trace viene copiato sull'host nella directory insieme ai risultati JSON. Per esaminare i risultati della profilazione in Android Studio, seleziona il link Traccia metodo o Traccia campionamento stack nei risultati del microbenchmark.

MethodTracing

Il tracciamento dei metodi è utile quando cerchi di ottimizzare il codice perché può aiutarti a identificare i metodi che richiedono più tempo per l'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 test restituisce sia risultati di profilazione che di temporizzazione accurati.

Il tracciamento dei metodi è attivo per impostazione predefinita.

Nota:in alcune versioni di Android OS e ART, la traccia dei metodi è disattivata per impostazione predefinita. In questi casi, Android Studio genera un avviso.

StackSampling

Il campionamento della traccia può anche aiutare a identificare i metodi costosi senza l'overhead delle prestazioni della traccia del metodo. Tuttavia, se la tua app entra in un metodo dopo l'acquisizione di uno stack di chiamate e il metodo esce prima dell'acquisizione successiva, la chiamata al metodo non viene registrata. Per monitorare correttamente i metodi con cicli di vita brevi, utilizza la tracciatura dei metodi anziché la tracciatura dei campioni.

Con il campionamento dello stack, i campioni di benchmark chiamano gli stack dopo il completamento del warm-up. Puoi controllare il comportamento di campionamento, ad esempio la frequenza di campionamento e la durata del campionamento utilizzando gli argomenti di strumentazione.

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

Puoi configurare questa modalità di profilazione aggiungendo altri argomenti di strumentazione:

  • androidx.benchmark.profiling.sampleFrequency

    • Numero di campioni dello 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.
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • Salta la traccia del metodo quando è probabile che causi un errore ANR. Ti consigliamo di mantenere questa opzione abilitata per le esecuzioni CI, poiché gli errori ANR possono causare problemi durante le esecuzioni CI lunghe.
    • Tipo di argomento: booleano
    • Il valore predefinito è true

Nessuno

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