Dane to główny typ informacji wyodrębnionych z testów porównawczych. Są one przekazywane do funkcji measureRepeated
jako List
, co pozwala określić wiele objętych pomiarem danych jednocześnie. Test porównawczy wymaga co najmniej jednego typu danych.
Ten fragment kodu rejestruje dane dotyczące czasu renderowania 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 możliwych do śledzenia bloków zdefiniowane w sekcji RecyclerView
. Kod źródłowy metody createViewHolder()
jest przykładem definiowania możliwych do śledzenia bloków we własnym kodzie.
StartupTimingMetric
, TraceSectionMetric
, FrameTimingMetric
i PowerMetric
omówimy 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=7&hl=pl)
TraceSectionMetric
i FrameTimingMetric
.Wskaźnik czasu uruchamiania
StartupTimingMetric
rejestruje dane o czasie uruchamiania aplikacji z tymi wartościami:
timeToInitialDisplayMs
: czas od momentu, w którym system otrzymuje intencję uruchomienia, do wyrenderowania pierwszej klatki miejsca docelowegoActivity
.timeToFullDisplayMs
: czas od momentu, w którym system otrzymuje intencję uruchomienia, do momentu pełnego przesłania raportów o aplikacji przy użyciu metodyreportFullyDrawn()
. Pomiar kończy się po zakończeniu renderowania pierwszej klatki po wywołaniureportFullyDrawn()
lub po jego wystąpieniu. Ten pomiar może być niedostępny na Androidzie 10 (poziom interfejsu API 29) i starszych.
StartupTimingMetric
na wyjściu generuje wartości minimalną, medianę i maksymalną z iteracji początkowych. Aby ocenić poprawę wyników podczas uruchamiania, skup się na wartościach mediany, ponieważ to one najlepiej określają typowy czas uruchamiania. Więcej informacji o tym, co wpływa na czas uruchamiania aplikacji, znajdziesz w artykule Czas uruchamiania aplikacji.
![Wyniki StartupTimingMetric](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=7&hl=pl)
StartupTimingMetric
.Metryka czasu renderowania klatki
FrameTimingMetric
przechwytuje informacje o czasie z klatek wygenerowanych w ramach testu porównawczego, np. przewinięcia lub animacji, i nadaje te wartości:
frameOverrunMs
: czas, przez jaki dane klatka nie mieszczą się w terminie. Liczba dodatnia oznacza, że klatka została upuszczona i widoczne są zacięcia 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 przez procesor zarówno w wątku UI, jak i wRenderThread
.
Dane te są zbierane w formacie 50, 90, 95 i 99 centyla.
Więcej informacji o wykrywaniu i poprawianiu spowolnionych klatek znajdziesz w artykule Powolne renderowanie.
![Wyniki FrameTimingMetric](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=7&hl=pl)
FrameTimingMetric
.Wskaźnik sekcji TraceSection
Funkcja TraceSectionMetric
przechwytuje liczbę wystąpień sekcji logu czasu pasującego do podanego sectionName
oraz ilość potrzebnego czasu. Podaje minimalny, medianę i maksymalny czas (w milisekundach). Sekcja logu czasu jest definiowana przez wywołanie funkcji trace(sectionName)
lub kod między Trace.beginSection(sectionName)
a Trace.endSection()
lub ich warianty asynchroniczne. Zawsze wybiera pierwsze wystąpienie sekcji logu czasu zarejestrowanego podczas pomiaru. Domyślnie generuje tylko sekcje logu czasu 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.
![Wskaźnik sekcji TraceSection](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=7&hl=pl)
TraceSectionMetric
.PowerMetrics
PowerMetric
rejestruje zmianę mocy lub energii w trakcie testu dla podanych kategorii mocy.
Każda wybrana kategoria jest podzielona na wymierne podskładniki, a niewybrane kategorie są dodawane do „niewybranych” danych.
Te dane mierzą wykorzystanie w całym systemie, a nie w poszczególnych aplikacjach. Są one ograniczone do telefonów Pixel 6, Pixel 6 Pro i nowszych:
power<category>Uw
: ilość energii zużytej podczas testu w tej kategorii.energy<category>Uws
: ilość energii przesłanej w jednostce czasu w trakcie testu w tej kategorii.
Kategorie obejmują:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
W przypadku niektórych kategorii, takich jak CPU
, oddzielenie pracy wykonywanej przez inne procesy od pracy wykonywanej przez Twoją aplikację może być trudne. Aby zminimalizować zakłócenia, usuń lub ogranicz niepotrzebne aplikacje i konta.
![Wyniki z PowerMetric](https://developer.android.google.cn/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=7&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 makr analizy porównawczej
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-Optimizing}