Profila un microbenchmark

Per impostazione predefinita, i microbenchmark forniscono informazioni sulla tempistica e sulle allocazioni del codice eseguito. Se vuoi indagare sul motivo per cui il codice misurato viene eseguito lentamente, esamina la traccia 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 dello strumento di esecuzione della 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 Registra metodi Java/Kotlin. MethodTracing equivale al tracciamento e StackSampling equivale al campionamento come definito nel documento.

Alla moda

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 esegui il profiling di un benchmark, un file di output .trace viene copiato nell'host nella directory insieme ai risultati JSON. Per esaminare i risultati della profilazione in Android Studio, seleziona il link Traccia metodo o Traccia di campionamento dello 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. In questo modo, puoi 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 misurazione del tempo accurati sia risultati di profilazione.

La traccia dei metodi è attiva per impostazione predefinita.

Nota: su alcune versioni del sistema operativo Android e di ART, la traccia metodo è disattivata per impostazione predefinita. In questi casi, Android Studio genera un avviso.

StackSampling

Il tracciamento dei campioni può anche aiutare a identificare i metodi costosi senza l'overhead delle prestazioni del tracciamento dei metodi. Tuttavia, se l'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 il tracciamento dei metodi anziché il tracciamento dei campioni.

Con il campionamento dello stack, il benchmark campiona gli stack di chiamate al termine del warmup. 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 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.
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • Salta il tracciamento dei metodi quando è probabile che causi un errore ANR. Ti consigliamo di mantenere attiva questa opzione per le esecuzioni CI, poiché gli 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 comunque misurate.