Profilowanie mikrotestu

Domyślnie mikropomiary dostarczają informacji o czasie i przydziałach wykonanego kodu. Jeśli chcesz sprawdzić, dlaczego zmierzony kod działa wolno, przejrzyj ślad metody (rejestrowany domyślnie w obsługiwanych wersjach systemu operacyjnego) lub wybierz inne konfiguracje profilowania.

Aby wybrać konfigurację profilera, dodaj argument narzędzia do uruchamiania instrumentacji androidx.benchmark.profiling.mode z jednym z tych argumentów:MethodTracing (domyślny), StackSampling lub None, jak pokazano w poniższym fragmencie kodu.

Więcej informacji o tych opcjach znajdziesz w artykule Rejestrowanie metod Java/Kotlin. MethodTracing jest odpowiednikiem śledzenia, a StackSampling – próbkowania zgodnie z definicjami w tym dokumencie.

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"
    }
}

Podczas profilowania testu porównawczego plik wyjściowy .trace jest kopiowany na hosta w katalogu obok wyników w formacie JSON. Aby sprawdzić wyniki profilowania w Android Studio, w wynikach mikropomiarów wybierz link Ślad metody lub Ślad próbkowania stosu.

MethodTracing

Śledzenie metod jest przydatne podczas optymalizacji kodu, ponieważ pomaga zidentyfikować metody, których wykonanie trwa dłużej niż innych. Następnie możesz skupić się na optymalizacji metod, które mają największy wpływ na skuteczność.

Profilowanie następuje po pomiarze kodu, więc test generuje zarówno dokładne wyniki pomiaru czasu, jak i profilowania.

Śledzenie metod jest domyślnie włączone.

Uwaga: w niektórych wersjach Androida i ART śledzenie metod jest domyślnie wyłączone. W takich przypadkach Android Studio wyświetla ostrzeżenie.

StackSampling

Śledzenie próbek może też pomóc w identyfikowaniu kosztownych metod bez obciążenia wydajności związanego ze śledzeniem metod. Jeśli jednak aplikacja wejdzie do metody po przechwyceniu stosu wywołań, a metoda zostanie zakończona przed następnym przechwyceniem, wywołanie metody nie zostanie zarejestrowane. Aby prawidłowo śledzić metody o krótkim cyklu życia, używaj śledzenia metod zamiast śledzenia próbek.

W przypadku próbkowania stosu test porównawczy próbkuje stosy wywołań po zakończeniu rozgrzewki. Za pomocą argumentów instrumentacji możesz kontrolować zachowanie próbkowania, np. częstotliwość próbkowaniaczas trwania próbkowania.

Na Androidzie 10 (API 29) i nowszych wersjach próbkowanie stosu wykorzystuje Simpleperf do próbkowania stosów wywołań aplikacji, w tym kodu C++. Na Androidzie 9 (API 28) i starszych wersjach do przechwytywania próbek stosu używa Debug.startMethodTracingSampling.

Ten tryb profilowania możesz skonfigurować, dodając kolejne argumenty instrumentacji:

  • androidx.benchmark.profiling.sampleFrequency

    • Liczba próbek stosu do przechwycenia na sekundę.
    • Typ argumentu: liczba całkowita
    • Domyślna wartość to 1000 próbek na sekundę.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • Czas trwania testu porównawczego.
    • Typ argumentu: liczba całkowita
    • Domyślna wartość to 5 sekund.
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • Pomija śledzenie metody, gdy może to spowodować błąd ANR. W przypadku uruchamiania CI warto pozostawić tę opcję włączoną, ponieważ błędy ANR mogą powodować problemy podczas długotrwałych uruchamiań CI.
    • Typ argumentu: wartość logiczna
    • Domyślna wartość to true.

Brak

Ten argument nie przechwytuje pliku profilowania. Informacje o czasie i przydziałach są nadal mierzone.