Pojęcia i implementacja w Jetpack Compose
Dane to główny rodzaj informacji wyodrębnianych z testów porównawczych. Są one
przekazywane do funkcji measureRepeated jako List, co pozwala
określić jednocześnie wiele mierzonych danych. Aby test porównawczy mógł się uruchomić, wymagany jest co najmniej 1 rodzaj danych.
Poniższy fragment kodu rejestruje dane dotyczące czasu renderowania klatek i niestandardowych sekcji śledzenia:
Kotlin
benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(
FrameTimingMetric(),
TraceSectionMetric("RV CreateView"),
TraceSectionMetric("RV OnBindView"),
),
iterations = 5,
// ...
)
Java
benchmarkRule.measureRepeated(
TARGET_PACKAGE, // packageName
Arrays.asList( // metrics
new StartupTimingMetric(),
new TraceSectionMetric("RV CreateView"),
new TraceSectionMetric("RV OnBindView"),
),
5, // Iterations
// ...
);
W tym przykładzie RV CreateView i RV OnBindView to identyfikatory bloków, które można
śledzić i które są zdefiniowane w RecyclerView. Kod źródłowy
metody createViewHolder() pokazuje, jak można zdefiniować
bloki, które można śledzić, we własnym kodzie.
StartupTimingMetric, TraceSectionMetric i
FrameTimingMetric są szczegółowo omówione w dalszej części tego dokumentu. Pełną listę danych znajdziesz w podklasach Metric.
Wyniki testów porównawczych są wyświetlane w Android Studio, jak pokazano na rysunku 1. Jeśli zdefiniowano wiele danych, wszystkie są łączone w danych wyjściowych.
TraceSectionMetric i
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric rejestruje dane dotyczące czasu uruchamiania aplikacji z tymi wartościami:
timeToInitialDisplayMs: czas od momentu, gdy system otrzyma intencję uruchomienia, do momentu, gdy wyrenderuje pierwszą klatkę docelowegoActivity.timeToFullDisplayMs: czas od momentu, gdy system otrzyma intencję uruchomienia, do momentu, gdy aplikacja zgłosi pełne wyrenderowanie za pomocąreportFullyDrawn()metody. Pomiar zatrzymuje się po zakończeniu renderowania pierwszej klatki po wywołaniureportFullyDrawn()lub zawierającej to wywołanie. Ten pomiar może być niedostępny w Androidzie 10 (poziom API 29) i starszych wersjach.
StartupTimingMetric zwraca wartości minimalne, średnie i maksymalne z iteracji uruchamiania. Aby ocenić poprawę czasu uruchamiania, zawsze skupiaj się na wartościach średnich, ponieważ najlepiej odzwierciedlają one typowe czasy uruchamiania aplikacji przez użytkowników. Więcej informacji o tym, co wpływa na czas uruchamiania aplikacji, znajdziesz w artykule Czas uruchamiania
aplikacji.
StartupTimingMetric wyniki.FrameTimingMetric
FrameTimingMetric rejestruje informacje o czasie renderowania klatek wygenerowanych przez test porównawczy, np. przewijanie lub animację, i zwraca te wartości:
frameOverrunMs: czas, o jaki dana klatka przekracza termin. Liczby dodatnie wskazują na pominiętą klatkę, której towarzyszy widoczne zacinanie się lub przerywanie. Liczby ujemne wskazują, o ile szybciej klatka została wyrenderowana w porównaniu z terminem sprzętowym podsystemu. Uwaga: ta metryka jest dostępna tylko w Androidzie 12 (poziom API 31) i nowszych wersjach.frameDurationCpuMs: czas potrzebny na wyrenderowanie klatki na procesorze zarówno w wątku UI, jak i wRenderThread.
Te pomiary są zbierane w rozkładzie 50, 90, 95 i 99 centyla.
Więcej informacji o tym, jak identyfikować i poprawiać wolne klatki, znajdziesz w artykule Wolne renderowanie.
FrameTimingMetric wyniki.TraceSectionMetric
TraceSectionMetric rejestruje liczbę wystąpień określonej sekcji śledzenia i bezwzględny czas jej wykonania. W przypadku śledzenia czasu zwraca minimalny, średni i maksymalny czas w milisekundach.
Docelowa sekcja śledzenia jest definiowana przez wywołanie funkcji
trace(sectionName) lub przez granice bloków niższego poziomu między
Trace.beginSection(sectionName) a Trace.endSection() lub ich
asynchronicznymi wariantami. Zawsze wybiera pierwsze wystąpienie sekcji śledzenia zarejestrowane podczas pomiaru. Domyślnie zwraca tylko sekcje śledzenia z Twojego pakietu
. Aby uwzględnić procesy spoza pakietu, ustaw targetPackageOnly =
false.
Więcej informacji o śledzeniu znajdziesz w artykułach Omówienie śledzenia systemu i Definiowanie zdarzeń niestandardowych.
TraceSectionMetric wyniki.Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Tworzenie profili bazowych {:#creating-profile-rules}
- Pisanie testu porównawczego
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-optimization}