Dane to główny typ informacji wyodrębnionych z testów porównawczych. Ta
są przekazywane do funkcji measureRepeated
jako funkcji List
, która umożliwia określenie
wiele mierzonych danych jednocześnie. Wymagany jest co najmniej 1 typ danych:
testami porównawczymi.
Ten fragment kodu przechwytuje czas renderowania klatki i sekcję niestandardowego śledzenia dane:
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 możliwych do śledzenia bloków zdefiniowane w
RecyclerView
.
kod źródłowy usługi createViewHolder()
to przykład sposobu definiowania możliwych do śledzenia bloków we własnym zakresie
w kodzie.
StartupTimingMetric
TraceSectionMetric
,
Dostępne opcje: FrameTimingMetric
i PowerMetric
omówię szczegółowo w dalszej części tego dokumentu.
Wyniki testów porównawczych są wysyłane do Android Studio, tak jak na ilustracji 1. Jeśli zdefiniowano wiele danych, w wynikach wyjściowych będą się one wyświetlać wszystkie.
![Wyniki metod TraceSectionMetric i FrameTimingMetric.](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=0000&hl=pl)
TraceSectionMetric
i
FrameTimingMetric
.Wskaźnik czasu uruchamiania
StartupTimingMetric
rejestruje dane o czasie uruchamiania aplikacji za pomocą tych wartości:
timeToInitialDisplayMs
: czas, przez który system odbiera intencję uruchomienia, gdy renderuje pierwszą klatkę miejsca docelowego.Activity
timeToFullDisplayMs
: czas, po którym system odbiera z intencją uruchomienia, gdy raporty dotyczące aplikacji w pełni sporządzone za pomocąreportFullyDrawn()
. . Pomiar zatrzymuje się po zakończeniu renderowania pierwszej klatki. po wywołaniureportFullyDrawn()
lub po jego zakończeniu. Ten pomiary mogą być niedostępne na Androidzie 10 (poziom interfejsu API 29) i starszych wersjach.
StartupTimingMetric
na wyjściu generuje wartości minimalną, medianę i maksymalną ze startu
powtórzenia. Aby ocenić poprawę po uruchomieniu, należy skupić się na wartościach mediany,
bo zapewniają najlepszy czas na
szacowanie typowego czasu uruchamiania. Więcej
informacje na temat tego, co wpływa na czas uruchamiania aplikacji, zapoznaj się z sekcją Uruchamianie aplikacji
.
![Wyniki StartupTimingMetric](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=0000&hl=pl)
StartupTimingMetric
.Metryka czasu renderowania klatki
FrameTimingMetric
przechwytuje informacje o czasie z klatek wygenerowanych w ramach testu, np.
przewijanie lub animację i zwraca te wartości:
frameOverrunMs
: czas, przez jaki dane klatka nie mieszczą się w terminie. Dodatnie liczby oznaczają porzucenie klatki i widoczne zakłócenia lub zacinanie się. Liczby ujemne wskazują, o ile szybsza klatka jest szybsza od ostatecznego terminu. Uwaga: ta funkcja jest dostępna tylko na Androidzie 12 (poziom interfejsu API 31) i nowszych.frameDurationCpuMs
: czas potrzebny na utworzenie klatki, z CPU zarówno w wątku UI, jak iRenderThread
.
Dane te są zbierane w rozkładzie 50., 90., 95. i 99. percentylu.
Więcej informacji o identyfikowaniu i poprawianiu spowolnionych klatek znajdziesz tutaj: Powolne renderowanie.
![Wyniki FrameTimingMetric](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=0000&hl=pl)
FrameTimingMetric
.Wskaźnik sekcji TraceSection
TraceSectionMetric
przechwytuje, ile razy sekcja logu czasu pasuje do podanej wartości sectionName
oraz ile to czasu zajmuje. W tym czasie generuje minimalną,
medianę i maksymalny czas w milisekundach. Sekcja logu czasu jest zdefiniowana albo
przez wywołanie funkcji
trace(sectionName)
lub kod pomiędzy
Trace.beginSection(sectionName)
oraz
Trace.endSection()
lub
swoich asynchronicznych wersji. Zawsze wybiera pierwsze wystąpienie sekcji logu czasu
zarejestrowane podczas pomiaru. Generuje tylko sekcje logu czasu z Twojego pakietu
domyślnie; uwzględnij procesy spoza pakietu, ustaw
targetPackageOnly = false
Więcej informacji o śledzeniu znajdziesz w omówieniu systemu śledzenie i Zdefiniuj niestandardowy zdarzeń.
![Wskaźnik sekcji TraceSection](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=0000&hl=pl)
TraceSectionMetric
.PowerMetrics
PowerMetric
ujęć
zmiany mocy lub energii w trakcie testu dla podanej
kategoriach energii.
Każda wybrana kategoria jest podzielona na wymierne podskładniki.
Odznaczone kategorie są dodawane do „niewybranych” danych.
Te dane mierzą, konsumpcji w całym systemie, a nie w poszczególnych aplikacjach; na Pixelu 6, Pixelu 6 Pro i nowszych:
power<category>Uw
: ilość energii zużytej w okresie w tej kategorii.energy<category>Uws
: ilość energii przesłanej w jednostce czasu przez jak długo trwa test w danej kategorii.
Kategorie obejmują:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
W przypadku niektórych kategorii, takich jak CPU
, podzielenie pracy według
z innych procesów wykonywanych w Twojej aplikacji. Aby zminimalizować zakłócenia,
usunąć lub ograniczyć niepotrzebne aplikacje i konta.
![Wyniki z PowerMetric](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=0000&hl=pl)
PowerMetric
.Polecane dla Ciebie
- Uwaga: tekst linku wyświetla się, gdy JavaScript jest wyłączony
- Utwórz profile Baseline {:#Creation-profile-rules}
- Tworzenie makrotestu
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-Optimization}