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 umożliwia jednoczesne określanie wielu mierzonych rodzajów danych. Aby można było uruchomić test porównawczy, wymagany jest co najmniej 1 typ wskaźnika.
Ten fragment kodu rejestruje dane o czasie trwania klatek i niestandardowej 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() jest przykładem tego, jak można zdefiniować bloki śledzenia we własnym kodzie.
StartupTimingMetric, TraceSectionMetric i FrameTimingMetric zostaną szczegółowo omówione w dalszej części tego dokumentu. Pełną listę danych znajdziesz w podklasach Metric.
Wyniki testu porównawczego są wyświetlane w Androidzie Studio, jak pokazano na ilustracji 1. Jeśli zdefiniowano wiele rodzajów danych, wszystkie zostaną połączone w danych wyjściowych.
TraceSectionMetric i FrameTimingMetric.StartupTimingMetric
StartupTimingMetric rejestruje dane o czasie uruchamiania aplikacji z tymi wartościami:
timeToInitialDisplayMs: czas od momentu, w którym system otrzyma intencję uruchomienia, do momentu, w którym wyrenderuje pierwszą klatkę miejsca docelowegoActivity.timeToFullDisplayMs: czas od momentu, w którym system otrzyma intencję uruchomienia, do momentu, w którym aplikacja zgłosi pełne wyrenderowanie za pomocą metodyreportFullyDrawn(). Pomiar kończy się po zakończeniu renderowania pierwszej klatki po wywołaniu funkcjireportFullyDrawn()lub zawierającej to wywołanie. Ten pomiar może być niedostępny na Androidzie 10 (poziom API 29) i starszych wersjach.
StartupTimingMetric zwraca wartości minimalną, medianę i maksymalną z iteracji początkowych. Aby ocenić poprawę czasu uruchamiania, zawsze skupiaj się na wartościach mediany, ponieważ zapewniają one najlepsze oszacowanie typowych czasów uruchamiania u użytkowników. Więcej informacji o tym, co wpływa na czas uruchomienia aplikacji, znajdziesz w sekcji Czas uruchomienia aplikacji.
StartupTimingMetric wyników.FrameTimingMetric
FrameTimingMetric rejestruje informacje o czasie z klatek wygenerowanych przez test wydajności, np. przewijanie lub animację, i zwraca te wartości:
frameOverrunMs: o ile dana ramka przekracza termin. Liczby dodatnie oznaczają pominiętą klatkę, której towarzyszy widoczne szarpanie lub zacinanie się obrazu. Liczby ujemne wskazują, o ile szybciej klatka została wyrenderowana w porównaniu z terminem sprzętowym podsystemu. Uwaga: ten rodzaj danych jest dostępny tylko na urządzeniach z Androidem 12 (poziom API 31) lub nowszym.frameDurationCpuMs: czas potrzebny na wygenerowanie 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ć spowolnione klatki, znajdziesz w artykule Spowolnione renderowanie.
FrameTimingMetric wyników.TraceSectionMetric
TraceSectionMetric rejestruje liczbę wystąpień określonej sekcji śledzenia i bezwzględny czas jej wykonania. W przypadku śledzenia czasu podaje minimalny, średni i maksymalny czas w milisekundach.
Sekcja śladu docelowego jest definiowana przez wywołanie funkcji trace(sectionName) lub granice bloków niższego poziomu między Trace.beginSection(sectionName) a Trace.endSection() albo ich warianty asynchroniczne. Zawsze wybiera pierwsze wystąpienie sekcji śladu zarejestrowane podczas pomiaru. Domyślnie wyświetla tylko sekcje śledzenia z 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 wyników.Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Tworzenie profili podstawowych {:#creating-profile-rules}
- Tworzenie testu Macrobenchmark
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-optimization}