Przechwytywanie danych analizy porównawczej

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.
Rysunek 1. Wyniki: 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łaniu reportFullyDrawn() 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
Rysunek 2. Wyniki: 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 i RenderThread.

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
Rysunek 3. Wyniki: 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
Rysunek 4. Wyniki: 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
Rysunek 5. Wyniki: PowerMetric.
. .