Dane to główny typ informacji wyodrębnionych z testów porównawczych. Są one przekazywane do funkcji measureRepeated
jako List
, co umożliwia określenie wielu zmierzonych danych naraz. Do przeprowadzenia analizy porównawczej wymagany jest co najmniej 1 typ danych.
Ten fragment kodu rejestruje czas renderowania klatki i dane niestandardowe sekcji logu czasu:
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 możliwych do śledzenia, które są zdefiniowane w RecyclerView
. Kod źródłowy metody createViewHolder()
to przykład sposobu definiowania bloków możliwych do śledzenia w swoim kodzie.
StartupTimingMetric
, TraceSectionMetric
, FrameTimingMetric
i PowerMetric
zostały szczegółowo omówione w dalszej części tego dokumentu.
Wyniki testów porównawczych są przesyłane do Android Studio, jak widać na ilustracji 1. Jeśli zdefiniujesz wiele rodzajów danych, w danych wyjściowych będą one łączone.
Metryka czasu uruchamiania
StartupTimingMetric
rejestruje wskaźniki czasu uruchamiania aplikacji z tymi wartościami:
timeToInitialDisplayMs
: czas od momentu otrzymania przez system intencji uruchomienia do wyrenderowania pierwszej klatki w miejscu docelowymActivity
.timeToFullDisplayMs
: czas od momentu otrzymania przez system zamiaru wprowadzenia na rynek do momentu, gdy aplikacja została w pełni pobrana przy użyciu metodyreportFullyDrawn()
. Pomiar zostaje zatrzymany po zakończeniu renderowania pierwszej klatki po wywołaniureportFullyDrawn()
lub po nim. Ten pomiar może nie być dostępny na Androidzie 10 (poziom interfejsu API 29) i starszych.
StartupTimingMetric
podaje na wyjściu wartości minimalną, medianę i maksymalną z iteracji początkowych. Aby ocenić efektywność startową, skup się na wartościach mediany, ponieważ stanowią one najlepsze oszacowanie typowego czasu uruchamiania. Więcej informacji o tym, co wpływa na czas uruchamiania aplikacji, znajdziesz w artykule Czas uruchomienia aplikacji.
Dane czasu klatek
FrameTimingMetric
przechwytuje informacje o czasie pochodzące z klatek utworzonych w ramach testu porównawczego (np. podczas przewijania lub animacji) i zwraca te wartości:
frameOverrunMs
: czas, o który mija termin określonej klatki. Wartości dodatnie oznaczają, że ramka została pominięta oraz widoczne zacinanie się lub zacinanie. Liczby ujemne wskazują, o ile szybciej klatek mieści się w terminie. 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 pomiarowe są zbierane w rozkładzie 50, 90, 95 i 99 percentyla.
Więcej informacji o rozpoznawaniu i ulepszaniu spowolnionych klatek znajdziesz w artykule Powolne renderowanie.
Wskaźnik sekcji TraceSection
TraceSectionMetric
rejestruje, ile razy sekcja śledzenia pasuje do podanej wartości sectionName
, oraz ile czasu to zajmuje. Na potrzeby czasu podaje minimalną,
medianę i maksymalny czas w milisekundach. Sekcja śledzenia jest definiowana przez wywołanie funkcji trace(sectionName)
lub kod między elementami Trace.beginSection(sectionName)
a Trace.endSection()
lub ich wersjami asynchronicznymi. Zawsze wybiera pierwsze wystąpienie sekcji logu czasu zarejestrowanej podczas pomiaru. Domyślnie generuje tylko sekcje śledzenia z pakietu. Aby uwzględnić procesy spoza pakietu, ustaw parametr 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 dla podanych kategorii mocy.
Każda wybrana kategoria jest dzielona na wymierne podkomponenty, a niewybrane kategorie są dodawane do „niewybranych” danych.
Te dane mierzą wykorzystanie w całym systemie, a nie na poziomie aplikacji. Są one ograniczone do urządzeń Pixel 6, Pixel 6 Pro i nowszych:
power<category>Uw
: ilość energii zużytej w czasie trwania testu w tej kategorii.energy<category>Uws
: ilość energii przekazywana w jednostce czasu podczas trwania testu w tej kategorii.
Dostępne są następujące kategorie:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
W przypadku niektórych kategorii, takich jak CPU
, oddzielenie zadania wykonywanego przez inne procesy od czynności wykonywanych przez Twoją aplikację może być trudne. Aby zminimalizować zakłócenia, usuń lub ogranicz niepotrzebne aplikacje i konta.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony
- Tworzenie profili podstawowych {:#using-profile-rules}
- Tworzenie makroporównania
- Analiza i optymalizacja uruchamiania aplikacji {:#app-startup-analysis-Optimization}