Profila un microbenchmark

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

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

Per ulteriori informazioni sulle opzioni, consulta Registrare i metodi Java/Kotlin. MethodTracing è l'equivalente del monitoraggio e StackSampling è l'equivalente del campionamento come definito nel 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 esegui il profiling di 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 di campionamento dello stack nei risultati del microbenchmark.

MethodTracing

Il monitoraggio dei metodi è utile quando stai cercando di ottimizzare il 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 l'impatto maggiore sul rendimento.

Il profiling viene eseguito in sequenza dopo la misurazione del codice, pertanto il test genera risultati accurati sia per i tempi che per il profiling.

Il monitoraggio dei metodi è attivo per impostazione predefinita.

Nota:su alcune versioni del sistema operativo Android e di ART, il monitoraggio dei metodi è disattivato per impostazione predefinita. In questi casi, Android Studio genera un avviso.

StackSampling

Il monitoraggio dei sample può anche aiutarti a identificare i metodi costosi senza l'overhead delle prestazioni del monitoraggio dei metodi. Tuttavia, se l'app entra in un metodo dopo che è stato acquisito uno stack di chiamate e il metodo esce prima della successiva acquisita, la chiamata al metodo non viene registrata. Per monitorare correttamente i metodi con ciclo di vita breve, utilizza il monitoraggio dei metodi anziché il monitoraggio dei sample.

Con il campionamento dello stack, il benchmark campiona gli stack di chiamate al termine del riscaldamento. Puoi controllare il comportamento del campionamento, ad esempio la frequenza del campione e la durata del campionamento, utilizzando gli argomenti di instrumentation.

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

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

  • 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 monitoraggio dei metodi quando è probabile che causi un ANR. Ti consigliamo di mantenere questa opzione attivata per le esecuzioni di CI, poiché gli ANR possono causare problemi durante le esecuzioni di 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.