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 wartości. Aby można było uruchomić test porównawczy, wymagany jest co najmniej 1 typ danych.
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 śledzenia zdefiniowane w RecyclerView. Kod źródłowy metody createViewHolder() jest przykładem tego, jak możesz zdefiniować bloki, które można śledzić, we własnym kodzie.
StartupTimingMetric, TraceSectionMetric, FrameTimingMetric i PowerMetric zostaną 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 Androidzie Studio, jak pokazano na rysunku 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 wyrenderowaniu 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.
StartupTimingMetric podaje wartości minimalną, medianę i maksymalną z iteracji rozruchu. Aby ocenić poprawę czasu uruchamiania, skup się na wartościach mediany, ponieważ zapewniają one najlepsze oszacowanie typowego czasu uruchamiania. Więcej informacji o tym, co wpływa na czas uruchomienia aplikacji, znajdziesz w artykule Czas uruchomienia aplikacji.
StartupTimingMetricwynikiFrameTimingMetric
FrameTimingMetric
rejestruje informacje o czasie z klatek wygenerowanych przez test, np. przewijanie lub animację, i zwraca te wartości:
frameOverrunMs: o ile czasu dana klatka przekracza termin. Liczby dodatnie oznaczają pominiętą klatkę i widoczne zacięcia lub przeskoki. Liczby ujemne wskazują, o ile klatka jest szybsza niż termin. Uwaga: ta funkcja jest dostępna tylko na Androidzie 12 (poziom API 31) i nowszym.frameDurationCpuMs: czas potrzebny na wygenerowanie klatki na procesorze zarówno w wątku interfejsu, 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.
FrameTimingMetricwynikiTraceSectionMetric
TraceSectionMetric
rejestruje liczbę wystąpień sekcji śladu pasującej do podanego warunku sectionName
oraz czas jej trwania. W przypadku czasu podaje minimalny,
medianę i maksymalny czas w milisekundach. Sekcja śledzenia jest definiowana przez wywołanie funkcji trace(sectionName) lub kod między Trace.beginSection(sectionName) a Trace.endSection() albo ich asynchroniczne warianty. Zawsze wybiera pierwszą instancję sekcji śladu zarejestrowaną 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.
TraceSectionMetricwynikiPowerMetric
PowerMetric rejestruje
zmianę mocy lub energii w trakcie testu w przypadku podanych
kategorii mocy.
Każda wybrana kategoria jest dzielona na mierzalne podkategorie, a niewybrane kategorie są dodawane do danych „niewybrane”.
Te dane mierzą zużycie w całym systemie, a nie w poszczególnych aplikacjach. Są one dostępne tylko na urządzeniach Pixel 6, Pixel 6 Pro i nowszych:
power<category>Uw: ilość energii zużytej podczas testu w tej kategorii.energy<category>Uws: ilość energii przeniesionej w jednostce czasu w trakcie testu w tej kategorii.
Kategorie obejmują:
CPUDISPLAYGPUGPSMEMORYMACHINE_LEARNINGNETWORKUNCATEGORIZED
W przypadku niektórych kategorii, np. CPU, może być trudno odróżnić pracę wykonaną przez inne procesy od pracy wykonanej przez Twoją aplikację. Aby zminimalizować zakłócenia, usuń lub ogranicz niepotrzebne aplikacje i konta.
PowerMetricwynikiPolecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Tworzenie profili podstawowych {:#creating-profile-rules}
- Pisanie testu Macrobenchmark
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-optimization}