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 kilka mierzonych danych. Aby można było przeprowadzić test porównawczy, wymagany jest co najmniej 1 rodzaj danych.
Ten fragment kodu rejestruje dane dotyczące czasu trwania 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, FrameTimingMetric,
i PowerMetric 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 kilka 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 narysowanie 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, mediany i maksymalne z iteracji uruchamiania. Aby ocenić poprawę czasu uruchamiania, należy skupić się na medianach, ponieważ zapewniają one najlepsze oszacowanie typowego czasu uruchamiania. 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 trwania klatek wygenerowanych przez test porównawczy, np. przewijanie lub animację, i zwraca te wartości:
frameOverrunMs: czas, o jaki dana klatka przekracza limit czasu. Liczby dodatnie wskazują na pominiętą klatkę i widoczne zacięcia lub przycięcia. Liczby ujemne wskazują, o ile klatka jest szybsza niż limit czasu. Uwaga: ta funkcja jest dostępna tylko w Androidzie 12 (poziom API 31) i nowszych wersjach.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ć wolne klatki, znajdziesz w artykule Wolne renderowanie.
FrameTimingMetric wyniki.TraceSectionMetric
TraceSectionMetric
rejestruje liczbę wystąpień sekcji śledzenia pasujących do podanej wartości sectionName oraz czas ich trwania. W przypadku czasu zwraca minimalny, medianowy i maksymalny czas w milisekundach. Sekcja śledzenia jest definiowana albo
przez wywołanie funkcji
trace(sectionName)
albo kod między
Trace.beginSection(sectionName)
a
Trace.endSection() albo
ich asynchroniczne warianty. 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.PowerMetric
PowerMetric rejestruje
zmianę mocy lub energii w czasie trwania testu w przypadku podanych
kategorii mocy.
Każda wybrana kategoria jest dzielona na mierzalne podkomponenty, a niewybrane kategorie są dodawane do danych „unselected”.
Te dane mierzą zużycie w całym systemie, a nie zużycie w poszczególnych aplikacjach, i są ograniczone do Pixela 6, Pixela 6 Pro i nowszych urządzeń:
power<category>Uw: ilość energii zużytej w czasie trwania testu w tej kategorii.energy<category>Uws: ilość energii przesyłanej na jednostkę czasu w czasie trwania testu w tej kategorii.
Kategorie obejmują:
CPUDISPLAYGPUGPSMEMORYMACHINE_LEARNINGNETWORKUNCATEGORIZED
W przypadku niektórych kategorii, np. CPU, może być trudno oddzielić pracę wykonywaną przez inne procesy od pracy wykonywanej przez Twoją aplikację. Aby zminimalizować zakłócenia, usuń lub ogranicz niepotrzebne aplikacje i konta.
PowerMetric 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 czasu uruchamiania aplikacji {:#app-startup-analysis-optimization}