Przechwytywanie danych analizy porównawczej

Dane to główny typ informacji wyodrębnianych 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:

KotlinJava
benchmarkRule.measureRepeated(
    packageName = TARGET_PACKAGE,
    metrics = listOf(
        FrameTimingMetric(),
        TraceSectionMetric("RV CreateView"),
        TraceSectionMetric("RV OnBindView"),
    ),
    iterations = 5,
    // ...
)
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() jest przykładem 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.

Wyniki metod TraceSectionMetric i FrameTimingMetric.
Rysunek 1. Wyniki: TraceSectionMetric i FrameTimingMetric.

StartupTimingMetric

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 od momentu, gdy system otrzyma intencję uruchomienia, do momentu, gdy aplikacja zgłosi, że jest w pełni narysowana, za pomocą metody reportFullyDrawn(). Pomiar kończy się po zakończeniu renderowania pierwszej klatki po wywołaniu funkcji reportFullyDrawn() lub zawierającym to wywołanie. Ten pomiary mogą być niedostępne na Androidzie 10 (poziom interfejsu API 29) i starszych wersjach.

StartupTimingMetric zwraca wartości minimalną, medianę i maksymalną z iteracji uruchamiania. 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
Rysunek 2. StartupTimingMetric wyniku z grupy
.

Metryka czasu renderowania klatki

FrameTimingMetric przechwytuje informacje o czasie z klatek wygenerowanych w ramach testu, np. przewijanie lub animacja 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ę. Wartości ujemne wskazują, o ile szybciej klatka została wyrenderowana niż termin. 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 i RenderThread.

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.

Wyniki danych FrameTimingMetric
Rysunek 3. FrameTimingMetric wyniku z grupy
.

Wskaźnik sekcji TraceSection

TraceSectionMetric przechwytuje, ile razy sekcja logu czasu pasuje do podanej wartości sectionName oraz ile to czasu zajmuje. 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 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
Rysunek 4. Wyniki: TraceSectionMetric.

PowerMetrics

PowerMetric ujęć zmiany mocy lub energii w trakcie testu dla podanej kategoriach energii. 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 przesłanej w jednostce czasu przez jak długo trwa test w danej kategorii.

Kategorie te to:

  • 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
Rysunek 5. PowerMetric wyniku z grupy
.

Obecnie nie ma rekomendacji.

na swoje konto Google.