Dane to główny typ informacji wyodrębnianych z testów porównawczych. Są one przekazywane do funkcji measureRepeated
jako List
, co umożliwia określenie wielu mierzonych danych jednocześnie. Do uruchomienia testu porównawczego wymagany jest co najmniej 1 rodzaj danych.
Ten fragment kodu rejestruje pomiary czasu klatek i metryki sekcji śledzenia niestandardowego:
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 z możliwością śledzenia zdefiniowanych w RecyclerView
. Kod źródłowy metody createViewHolder()
to przykład definiowania bloków umożliwiających śledzenie w Twoim kodzie.
StartupTimingMetric
,
TraceSectionMetric
,
FrameTimingMetric
i
PowerMetric
są omawiane szczegółowo w dalszej części tego dokumentu.
Wyniki testów porównawczych są wyświetlane w Android Studio, jak pokazano na rysunku 1. Jeśli zdefiniujesz kilka rodzajów danych, wszystkie zostaną połączone w wyniku.
StartupTimingMetric
StartupTimingMetric
przechwytuje dane o czasie uruchamiania aplikacji z tymi wartościami:
timeToInitialDisplayMs
: czas od momentu, gdy system otrzyma zamiar uruchomienia, do momentu renderowania pierwszego obrazu docelowegoActivity
.timeToFullDisplayMs
: Czas od momentu, gdy system otrzyma intencję uruchomienia, do momentu, gdy aplikacja zgłosi, że jest w pełni narysowana, za pomocą metodyreportFullyDrawn()
. Pomiar kończy się po zakończeniu renderowania pierwszej klatki po wywołaniu funkcjireportFullyDrawn()
lub zawierającym to wywołanie. Ta funkcja może nie być dostępna w Androidzie 10 (poziom API 29) i starszych.
StartupTimingMetric
zwraca wartości minimalną, medianę i maksymalną z iteracji uruchamiania. 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 uruchamiania aplikacji, znajdziesz w artykule Czas uruchamiania aplikacji.
FrameTimingMetric
FrameTimingMetric
przechwytuje informacje o czasowaniu z ramek wygenerowanych przez benchmark, np. przewijania lub animacji, i wyprowadza te wartości:
frameOverrunMs
: czas, o który dana klatka nie mieści się w ramach limitu czasowego. Wartości dodatnie wskazują na utratę klatki i widoczne zakłócenia lub zacinanie. Wartości ujemne wskazują, o ile szybciej dana klatka została wyrenderowana niż termin. Uwaga: ta funkcja jest dostępna tylko w Androidzie 12 (poziom API 31) i nowszych.frameDurationCpuMs
: czas potrzebny procesorowi na wygenerowanie ramki zarówno w wątku interfejsu użytkownika, jak i w wątkuRenderThread
.
Te pomiary są zbierane w rozkładzie 50, 90, 95 i 99 centyla.
Więcej informacji o identyfikowaniu i poprawianiu spowolnionych klatek znajdziesz w artykule Wydajne renderowanie.
TraceSectionMetric
TraceSectionMetric
zapisywanie liczby wystąpień sekcji śladu pasującej do podanego ciągu znaków sectionName
oraz czasu trwania tego wystąpienia. W przypadku czasu zwraca minimalny, średni 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()
lub ich wersjami asynchronicznymi. Zawsze wybiera pierwszą instancję sekcji przechwycenia zarejestrowanej podczas pomiaru. Domyślnie generuje tylko sekcje śledzenia z Twojego pakietu. Aby uwzględnić procesy spoza pakietu, ustaw opcję targetPackageOnly = false
.
Więcej informacji o śledzeniu znajdziesz w artykułach Omówienie śledzenia systemu i Definiowanie zdarzeń niestandardowych.
PowerMetric
PowerMetric
rejestruje zmianę mocy lub energii w czasie trwania testu w przypadku podanych kategorii mocy.
Każda wybrana kategoria jest dzielona na mierzalne podelementy, a niewybrane kategorie są dodawane do danych „Niewybrane”.
Te dane dotyczą zużycia w całym systemie, a nie zużycia 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 w czasie testu w danej kategorii.energy<category>Uws
: ilość energii przepływającej w jednostce czasu podczas trwania testu w danej kategorii.
Kategorie te to:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
W przypadku niektórych kategorii, np. CPU
, trudno jest oddzielić działanie innych procesów od działania Twojej aplikacji. Aby zminimalizować zakłócenia, usuń niepotrzebne aplikacje i konta lub ogranicz im dostęp.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy obsługa JavaScript jest wyłączona
- Tworzenie profili podstawowych {:#creating-profile-rules}
- Tworzenie testu porównawczego makro
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-optimization}