Test porównawczy

Dokładnie mierz wydajność kodu w Android Studio.
Najnowsza aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja beta Wersja alfa
1 lipca 2026 r. 1.4.1 - - 1.5.0-alpha07

Deklarowanie zależności

Aby dodać zależność od Benchmarku, musisz dodać do projektu repozytorium Maven Google. Więcej informacji znajdziesz w artykule Repozytorium Maven Google.

Macrobenchmark

Aby używać Macrobenchmark w projekcie, dodaj te zależności do pliku build.gradlemodule testów porównawczych:

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.1"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.1")
}

Mikrotest

Aby używać mikrotestów porównawczych w projekcie, dodaj te zależności do pliku build.gradlemodule mikrotestów porównawczych:

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.1"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.1")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Biblioteka Microbenchmark zawiera też wtyczkę Gradle do użycia z modułem mikrobenchmarków. Ten wtyczek ustawia domyślne konfiguracje kompilacji dla modułu, konfiguruje kopię danych wyjściowych testu porównawczego na hoście i zapewnia zadanie ./gradlew lockClocks.

Aby użyć tego wtyczki, umieść ten wiersz w bloku „plugins” w pliku najwyższego poziomu build.gradle:

Groovy

plugins {
  id 'androidx.benchmark' version '1.4.1' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.4.1" apply false
}

Następnie zastosuj wtyczkę do pliku build.gradle modułu testów porównawczych.

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Prześlij opinię

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz oddać głos na istniejący problem, klikając przycisk gwiazdki.

Tworzenie nowego problemu

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.5

Wersja 1.5.0-alpha07

1 lipca 2026 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha07 Wersja 1.5.0-alpha07 zawiera te zmiany.

Zmiany w interfejsie API

  • Uproszczone rejestrowanie śladów Perfetto na urządzeniu. (I48810)
  • Przenieś eksperymentalne interfejsy API rozszerzeń TraceProcessor.runServerandroidx.benchmark:benchmark-macro do androidx.benchmark:benchmark-common i do pakietu androidx.benchmark. Umożliwi to ich używanie w mikrotestach w przyszłości. (Ie25bb, b/393640753)

Poprawki błędów

  • Aktualizacja implementacji traceprocessor (a także rejestrowania śladów Perfetto w wersji bez pakietu) w celu używania Perfetto w wersji 56.0 (I8fb9d)
  • Domyślnie ustaw wartości androidx.benchmark.requireAotandroidx.benchmark.requireAot na „true”. Te bezpieczniejsze ustawienia domyślne zapewniają, że kompilacja jest przeprowadzana przed uruchomieniem mikropomiarów (domyślnie włączona w przypadku wtyczki Gradle do testów porównawczych, gdy używasz AGP 8.4 lub nowszego) i że measureRepeated nie jest używana w głównym wątku, w którym może powodować błędy ANR. (I1bc3c, b/379115078)
  • Zwiększono limit czasu na zakończenie procesu Perfetto z 5 do 30 sekund (dotyczy to tylko sesji Perfetto zarejestrowanych w ramach testów porównawczych). Dodaliśmy bardziej przejrzyste rejestrowanie błędów, gdy wystąpi problem. (If188f, b/435589290)

Wersja 1.5.0-alpha06

6 maja 2026 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha06 Wersja 1.5.0-alpha06 zawiera te zmiany.

Poprawki błędów

  • Prawidłowa obsługa środowisk wielodostępnych podczas przenoszenia plików z katalogu wyjściowego testu porównawczego do dodatkowego katalogu wyjściowego testu. (I90da5, b/489358149)

Wersja 1.5.0-alpha05

25 marca 2026 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha05 Wersja 1.5.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Zaktualizowano ArtMetric, aby uwzględnić pakiety najwyższego poziomu, co jest szczególnie ważne w przypadku korzystania z AGP/R8 w wersji 9.1 lub nowszej albo opcji globalnej -repackageclasses. Wcześniej ArtMetric nie wykrywał tych załadowań klas w swoich pomiarach artClassLoad.... (If8a35, b/487402058)

Nowe funkcje - Dodano nowy argument instrumentacji androidx.benchmark.requireLockedClocks, który umożliwia włączenie sprawdzania, czy zegary procesora są zablokowane na urządzeniach z dostępem do roota. (Id82e8, b/468039042)

Wersja 1.5.0-alpha04

11 marca 2026 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha04 Wersja 1.5.0-alpha04 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano JvmOverloads do PowerMetric.EnergyPowerMetric.Power (Iac0d0, b/481371562).

Poprawki błędów

  • Zaktualizowano ArtMetric, aby uwzględnić pakiety najwyższego poziomu, co jest szczególnie ważne w przypadku korzystania z AGP/R8 w wersji 9.1 lub nowszej albo opcji globalnej -repackageclasses. Wcześniej ArtMetric nie wykrywał tych załadowań klas w swoich pomiarach artClassLoad.... (I207ca, b/487402058)

Wersja 1.5.0-alpha03

11 lutego 2026 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha03 Wersja 1.5.0-alpha03 zawiera te zmiany.

  • Zaktualizowano, aby zależał od wersji beta UiAutomator 2.4.

Wersja 1.5.0-alpha02

28 stycznia 2026 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha02 Wersja 1.5.0-alpha02 zawiera te zmiany.

Poprawki błędów

  • Dodano częściową obsługę generowania profili podstawowych dla modułów Kotlin Multiplatform. Zwykle zależności od profili można zdefiniować za pomocą konfiguracji Gradle w bloku zależności, ale obecnie nie działa to w przypadku modułów KMP.baselineProfile

    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // THIS DOES NOT WORK
          // baselineProfile(":yourProducerProject")
        }
      }
    }
    
  • Zamiast tego zależności należy definiować za pomocą rozszerzenia baselineProfile. (Ie19c4)

    plugins {
        id("org.jetbrains.kotlin.multiplatform")
        id("com.android.kotlin.multiplatform.library")
        id("androidx.baselineprofile.consumer")
    }
    
    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // ...
        }
      }
    }
    // Define dependencies
    // This works !
    baselineProfile {
      variants {
        androidMain {
          from(project(":yourProducerProject"))
        }
      }
    }
    

Wersja 1.5.0-alpha01

17 grudnia 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.5.0-alpha01 Wersja 1.5.0-alpha01 zawiera te zmiany.

  • Macrobenchmark 1.5 używa UiAutomator 2.4, aby uprościć interakcję z mierzoną aplikacją. Obiekt MacrobenchmarkScope rozszerza teraz UiAutomatorTestScope, co umożliwia korzystanie z nowoczesnych interfejsów API UiAutomator, takich jak onElement { ... }.click().
  • Więcej informacji o UiAutomator 2.4 znajdziesz w dokumentacji.

Nowe funkcje

  • Wtyczka Gradle Baseline Profile nie wymaga już newDsl=false w AGP 9.0 (Iaaac7, b/443311090)
  • Rozszerzenie konfiguracji śledzenia o rozmiar rdzenia (np. mały/duży) w śladach systemu/Perfetto przechwytywanych przez test porównawczy. (I8e397, b/457469959)

Zmiany w interfejsie API

  • (W UiAutomator) Zmieniono startActivity wait na wait for new window. (I35da6, b/440021797)
  • Stabilizacja interfejsów API BlackHole w androidx.benchmark. (I2b67e, b/451749438)
  • Dodaj @JvmOverloads dla konstruktorów wygody dla PerfettoTraceRule. (I1510a, b/443763207)

Wersja 1.4

Wersja 1.4.1

10 września 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.1 Wersja 1.4.1 zawiera te zmiany.

Poprawki błędów

  • Stałe perfettoSdkTracing=true (np. podczas śledzenia Compose w mikrobenchmarku) powodowałoby zamknięcie procesu docelowego, jeśli był on już uruchomiony, a nie określono parametru StartupMode. (Ib2c1f)

Wersja 1.4.0

30 lipca 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0 Wersja 1.4.0 zawiera te zmiany.

Ważne zmiany od wersji 1.3.0

Mikrotesty

  • Przeniesiono zadania Gradle lockClocksunlockClocks do projektów testowych zamiast na najwyższy poziom, aby zachować izolację projektu Gradle.
  • Przebudowaliśmy BenchmarkRule, aby korzystało z korutyn i lepiej obsługiwało yield(). Powinno to znacznie zmniejszyć ryzyko błędów ANR podczas testów porównawczych, zwłaszcza długich testów CI. Uwaga: testy porównawcze interfejsu powinny być przeprowadzane z użyciem measureRepeatedOnMainThread.

Macrobenchmark

  • Dodano obejście problemu na API w wersji 34 lub nowszej, w przypadku którego CompilationMode.None() działałoby niespójnie, ponieważ ART weryfikuje teraz częściowo skompilowane aplikacje po pierwszym uruchomieniu.
  • Funkcja eksperymentalna – Startup Insights może wyróżniać niektóre typowe problemy w mikropomiarze porównawczym uruchamiania, przekazując wartość MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))).
  • Dodano ArtMetric, którego można używać do wykrywania kompilacji JIT i niezoptymalizowanego wczytywania klas – oba te elementy są przydatne do weryfikowania optymalizacji profilu podstawowego.

Profile podstawowe

  • BaselineProfileRule zbiera teraz profile aplikacji wieloprocesowych.

Inne zmiany

  • TraceProcessor został wyodrębniony do osobnej biblioteki (androidx.benchmark:benchmark-traceprocessor), aby można go było używać poza danymi Macrobenchmark w innych przypadkach. Można go też uruchomić na komputerowej maszynie JVM, definiując własny ServerLifecycleManager.

Wersja 1.4.0-rc01

18 czerwca 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-rc01 Wersja 1.4.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Dodaliśmy obejście problemu z obrazami środowiska wykonawczego, które powodują, że CompilationMode.None() nie mierzy wydajności w najgorszym przypadku po pierwszej iteracji. Niestety to obejście wymaga 5-sekundowego opóźnienia, aby celowo uszkodzić obraz środowiska wykonawczego na początku każdego zestawu testów makro (I4a4f1).

Wersja 1.4.0-beta02

4 czerwca 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-beta02 Wersja 1.4.0-beta02 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodaliśmy BaselineProfileConfig.Builder, aby ułatwić wywoływanie BaselineProfileRule.collectWithResults() programistom Java. (I94905)

Wersja 1.4.0-beta01

7 maja 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-beta01 Wersja 1.4.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano wariant konstruktora PerfettoTraceRule, który akceptuje PerfettoConfig (Ie53ba)

Poprawki błędów

  • Zaktualizowano format linku do informacji o start-upie, aby używać prawidłowej wtyczki i wyraźniejszego separatora (: jest krótszy niż %3A, ale oba są obsługiwane) (Ie18ef).TraceProcessor
  • Zawsze używaj wymuszonego zatrzymania, aby zamykać procesy, nawet w przypadku zrootowanego urządzenia i zamykania aplikacji systemowych. Poprawia wyjątki w formie: Expected no stdout/stderr from killall ... No such process. (Idca2c)

Wkład zewnętrzny

  • Dodano moduł obsługi wyjątków proxy dla TraceProcessorHttpServer (I480f5)

Wersja 1.4.0-alpha11

9 kwietnia 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha11 Wersja 1.4.0-alpha11 zawiera te zmiany.

Zmiany w interfejsie API

  • Zmieniono argument TraceProcessortimeout: Duration na timeoutMs, aby zwiększyć użyteczność dla wywołującego w Javie. (I9fbb5)
  • Oznacz konstruktor TraceProcessor jako wewnętrzny. Elementy wywołujące powinny używać atrybutów TraceProcessor.startServer lub TraceProcessor.runServer. (Ia8c5b)

Poprawki błędów

  • Gdy zamykasz aplikację za pomocą MacrobenchmarkScope.killProcess, sprawdzaj wyniki polecenia zamykania, aby zapobiec cichemu niepowodzeniu i błędom związanym z przekroczeniem limitu czasu. (I84555)

Aktualizacje zależności

  • Ta biblioteka jest teraz kierowana na poziom języka Kotlin 2.0 i wymaga KGP w wersji 2.0.0 lub nowszej. (Idb6b5)

Wersja 1.4.0-alpha10

26 marca 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha10 Wersja 1.4.0-alpha10 zawiera te zmiany.

Zmiany w interfejsie API

  • Zwiększyliśmy domyślny limit czasu oczekiwania na TraceProcessor obciążenie serwera i zapytania do 120 sekund (wcześniej 60/30) oraz umożliwiliśmy konfigurowanie obu tych wartości za pomocą jednego parametru limitu czasu. (Ifec87)

Poprawki błędów

  • Rozwiązaliśmy kilka problemów, które występowały podczas testowania porównawczego lub rejestrowania profili aplikacji bez profileinstaller, a która zawiera BroadcastReciever. Dotyczy to tylko uruchamiania na urządzeniach z dostępem do roota. (Ied308)

Wersja 1.4.0-alpha09

12 marca 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha09 Wersja 1.4.0-alpha09 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano TraceProcessor i Session API z uchwytami, które można zamknąć, co ułatwia korzystanie z niestandardowych cykli życia. Jest to też krok w kierunku ułatwienia korzystania z interfejsów Coroutine i Java API. Funkcje rozszerzenia TraceProcessor.runServer {} są teraz oznaczone jako eksperymentalne, ponieważ prawdopodobnie zostaną przeniesione i w przyszłości przestaną być eksperymentalne. (I358b4)

Poprawki błędów

  • Naprawiono problem z nieprawidłowym działaniem funkcji Fixed Benchmark i Baseline Profile w przypadku interfejsu API 36. Przyczyną była zmiana w pgrep toybox, która wymaga teraz, aby -a drukował pełną linię poleceń. (Idc991)
  • Filtruj domyślną konfigurację śledzenia, aby zmniejszyć ryzyko utraty danych w przypadku śladów na nowszych poziomach interfejsu API. (I54e8a)
  • Dodano eksperymentalny argument androidx.benchmark.killExistingPerfettoRecordings instrumentation, który można ustawić na false, aby umożliwić dalsze przechwytywanie śladów Perfetto. Domyślnie istniejące ślady Perfetto na urządzeniu są usuwane, aby zapobiec zakłóceniom. (I02a3c)
  • W przypadku opublikowanych wersji systemu operacyjnego na poziomie interfejsu API 35 i wyższym pole JSON context.osCodenameAbbreviated będzie teraz miało wartość REL, ponieważ nazwy kodowe inne niż numeryczne nie są już obsługiwane przez platformę bazową. (Ib17fd)
  • Naprawiono awarię w FrameTimingMetric, która występowała w przypadku ponownej synchronizacji klatek. (I7c6f4, b/394610806)
  • Nie zakładaj już, że Choreographer#doFrame jest górną częścią ramki stosu w wątku głównym w przypadku FrameTimingQuery. (Iee0e0, b/340206285)

Wersja 1.4.0-alpha08

12 lutego 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha08 Wersja 1.4.0-alpha08 zawiera te zmiany.

Zmiany w interfejsie API

  • Przeniesiono interfejsy API rozszerzeń TraceProcessor.runSession() do wersji eksperymentalnej, ponieważ prawdopodobnie zostaną one ostatecznie przeniesione do konstruktorów konkretnych na Androidzie. (Ib0528, b/393640753)
  • Większość implementacji Startup Insights jest obecnie publiczna lub eksperymentalna i została przeniesiona do artefaktu TraceProcessor. Więcej informacji znajdziesz w StartupInsights. (I0aa00)
  • Zastąpienie wartości BenchmarkRule.runWithTimingDisabled {} wartością BenchmarkRule.runWithMeasurementDisabled {}, która lepiej opisuje działanie – wszystkie dane są wstrzymane. Dodatkowo udostępnij superklasę MicrobenchmarkScope, ponieważ ponowne zadeklarowanie funkcji runWithMeasurementDisabled w celu otwarcia dostępu nie jest możliwe, ponieważ jest ona wstawiana w kodzie. (I9e23b, b/389149423, b/149979716)
  • Biblioteki benchmarków zostały przeniesione do Kotlin 2.0. (I9d1e0)
  • Usunięto argument androidx.benchmark.startupProfiles.enable instrumentacji. Nie jest już przydatna, ponieważ można nią sterować za pomocą argumentu includeInStartupProfileBaselineProfileRule.collect(). (I39eb4)

Poprawki błędów

  • Zmniejszono liczbę wewnętrznych funkcji Microbenchmark wywoływanych podczas profilowania, aby np.ślady metod były bardziej przejrzyste (Ifaed8).
  • Spekulatywna poprawka dotycząca awarii: „Nie udało się zatrzymać [ProcessPid(processName=perfetto, pid=...)]”. Teraz w przypadku, gdy nie uda się zatrzymać procesu Perfetto w tle przed uruchomieniem testu porównawczego, test porównawczy będzie rejestrować komunikat zamiast ulegać awarii. (I37d3e, b/323601788)
  • Naprawiono błędy IllegalStateExceptions z etykietą „Oczekiwane wyjście standardowe pm dump-profiles”, które były spowodowane zbyt rygorystycznym sprawdzaniem formatu danych wyjściowych. (I358dc)

Wersja 1.4.0-alpha07

29 stycznia 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha07 Wersja 1.4.0-alpha07 zawiera te zmiany.

Nowe funkcje

  • BaselineProfileRule wprowadza teraz collectWithResults(...) API, które zawiera listę ścieżek do obliczonych profili. (I056f8)
  • Dodano argument androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, który można ustawić na wartość false, aby wyłączyć zachowanie measureRepeatedOnMainThread polegające na zgłaszaniu wyjątku po upływie terminu w przypadku testów lokalnych. Nie jest to zalecane, ponieważ zwiększa prawdopodobieństwo wystąpienia błędów ANR podczas testów. (Idbeec, b/353226476)

Zmiany w interfejsie API

  • Dodano @JvmOverloads do konstruktora MicrobenchmarkConfig. (I13fd3)
  • Przebudowaliśmy BenchmarkRule, aby korzystało z korutyn i lepiej obsługiwało yield(). W ramach tej zmiany usunęliśmy kilka eksperymentalnych interfejsów BenchmarkState API, ale w razie potrzeby zastąpimy je innymi. Dodaliśmy też symbol runWithMeasurementDisabled, aby wyjaśnić zachowanie (wszystkie pomiary są wstrzymane). W przyszłości runWithTimingDisabled zostanie wycofane. (I19837, b/389149423, b/311242861)
  • Przenieś PerfettoTraceProcessor do TraceProcessor w nowym artefakcie androidx.benchmark:benchmark-traceprocessor i spraw, aby większość jego interfejsu API nie była eksperymentalna. Wszystkie niestandardowe TraceMetric lub elementy odczytujące dane ze śladów będą musiały zostać zaktualizowane do nowego importu TraceProcessor. Nowy interfejs TraceProcessor API działa dokładnie tak samo jak stary, ale jest samodzielną biblioteką interfejsów (podobnie jak warstwa androidx.sqlite w Room) z implementacją na Androida wbudowaną w makrobenchmark. Nowy artefakt można też używać na maszynie JVM, ale obecnie musisz uruchomić własną kopię pliku binarnego TraceProcessor i udostępnić port do połączenia. (I3a767, I62563, b/381134564)

Poprawki błędów

  • Wyświetlanie bardziej szczegółowego komunikatu o błędzie, gdy MacrobenchmarkScope.startActivityAndWait nie może uruchomić procesu docelowego (prawdopodobnie z powodu awarii tego procesu), zamiast bardziej niejednoznacznego komunikatu „Nie można potwierdzić zakończenia uruchamiania aktywności” (I3539b).
  • Naprawiono kilka błędów składniowych w przykładach w języku Kotlin oraz podświetlanie składni w kilku przykładach w języku Java i w pliku build.gradle. (Ib3808)
  • Doprecyzowana dokumentacja parametrów ArtMetricCaptureInfo. (I96e60)

Wersja 1.4.0-alpha06

11 grudnia 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha06 Wersja 1.4.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • Usunięto użycie @Language("sql") w PerfettoTraceProcessor.Session.query(), ponieważ wyróżnianie i analizowanie w Studio nie działa. (Idc2fa, b/377733398)

Poprawki błędów

  • Ta biblioteka korzysta teraz z adnotacji o wartości null JSpecify, które są używane w typie. Deweloperzy Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie: -Xjspecify-annotations=strict (jest to domyślny argument począwszy od wersji 2.1.0 kompilatora Kotlin). (I46810, b/326456246)
  • Poprawiono ArtMetric, aby raportować wczytywanie klasy (nie inicjowanie), i ulepszono dokumentację, aby wyjaśnić działanie w czasie działania. (I9915c)
  • W przypadku Androida Multiuser polecenia są wykonywane jako root tylko na urządzeniach z dostępem do roota. (I88b44)

Wersja 1.4.0-alpha05

13 listopada 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha05 Wersja 1.4.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem w przypadku interfejsu API w wersji 34 lub nowszej, który powodował, że funkcja CompilationMode.None() działała w sposób niespójny i nie odzwierciedlała początkowej wydajności w najgorszym przypadku. Jest to obejście zmiany platformy, która umożliwia częściową kompilację aplikacji (wpływającą tylko na wczytywanie klas) przez stan kompilacji ART verify krótko po pierwszym uruchomieniu. (Ie48d0)
  • Rozwiązano problem, w którym (zwłaszcza krótkie) ślady mogły być rejestrowane bez raportowania pomiarów z wbudowanych danych Macrobenchmark Metrics z powodu obcięcia nazwy procesu w śladzie Perfetto. Obecnie makrotesty porównawcze rozwiązują ten problem, wyszukując skróconą nazwę pakietu we wszystkich wbudowanych zapytaniach, a nie tylko w oczekiwanej nazwie pakietu. Pamiętaj, że niestandardowe implementacje TraceMetric lub inne bezpośrednie wywołania PerfettoSession.query mogą implementować to samo zachowanie, zmieniając process.name LIKE "$packageName" w zapytaniu Perfetto na (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)

Wersja 1.4.0-alpha04

30 października 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha04 Wersja 1.4.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • (Eksperymentalne) Włącz generowanie profilu podstawowego i testowanie porównawcze w przypadku aplikacji zainstalowanych na koncie dodatkowego użytkownika, np. dowolnej aplikacji na urządzeniach z Androidem Auto bez ekranu. Ta funkcja została przetestowana w niektórych scenariuszach, ale jeśli nie działa u Ciebie, zgłoś błąd. (I9fcbe, b/356684617, b/373641155)

Poprawki błędów

  • W przypadku kompilacji testowych wartość isProfileable jest zawsze zastępowana, a w przypadku kompilacji testowych i nonMinified (podstawowe przechwytywanie profilu) wartość isDebuggable jest również zawsze zastępowana. (I487fa, b/369213505)
  • Poprawiono wykrywanie kompilacji na niektórych urządzeniach fizycznych przed API 28 – dotyczy to pliku JSON context.compilationMode oraz działania funkcji androidx.benchmark.requireAot=true (która nie zgłasza już nieprawidłowo wyjątku) (Ic3e08, b/374362482).
  • W przypadku danych CpuEventCounter zgłaszaj wyjątek, jeśli wystąpią nieprawidłowe pomiary (np.instrukcje/cykle_procesora==0) (I8c503).

Wersja 1.4.0-alpha03

16 października 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha03 Wersja 1.4.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • Macrobenchmark: dodaje ArtMetric, którego można używać do sprawdzania pokrycia profilu lub ogólnej wydajności środowiska wykonawczego Androida. Rejestruje liczbę i łączny czas trwania kompilacji JIT, inicjowania klasy (tam, gdzie jest to możliwe) i weryfikacji klasy. Dodatkowo zmieniliśmy CaptureInfo, aby uwzględnić opcjonalną główną wersję ART z wartością domyślną. (I930f7)
  • Dodaj coefficientOfVariation do danych wyjściowych JSON testu porównawczego, aby pokazać stabilność w ramach danego testu. (Ib14ea)

Poprawki błędów

  • Naprawiono CollectBaselineProfileTask, gdy nazwa urządzenia AVD zawierała spacje. (Ia0225, b/371642809)
  • Spekulatywna poprawka błędów wynikających z wyjątków StartupMode.COLD: Package <packagename> must not be running prior to cold start!. Teraz funkcja MacrobenchmarkScope.killProcess() (w tym ta uruchamiana przed każdą iteracją, używana do implementowania zachowania StartupMode.COLD) będzie czekać na potwierdzenie, że wszystkie procesy aplikacji zostały zatrzymane. (I60aa6, b/351582215)
  • Rozwiązaliśmy problem, który powodował, że na niektórych emulatorach z dostępem do roota pojawiał się błąd UNLOCKED_. (Ic5117)
  • Ta biblioteka korzysta teraz z adnotacji o wartości null JSpecify, które są używane w typie. Deweloperzy Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie: -Xjspecify-annotations=strict (jest to domyślny argument począwszy od wersji 2.1.0 kompilatora Kotlin). (I7104f, b/326456246)

Wersja 1.4.0-alpha02

2 października 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha02 Wersja 1.4.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • Przeniesiono zadania Gradle lockClocksunlockClocks do projektów testowych zamiast udostępniać je na najwyższym poziomie. Ta zmiana była konieczna, ponieważ nie ma możliwości zarejestrowania tych działań jako działań najwyższego poziomu bez naruszania izolacji projektu. (I02b8f, b/363325823)

Poprawki błędów

  • BaselineProfileRule zbiera teraz profile aplikacji wieloprocesowych, sygnalizując każdy uruchomiony proces na końcu bloku, aby zrzucać profile. Jeśli kompilacja oparta na profilu nigdy nie znajdzie procesu, do którego można wysyłać transmisję, kompilacja zakończy się niepowodzeniem, ponieważ dane profilu są w niej nieoczekiwane. Dodaliśmy też argument instrumentacji, który pozwala kontrolować czas oczekiwania na zrzut: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Benchmark 1.3.2: naprawiono problem z Laboratorium Firebase (FTL), które nie mogło pobierać plików wyników profilu podstawowego ani biblioteki Macrobenchmark z wtyczki Gradle profilu podstawowego. (I2f678, b/285187547)

Aby użyć FTL, zastosuj wtyczkę do modułu profilu podstawowego w bloku wtyczek, używając tych parametrów:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

Następnie skonfiguruj Laboratorium Firebase w ten sposób:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Utworzone urządzenie FTL należy też dodać do rozszerzenia profilu podstawowego:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Wersja 1.4.0-alpha01

18 września 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.4.0-alpha01 Wersja 1.4.0-alpha01 zawiera te zmiany.

Nowa funkcja – statystyki uruchamiania aplikacji

  • Wstępną wersję statystyk uruchamiania aplikacji można włączyć w Macrobenchmark. (09fae38)

Aby włączyć w przypadku testu porównawczego dotyczącego startupu:

  @Test
  fun startup {
      macrobenchmarkRule.measureRepeated(
          
          packageName = "com.example.my.application.id"
          metrics = listOf(StartupTimingMetric()),
          iterations = 5,
          startupMode = StartupMode.COLD,
          compilationMode = CompilationMode.None(),
          experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
          ) {
          scope.startActivityAndWait(...)
      }
  }

Następnie uruchomienie testu porównawczego uruchamiania przeanalizuje ślad w poszukiwaniu typowych problemów i wyświetli je po danych w danych wyjściowych testu Studio na karcie testu porównawczego, np.:

StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│   ├──   timeToFullDisplayMs                min  1,147.2,   median  1,208.8,   max  1,307.4
│   └──   timeToInitialDisplayMs             min  1,147.2,   median  1,208.8,   max  1,307.4
├── App Startup Insights
│   ├── App in debuggable mode (expected: false)
│   │   └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│   ├── Potential CPU contention with another process (expected: < 100000000ns)
│   │   └── seen in iterations: 4(105022546ns)
│   └── Main Thread - Binder transactions blocked (expected: false)
│       └── seen in iterations: 7(true)
└── Traces
    └── Iteration 0 1 2 3 4 5 6 7 8 9

Ta funkcja jest wciąż dopracowywana, a w przyszłości ulepszymy dokumentację i możliwości rozszerzania. Chętnie poznamy Twoją opinię.

Nowe funkcje

  • Dodano właściwość Gradle androidx.baselineprofile.suppressWarnings, aby wyciszyć wszystkie ostrzeżenia dotyczące profilu podstawowego. (314153a)
  • Dane mikropomiarów są teraz wyświetlane w śladach Perfetto jako liczniki. (3214854)
  • Dodano eksperymentalne skrypty do wyłączania kompilacji JIT (wymaga roota lub ponownego uruchomienia środowiska wykonawczego) i resetowania stanu wydajności/testu urządzenia. Nie są one obecnie publikowane jako zadania Gradle. (7c3732b)
  • Dodaliśmy argument testu porównawczego, aby pomijać testy podczas uruchamiania na emulatorze. Gdy włączona jest kompilacja automaticGenerationDuring, testy porównawcze również wywołują generowanie profilu podstawowego. Jeśli używane są emulatory, ta czynność się nie powiedzie. Dzięki nowemu argumentowi skipBenchmarksOnEmulator możemy pominąć test. (0c2ddcd)
  • Zmiana logiki włączania zdarzenia dotyczącego wydajności, aby działała w przypadku interfejsu API w wersji 23 lub nowszej (2550048)

Zmiany w interfejsie API

  • Istniejący eksperymentalny argument PerfettoConfig do MacrobenchmarkRule.measureRepeated() został przeniesiony do nowego obiektu ExperimentalConfig.

Poprawki błędów

  • Zwiększ liczbę ponownych prób lockClocks.sh (99e9dac)
  • Nie twórz typów kompilacji nonMinified i testów porównawczych, jeśli już istnieją. Z powodu błędu nawet jeśli istniały typy kompilacji nonMinified i testu porównawczego, zostaną one ponownie utworzone. (e75f0a5)
  • Ignoruj niekończące się wycinki z TraceSectionMetric wyników. (a927d20)
  • Ulepszone sprawdzanie emulatora pod kątem prefiksu sdk_. (1587de8)
  • Traktuj nieuruchomione pakiety jako wyczyszczone w FrameTimingGfxInfoMetric. (35cc79c)
  • Naprawiono problem z androidx.benchmark.cpuEventCounter, który powodował generowanie uszkodzonych wartości w przypadku zdarzeń innych niż instrukcje. (06edd59)
  • Poprawka resumeTiming/runWithTimingDisabled, aby uwzględniać kolejność priorytetów danych i znacznie ograniczyć wpływ wstrzymywania/wznawiania danych o niższym priorytecie na wyniki danych o wyższym priorytecie. Na przykład jeśli używasz liczników wydajności procesora za pomocą argumentu instrumentacji cpuEventCounter.enable, czas w nanosekundach nie jest już znacznie skracany w przypadku wstrzymania lub wznowienia. (5de0968)

Wersja 1.3

Wersja 1.3.4

26 marca 2025 r.

Publikacja androidx.benchmark:benchmark-*:1.3.4 Wersja 1.3.4 zawiera te zmiany.

Poprawki błędów

  • Rozwiązanie problemów z niezgodnością izolacji projektu Gradle we wtyczce Gradle Benchmark Baseline. (b/404523257)

Wersja 1.3.3

16 października 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.3 Wersja 1.3.3 zawiera te zmiany.

Poprawki błędów

  • Naprawiono CollectBaselineProfileTask, gdy urządzenie AVD zawierało spacje (Ia0225, b/371642809)

Wersja 1.3.2

2 października 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.2 Wersja 1.3.2 zawiera te zmiany.

Poprawki błędów

  • Naprawiono problem z Laboratorium Firebase (FTL), które nie mogło pobierać plików wyników profilu podstawowego ani biblioteki Macrobenchmark z wtyczki Gradle profilu podstawowego. (I2f678, b/285187547)

Aby użyć FTL, zastosuj wtyczkę do modułu profilu podstawowego w bloku wtyczek, używając tych parametrów:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

Następnie skonfiguruj Laboratorium Firebase w ten sposób:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Utworzone urządzenie FTL należy też dodać do rozszerzenia profilu podstawowego:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Wersja 1.3.1

18 września 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.1 Wersja 1.3.1 zawiera te zmiany.

Poprawki błędów

  • Dodano właściwość Gradle androidx.baselineprofile.suppressWarnings, aby wyciszyć wszystkie ostrzeżenia dotyczące profili bazowych (I7c36e, b/349646646).
  • Poprawiliśmy wtyczkę Gradle profilu podstawowego, aby używała wcześniej utworzonych plików nonMinified…benchmark…, jeśli zostały utworzone przez aplikację, zamiast tworzyć otoczki. (Ia8934, b/361370179)
  • Naprawiono java.lang.AssertionError: ERRORS (not suppressed): EMULATOR, gdy na emulatorach włączona jest funkcja automaticGenerationDuringBuild. Nowy argument służy do pomijania testu. (If3f51, b/355515798)
  • Minimalizacja mikropomiarów – zachowaj podklasy org.junit.runner.notification.RunListener w bibliotece testów porównawczych proguard (Ic8ed5, b/354264743)
  • Poprawiono TraceSectionMetric, aby ignorować niekończące się wycinki. Wcześniej uznawano, że mają one czas trwania –1, np. podczas sumowania lub znajdowania minimalnego czasu trwania. (If74b7)
  • Rozwiązaliśmy problem w FrameTimingGfxInfoMetric, który powodował, że rozpoczęcie pomiaru kończyło się awarią, jeśli proces nie był jeszcze uruchomiony. (I6e412)

Wersja 1.3.0

21 sierpnia 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0 Wersja 1.3.0 zawiera te zmiany.

Zmiany w mikrotestach porównawczych od wersji 1.2.0

  • Śledzenie metod jest domyślnie włączone w mikrotestach porównawczych na większości urządzeń.
    • Śledzenie metod jest uruchamiane w osobnej fazie po pomiarach. Dzięki temu można uzyskać dokładne pomiary i ślady metod z jednego uruchomienia testu porównawczego.
    • Śledzenie metod w niektórych wersjach Androida i ART będzie miało wpływ na późniejsze fazy pomiaru – w tych wersjach śledzenie metod jest domyślnie wyłączone, a w danych wyjściowych Studio wyświetla się ostrzeżenie.
  • Testy porównawcze wątku głównego i błędy ANR
    • Dodaliśmy measureRepeatedOnMainThread do testów porównawczych wątku interfejsu (np. tych, które wchodzą w interakcję z interfejsami Compose/View), aby uniknąć błędów ANR podczas wykonywania testów przez wiele sekund.
    • Ślady metod są pomijane, jeśli oczekuje się, że przekroczą termin unikania ANR. Ustaw wartość androidx.benchmark.profiling.skipWhenDurationRisksAnr na false, aby wyłączyć to działanie (nie jest to zalecane w przypadku długotrwałych testów CI, ponieważ błędy ANR mogą powodować problemy).
  • Minifikacja
    • Osadzone reguły ProGuard, które poprawiają mikropomiary z włączoną minimalizacją
    • Zmniejszanie rozmiaru/R8 w module biblioteki wymaga AGP 8.3 i można je włączyć za pomocą android.buildTypes.release.androidTest.enableMinificationbuild.gradle.
    • Dodano eksperymentalny interfejs API BlackHole.consume(), aby zapobiec usuwaniu martwego kodu (If6812, b/286091643)
  • Dane
    • Eksperymentalna funkcja licznika zdarzeń procesora (dane z perf_event_open, która w większości wersji platformy wymaga dostępu do roota), dostępna za pomocą InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (można ustawić wartość true) i androidx.benchmark.cpuEventCounter.events, np. (Instructions,CpuCycles). Ta funkcja powinna być obsługiwana na niektórych emulatorach w wersji userdebug, ale nie została przetestowana na wszystkich dostępnych emulatorach.

Zmiany w MACRObenchmark od wersji 1.2.0

  • Ulepszone śledzenie metod w przypadku testów porównawczych.
    • Ślady metody są teraz ograniczone do czasu trwania measureBlock i mogą rejestrować wiele sesji, jeśli proces zostanie uruchomiony wiele razy.
    • Wcześniej śledzenie metod działało tylko w przypadku testów porównawczych StartupMode.COLD i nie rejestrowało niczego w przypadku testów measureBlocks, które nie powodowały ponownego uruchomienia procesu docelowego.
    • W przypadku makrobenchmarków ślady metody są zapisywane w pamięci, dzięki czemu powinny być w pełni rejestrowane i prawidłowe nawet na wolniejszych urządzeniach. (I6349a, b/329904950)
  • Prawidłowe zrzucanie profilu ART podczas poszczególnych iteracji warmUp, gdy proces jest przerywany, dzięki czemu pomiary CompilationMode.Partial(warmup=N) są dokładniejsze. (I17923)
  • Komunikat o błędzie transmisji Drop Shader
    • Dodaliśmy sugestie dotyczące debugowania do komunikatu o błędzie związanym z nieudanym przesłaniem cieniowania.
    • Dodaj 2 argumenty instrumentacji, aby zastąpić zachowanie związane z usuwaniem cieniowania i obejść awarie podczas testowania aplikacji bez ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : można użyć, aby pominąć usuwanie wszystkich shaderów (w tym tych, które są usuwane podczas uruchamiania StartupMode.Cold), zwłaszcza podczas testowania aplikacji, które nie używają jeszcze profileinstaller w wersji 1.3.
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : może być używany do tolerowania błędów podczas próby usunięcia shaderów, np. podczas testowania porównawczego aplikacji bez profileinstallera w wersji 1.3 (I4f573).
  • Dodano eksperymentalny wariant MacrobenchmarkRule#measureRepeated, który przyjmuje niestandardowy parametr PerfettoConfig, aby w pełni dostosować nagrywanie śladu Perfetto. Pamiętaj, że nieprawidłowo skonfigurowane konfiguracje mogą powodować błędy wbudowanych klas wskaźników. (Idfd3d, b/309841164, b/304038384)
  • Przed uruchomieniem testu Macrobenchmark anuluj zadania dexopt w tle, aby ograniczyć zakłócenia. (I989ed)
  • Makrobenchmark czeka teraz 1 sekundę na opróżnienie profilu ART przez aplikację docelową (wcześniej czekał 500 ms). (I85a50, b/316082056)
  • Zmiany w TraceSectionMetric
    • Uwaga: poniższe zmiany TraceSectionMetric mogą mieć wpływ na wyniki w przypadku użycia CI i spowodować nieciągłości lub przerwać analizowanie.
    • Suma jest teraz wartością domyślną, ponieważ w większości przypadków te dane są używane w przypadku powtarzających się zdarzeń, a wartość „pierwsze” odrzucałaby dane w takich sytuacjach.
    • Zmieniono, aby można było go bardziej dostosowywać, i dodano więcej dostępnych trybów.
    • Nazwy trybów są teraz osadzone w nazwie danych wyjściowych dotyczących danych (w Studio i JSON).
    • Obsługuje teraz wycinki utworzone za pomocą Trace.{begin|end}AsyncSection.
  • Dane
    • Zasilanie – dodano PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge()PowerMetric.deviceSupportsPowerEnergy()
    • Zmiana nazwy Metric.getResult na getMeasurements, aby była zgodna z typem zwracanej wartości
    • Dodano etykiety log.w / exception do wszystkich błędów wykrywania uruchamiania. Nie zmienia to obecnego działania (niektóre błędy są zgłaszane, a inne nie są wykrywane), tylko sprawia, że jest ono bardziej zrozumiałe. Zwykle są to te, które Log.w() i nie zgłaszają danych o uruchamianiu. W takich przypadkach brakuje zdarzeń innych niż klatki, a po wykryciu uruchomienia zgłaszane są wyjątki, z wyjątkiem informacji o czasie klatki (z wycinków interfejsu/wątku renderowania). (Id240f, b/329145809)
    • Dodaliśmy pomiar frameCount do FrameTimingMetric, aby ułatwić wykrywanie sytuacji, w których pomiary zmieniają się z powodu zmiany liczby wygenerowanych klatek (dodano nowe animacje, naprawiono problemy z unieważnianiem). (I1e5aa)
    • Wyjaśniliśmy, że frameOverrunMs to preferowane dane do śledzenia, gdy są dostępne w dokumentach, i dlaczego. (I18749, b/329478323)
    • Rozwiązuje problem, który powodował, że nieukończone klatki na początku i na końcu śladu mogły być ze sobą łączone, co powodowało nieprawidłowe raportowanie jako pojedynczej, bardzo długiej klatki. (I39353, b/322232828)
    • Ulepszyliśmy błąd FrameTimingMetric, gdy nie są generowane klatki, i zawsze wyświetlamy link do śledzenia, gdy nie uda się przeanalizować danych, aby ułatwić diagnozowanie problemu. (I956b9)
    • Naprawiliśmy awarię w FrameTimingMetric, która występowała podczas analizowania identyfikatora ramki, zwłaszcza na niektórych urządzeniach OEM. (Ia24bc, b/303823815, b/306235276)
    • Złagodziliśmy rygorystyczność sprawdzania w FrameMetrics i dodaliśmy więcej szczegółów do komunikatów o błędach. (Iadede)

Zmiany w przechwytywaniu profili podstawowych i wtyczce Gradle od wersji 1.2.0

  • Zwiększono maksymalną zalecaną wersję AGP do 9.0.0-alpha01.
  • Upewnij się, że zadania mergeArtProfilemergeStartupProfile zawsze czekają na wygenerowanie profilu podstawowego. (I623d6, b/343086054)
  • Wygenerowanie profilu bazowego spowoduje wyświetlenie podsumowania zmian (I824c8, b/269484510).
  • Dodano DSL, aby wyłączyć ostrzeżenia (Ic4deb, b/331237001)
  • Rozwiązanie problemu, aby zapewnić, że testy porównawcze będą używać wygenerowanych profili podstawowych, gdy opcja automaticGenerationDuringBuild jest wyłączona (Ic144f, b/333024280)
  • Naprawiono zastępowanie właściwości wtyczki Gradle, aby umożliwić generowanie profilu podstawowego i przeprowadzanie testów porównawczych podczas dostosowywania typu kompilacji nonMinified lub kompilacji testu porównawczego.BaselineProfile (Ib8f05, b/324837887)
  • Poprawka dotycząca uwzględniania profili bazowych biblioteki w pliku AAR przed AGP 8.3.0-alpha15. (I1d2af, b/313992099)
  • Stały adres URL profilu podstawowego i profilu uruchamiania na końcu zadania generowania. (I802e5, b/313976958)

Inne istotne zmiany od wersji 1.2.0

  • Przechwytywanie śladu
    • Zmniejszenie liczby błędów EXITCODE 2 podczas uruchamiania narzędzia Perfetto z błędu do ostrzeżenia w dzienniku
    • Domyślne włączanie śledzenia AIDL w testach porównawczych(wymaga interfejsu API w wersji 28) (Ia0af2, b/341852305)
    • Domyślne włączanie śledzenia tagów porterów w testach porównawczych. Obejmuje to np. punkty śledzenia blokady wybudzania. (Icfe44, b/286551983)
    • Wydłużono czas oczekiwania na rozpoczęcie rejestrowania śladów, aby uniknąć awarii podczas rozpoczynania śledzenia na wolniejszych urządzeniach (I98841, b/329145808).
    • Dodano publiczny interfejs API PerfettoTraceProcessor.Session.queryMetrics API w wersjach JSON, textproto i proto binary (niezdekodowanej). Umożliwiają one wysyłanie zapytań dotyczących wskaźników wbudowanych w TraceProcessor (I54d7f, b/304038382).
    • Włącz blokowanie rozpoczęcia w rekordzie śladu Perfetto, aby zmniejszyć ryzyko utraty danych na początku śladu. Obsługiwane tylko w przypadku interfejsu API na poziomie 33 lub wyższym. (Ie6e41, b/310760059)
  • Dane wyjściowe JSON
    • Dodano dodatkowe informacje w kontekście porównawczym w danych wyjściowych JSON:
      • context.artMainlineVersion – wersja modułu głównego ART (jeśli jest obecny na urządzeniu, w przeciwnym razie -1)
      • context.build.id - Equals android.os.Build.ID
      • context.build.version.codename – Equals android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename – odpowiada pierwszej literze nazwy kodowej wersji przedpremierowej (w tym w wersjach produkcyjnych) (Ie5020)
    • Dodano listę profilerOutput do danych wyjściowych JSON, aby ułatwić korzystanie z narzędzi do profilowania śladów (np. Perfetto, ślady metod) (I05ddd, b/332604449)
    • Dodano ostrzeżenie o używaniu narzędzia Android Test Orchestrator w modułach testów porównawczych, ponieważ powoduje to wielokrotne zastępowanie plików JSON z wynikami poszczególnych modułów. (Ia1af6, b/286899049)
    • Wywołuje wyjątek, gdy nazwy plików są dłuższe niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab)

Wersja 1.3.0-rc01

7 sierpnia 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-rc01 Wersja 1.3.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Poprawka problemu z funkcją androidx.benchmark.cpuEventCounter, która generowała uszkodzone wartości w przypadku zdarzeń innych niż instrukcje (I7386a, b/286306579)
  • Poprawka resumeTiming/runWithTimingDisabled, która uwzględnia kolejność priorytetów danych i znacznie zmniejsza wpływ wstrzymania lub wznowienia danych o niższym priorytecie na wyniki danych o wyższym priorytecie. Na przykład jeśli używasz liczników wydajności procesora za pomocą argumentu instrumentacji cpuEventCounter.enable, czas w nanosekundach nie jest już znacznie skracany w przypadku wstrzymania lub wznowienia. (I39c2e, b/286306579, b/307445225)
  • Zmniejszono prawdopodobieństwo, że próbkowanie stosu spowoduje przekroczenie przez measureRepeatedOnMainThread limitu czasu głównego wątku, przenosząc konwersję próbkowania stosu poza główny wątek. (I487a8, b/342237318)
  • Usunięto ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsów API podczas korzystania z R8 z AGP 7.3 lub nowszą (np. R8 w wersji 3.3) oraz w przypadku wszystkich kompilacji podczas korzystania z AGP 8.1 lub nowszej (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z wtyczki Androida do obsługi Gradle, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (I9496c, b/345472586)
  • Dodano sprawdzanie wersji AGP, aby wysyłać nazwę pakietu jako argument instrukcji. W wersjach wtyczki Androida do obsługi Gradle starszych niż 8.4.0 nie można wysyłać nazwy pakietu aplikacji docelowej do aplikacji do instrumentacji za pomocą argumentów instrumentacji. (0c72a3f)

Wersja 1.3.0-beta02

10 lipca 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-beta02 Wersja 1.3.0-beta02 zawiera te zmiany.

Poprawki błędów

  • W przypadku kodu EXITCODE 2 podczas uruchamiania narzędzia Perfetto należy zarejestrować ostrzeżenie, ale kontynuować działanie.

Wersja 1.3.0-beta01

12 czerwca 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-beta01 Wersja 1.3.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Zmieniliśmy nazwę MethodTracing.affectsMeasurementOnThisDevice na AFFECTS_MEASUREMENT_ON_THIS_DEVICE, aby zachować spójność. (I1bdfa)
  • Dodano eksperymentalny interfejs API BlackHole.consume(), aby zapobiec usuwaniu martwego kodu w mikrotestach. (If6812, b/286091643)
  • Mikrotest będzie teraz prawidłowo zgłaszać wyjątki, aby śledzenie metod nie zakłócało pomiarów. Dzieje się tak na niektórych urządzeniach, gdy śledzenie metod jest wymuszone (za pomocą argumentów instrumentacji lub MicrobenchmarkConfig) i gdy po śledzeniu metod następuje próba pomiaru. Problem dotyczy urządzeń z interfejsem API w wersji 26–30 lub niektórych wersji modułu głównego ART, na które mają wpływ te zakłócenia. Można je wykryć w czasie działania aplikacji za pomocą ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)

Poprawki błędów

  • Zwiększono maksymalną zalecaną wersję wtyczki Androida do obsługi Gradle do 9.0.0-alpha01. (I5bbb0)
  • Dodano tryb kompilacji do kontekstu benchmarku (If5612, b/325512900)
  • Domyślne włączanie śledzenia AIDL (wymaga interfejsu API w wersji 28) (Ia0af2, b/341852305)
  • Dodano dodatkowe informacje w kontekście porównawczym w danych wyjściowych JSON:
    • context.artMainlineVersion – wersja modułu głównego ART w formacie liczby całkowitej (jeśli jest obecny na urządzeniu, w przeciwnym razie -1)
    • context.build.id – to android.os.Build.ID
    • context.build.version.codename – to android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename – odpowiada pierwszej literze nazwy kodowej wersji przedpremierowej (nawet w przypadku wersji produkcyjnych) (Ie5020).
  • Poprawka StackSampling, aby uwzględniać androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • Zmień zależność makro → wspólna na api(), aby łatwiej było używać np. PerfettoTracePerfettoConfig. (Icdae3, b/341851833)
  • Upewnij się, że zadania mergeArtProfilemergeStartupProfile zawsze czekają na wygenerowanie profilu podstawowego. (I623d6, b/343086054)
  • Przy podejmowaniu decyzji o włączeniu wariantu weź pod uwagę jego stan. (I5d19e, b/343249144)
  • Zwiększono domyślny limit czasu rozpoczęcia dla procesora śladów Perfetto. (I87e8c, b/329145808)

Wersja 1.3.0-alpha05

14 maja 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-alpha05 Wersja 1.3.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Wyświetlanie bardziej przejrzystego wyjątku, gdy wskaźnik makrotestu zwraca wartości zerowe dla wszystkich iteracji (Iab58f, b/314931695)
  • Dodano dodatkowe reguły obejścia do reguł ProGuard mikrobadań, w tym obsługę reguł odbiornika i innych zaobserwowanych ostrzeżeń lub błędów. (I14d8f, b/329126308, b/339085669)
  • Śledzenie metod jest uruchamiane jako osobna faza podczas testu Macrobenchmark i nie ma już wpływu na pomiary. (If9a50, b/285912360, b/336588271)
  • Dodaliśmy dodatkowe sugestie dotyczące debugowania do komunikatu o błędzie związanym z przerwaniem transmisji cieniowania. (I5efa6, b/325502725)

Wersja 1.3.0-alpha04

1 maja 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-alpha04 Wersja 1.3.0-alpha04 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano eksperymentalny wariant MacrobenchmarkRule#measureRepeated, który przyjmuje niestandardowy parametr PerfettoConfig, aby w pełni dostosować nagrywanie śladu Perfetto. Pamiętaj, że nieprawidłowo skonfigurowane konfiguracje mogą powodować błędy wbudowanych klas wskaźników. (Idfd3d, b/309841164, b/304038384)
  • Zmieniono nazwę PowerMetric.deviceSupportsPowerEnergy na PowerMetric.deviceSupportsHighPrecisionTracking, aby zwiększyć przejrzystość (I5b82f)
  • Dodaliśmy zasady PowerMetric.deviceBatteryHasMinimumCharge()PowerMetric.deviceSupportsPowerEnergy(), aby umożliwić zmianę lub pomijanie testów porównawczych na podstawie możliwości pomiaru mocy urządzenia. (I6a591, b/322121218)

Poprawki błędów

  • Dodano porównanie z poprzednim profilem odniesienia (I824c8, b/269484510)
  • Dodano DSL, aby wyłączyć ostrzeżenia (Ic4deb, b/331237001)
  • Zmiana wyjątku na log informacyjny, gdy warianty porównawcze są wyłączone (I8a517, b/332772491)
  • Ułatwienie rejestrowania śladów metod w przypadku testów porównawczych makro, które są ograniczone do czasu trwania rzeczywistego measureBlock(). Wcześniej rozpoczynało się ono w momencie uruchomienia procesu docelowego i obsługiwało tylko zimne starty (Iee85a, b/300651094).
  • Unikanie awarii, gdy procesor śledzenia Perfetto wolno się uruchamia (I98841, b/329145808)

Wersja 1.3.0-alpha03

17 kwietnia 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-alpha03 Wersja 1.3.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • Dodaje publiczny interfejs API PerfettoTraceProcessor.Session.queryMetrics API w wersjach JSON, textproto i proto binary (niezdekodowanej). Umożliwiają one wysyłanie zapytań dotyczących wbudowanych w TraceProcessor wskaźników (I54d7f, b/304038382).
  • Dodano profilerOutput do danych wyjściowych JSON, aby ułatwić korzystanie z narzędzi do śledzenia profili (np. perfetto, śledzenie metod). (I05ddd, b/332604449)
  • Dodano tag zasilania do testu porównawczego konfiguracji Perfetto. Obejmuje to np. punkty śledzenia blokady wybudzania. (Icfe44, b/286551983)
  • Dodano argument inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, który można ustawić na wartość false, aby uniknąć pomijania śladów metod, gdy oczekiwany czas trwania może spowodować błąd ANR. Zdecydowanie zalecamy unikanie tego w przypadku uruchomień CI.
  • Dodano eksperymentalny argument inst androidx.benchmark.profiling.perfCompare.enable. Ustaw go na wartość „true”, aby uruchomić porównanie czasu między fazami pomiaru i profilowania. Przydatne np. do oceny narzutu związanego ze śledzeniem metod. (I61fb4, b/329146942)

Zmiany w interfejsie API

  • Zmiana TraceSectionMetric.Mode na klasę zamkniętą, aby umożliwić przyszłą rozbudowę bez przerywania wyczerpujących instrukcji when (I71f7b)
  • Dodano TraceSectionMetric.Mode.Average.Count oraz zmieniono kolejność argumentów, tak aby częściej używany argument (tryb) znajdował się wcześniej na liście argumentów, co zmniejsza potrzebę określania nazw parametrów. (Ibf0b0, b/315830077, b/322167531)
  • Zmiana nazwy Metric.getResult na getMeasurements w celu dopasowania do typu zwracanego (I42595)

Poprawki błędów

  • Rozwiązanie problemu, aby zapewnić, że testy porównawcze będą używać wygenerowanych profili podstawowych, gdy opcja automaticGenerationDuringBuild jest wyłączona (Ic144f, b/333024280)
  • Naprawiono BaselineProfile zastępowanie właściwości wtyczki Gradle, aby umożliwić generowanie profilu podstawowego i testowanie porównawcze podczas dostosowywania nonMinified lub typu kompilacji testu porównawczego. (Ib8f05, b/324837887)
  • W przypadku makrobenchmarków ślady metody są zapisywane w pamięci, dzięki czemu powinny być w pełni rejestrowane i prawidłowe nawet na wolniejszych urządzeniach. (I6349a, b/329904950)
  • Włącz blokowanie rozpoczęcia w rekordzie śladu Perfetto, aby zmniejszyć ryzyko utraty danych na początku śladu. Obsługiwane tylko w przypadku interfejsu API na poziomie 33 lub wyższym. (Ie6e41, b/310760059)
  • Dodano ostrzeżenie o używaniu narzędzia Android Test Orchestrator w modułach testów porównawczych, ponieważ powoduje to wielokrotne zastępowanie plików JSON z wynikami poszczególnych modułów. (Ia1af6, b/286899049)
  • Wymuszanie separatorów tysięcy w postaci przecinka „,” w celu zapewnienia spójności danych wyjściowych w Studio z pominięciem ustawień regionalnych urządzenia (I3e921, b/313496656)
  • TraceSectionMetric obsługuje teraz wycinki utworzone za pomocą Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Dodano etykiety log.w / exception do wszystkich błędów wykrywania uruchamiania. Nie zmienia to obecnego działania (niektóre błędy są zgłaszane, a inne nie są wykrywane), tylko sprawia, że jest ono bardziej zrozumiałe. Zwykle są to te, które Log.w() i nie zgłaszają danych o uruchamianiu. W takich przypadkach brakuje zdarzeń innych niż klatki, a po wykryciu uruchomienia zgłaszane są wyjątki, z wyjątkiem informacji o czasie klatki (z wycinków interfejsu/wątku renderowania). (Id240f, b/329145809)
  • Przed uruchomieniem testu Macrobenchmark anuluj zadania dexopt w tle, aby ograniczyć zakłócenia. (I989ed)
  • Dodaliśmy pomiar frameCount do FrameTimingMetric, aby ułatwić wykrywanie sytuacji, w których pomiary zmieniają się z powodu zmiany liczby wygenerowanych klatek (dodano nowe animacje, naprawiono problemy z unieważnianiem). (I1e5aa)
  • Wyjaśniliśmy, że frameOverrunMs to preferowane dane do śledzenia, gdy są dostępne w dokumentach, i dlaczego. (I18749, b/329478323)

Wersja 1.3.0-alpha02

20 marca 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-alpha02 Wersja 1.3.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • Eksperymentalna obsługa R8 w mikrotestach za pomocą wbudowanych reguł ProGuard. Pamiętaj, że ta funkcja jest eksperymentalna i wymaga AGP 8.3 do minimalizacji testów modułu biblioteki. Aby włączyć w module testu porównawczego minifikację lub optymalizację R8, użyj tych elementów w pliku build.gradle. W zależności od obciążenia powinno to znacznie zwiększyć wydajność. (I738a3, b/184378053)

    android {
        buildTypes.release.androidTest.enableMinification = true
    }
    

Poprawki błędów

  • Poprawiono ostrzeżenie dotyczące śledzenia metod, aby znajdowało się w osobnym wierszu od danych wyjściowych mikrobenczmarku. (I0455c, b/328308833)

Wersja 1.3.0-alpha01

21 lutego 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.3.0-alpha01 Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Zmiana nazw MicrobenchmarkConfig parametrów logicznych, aby uniknąć niepotrzebnego słowa „should” (Ia8f00, b/303387299)
  • Dodano BenchmarkRule.measureRepeatedOnMainThread, aby testy porównawcze głównego wątku (np. te, które dotyczą interfejsów Views lub Compose) nie powodowały błędów ANR, zwłaszcza w przypadku dużych zestawów w CI. (I5c86d)
  • Dodano FrameTimingGfxInfoMetric, eksperymentalną alternatywną implementację FrameTimingMetric z pomiarami pochodzącymi bezpośrednio z platformy, a nie wyodrębnionymi ze śladu Perfetto. (I457cb, b/322232828)
  • Dodaliśmy możliwość zrzucania profilu ART podczas poszczególnych iteracji warmUp. (I17923)
  • Kilka zmian w interfejsie API TraceSectionMetric:
    • Dodaj Mode.Min, Mode.Max
    • Dodawanie argumentu etykiety w celu zastąpienia nazwy sekcji etykietą wskaźnika
    • Dodano nazwę trybu do danych wyjściowych, aby wyjaśnić znaczenie wskaźnika
    • Zmiana domyślnego ustawienia na sumę, ponieważ ten wskaźnik jest najczęściej używany w przypadku powtarzających się zdarzeń. Pamiętaj o tej zmianie w przypadku używania CI, ponieważ może ona powodować nieciągłości lub błędy w parsowaniu. (Ic1e82, b/301892382, b/301955938)

Poprawki błędów

  • Ulepszony komunikat o błędzie w przypadku wtyczki Gradle profilu podstawowego, gdy określone urządzenie zarządzane nie istnieje (Idea2b, b/313803289)
  • Poprawka dotycząca uwzględniania profili bazowych biblioteki w pliku AAR przed AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • Naprawiono adres URL danych wyjściowych profilu podstawowego i profilu uruchamiania na końcu zadania generowania (I802e5, b/313976958)
  • Dostosowaliśmy limity czasu źródła danych, aby spróbować rozwiązać problem java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Dodaj 2 argumenty instrumentacji, aby zastąpić zachowanie związane z usuwaniem cieniowania i obejść awarie podczas testowania aplikacji bez ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : można użyć, aby pominąć usuwanie wszystkich shaderów (w tym tych, które są usuwane podczas uruchamiania StartupMode.Cold), zwłaszcza podczas testowania aplikacji, które nie używają jeszcze profileinstaller w wersji 1.3.
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : może być używany do tolerowania błędów podczas próby usunięcia shaderów, np. podczas testowania porównawczego aplikacji bez profileinstallera w wersji 1.3 (I4f573).
  • Pomijanie śledzenia metod w wątku interfejsu, gdy ma ono trwać dłużej niż kilka sekund, oraz czyszczenie śladów metod podczas zgłaszania wyjątku. (I6e768)
  • Wywołuje wyjątek, gdy nazwy plików są dłuższe niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab)
  • Rozwiązuje problem, który powodował, że nieukończone klatki na początku i na końcu śladu mogły być ze sobą łączone, co powodowało nieprawidłowe raportowanie jako pojedynczej, bardzo długiej klatki. (I39353, b/322232828)
  • Używaj --skip verification w przypadku interfejsu API na poziomie 30 lub wyższym podczas ponownej instalacji pakietu na interfejsie API na poziomie 30–33, aby wyczyścić profile ART w kompilacjach użytkownika. Pomaga to ominąć ostrzeżenia Play Protect, które powodują awarie na niektórych urządzeniach. (Ic9e36)
  • Używaj am force-stop, aby zamykać aplikacje, które nie są aplikacjami systemowymi, takimi jak interfejs systemu czy program uruchamiający. (I5e028)
  • Testy porównawcze makro czekają teraz na 1 second, aż aplikacja docelowa wyczyści profil ART (wcześniej czekały na 500 ms). (I85a50, b/316082056)
  • Ulepszyliśmy błąd FrameTimingMetric, gdy nie są generowane klatki, i zawsze wyświetlamy link do śledzenia, gdy nie uda się przeanalizować danych, aby ułatwić diagnozowanie problemu. (I956b9)
  • Naprawiliśmy awarię w FrameTimingMetric, która występowała podczas analizowania identyfikatora ramki, zwłaszcza na niektórych urządzeniach OEM. (Ia24bc, b/303823815, b/306235276)
  • Złagodziliśmy rygorystyczność sprawdzania w FrameMetrics i dodaliśmy więcej szczegółów do komunikatów o błędach. (Iadede)

Wersja 1.2

Wersja 1.2.4

17 kwietnia 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.2.4 Wersja 1.2.4 zawiera te zmiany.

Poprawki błędów

  • Naprawia problem z nieustawianiem srcset profilu podstawowego w wariantach testu porównawczego. Rozwiązuje też problem z automaticGenerationDuringBuild w bibliotekach, który powodował cykliczną zależność. (I28ab7, b/333024280)
  • Używaj am force-stop, aby zamykać aplikacje, które nie są aplikacjami systemowymi, takimi jak interfejs systemu czy program uruchamiający. Rozwiązuje to problem z awarią testów porównawczych StartupMode.COLD z powodu komunikatu „Package $package must not be running prior to cold start!” (Pakiet $package nie może być uruchomiony przed uruchomieniem „na zimno”), ponieważ proces nie został w pełni zakończony. (I5e028)

Wersja 1.2.3

24 stycznia 2024 r.

Publikacja androidx.benchmark:benchmark-*:1.2.3 Wersja 1.2.3 zawiera te zmiany.

Poprawki błędów

  • Usunięto wyjątek z wtyczki Gradle profilu podstawowego, gdy wersja AGP to 8.3.0 lub nowsza.
  • Poprawka dotycząca uwzględniania profili bazowych biblioteki w pliku AAR przed AGP 8.3.0-alpha15.

Wersja 1.2.2

1 grudnia 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.2 Wersja 1.2.2 zawiera te zatwierdzenia.

Profile podstawowe

Wersja 1.2.1

15 listopada 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.1 Wersja 1.2.1 zawiera te zatwierdzenia.

Nowe funkcje

  • Ulepszony komunikat o błędzie, gdy użytkownik wyłączy warianty testowe (b/307478189)
  • Dodano właściwości obsługujące integrację testu AS (b/309805233), (b/309116324)

Wersja 1.2.0

18 października 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0 Wersja 1.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.1.0

Profile podstawowe

  • Nowa wtyczka Gradle do profilu podstawowego automatyzuje przechwytywanie i uwzględnianie profili podstawowych w procesie testowania i kompilacji.
  • BaselineProfileRule.collect jest już stabilną, uproszczoną wersją poprzedniego eksperymentalnego interfejsu API BaselineProfileRule.collectBaselineProfile.
    • Wystarczy, że podasz packageName i skierujesz użytkowników do swojej aplikacji.
  • W przypadku bibliotek generujących profile podstawowe możesz teraz filtrować wygenerowane reguły w kodzie (argument BaselineProfileRule.collect) lub jeszcze prościej – w pluginie Gradle.
  • Poprawki

Macrobenchmark

  • Kompilacja
    • Macrobenchmark prawidłowo resetuje teraz stan kompilacji dla każdej kompilacji. Wymaga to ponownej instalacji pliku APK przed Androidem 14, dlatego jeśli chcesz zachować stan (np. logowanie użytkownika) w mierzonych danych, zdecydowanie zalecamy przeprowadzanie testów porównawczych na Androidzie 14 lub nowszym.
    • Możesz też obejść to ograniczenie, kontrolując kompilację aplikacji oddzielnie i pomijając kompilację za pomocą CompilationMode.Ignore() lub argumentu instrumentacji.
  • Argumenty narzędzi

    • Obsługa argumentu instrumentacji androidx.benchmark.dryRunMode.enable (dostępnego już w mikrobenchmarku) umożliwiającego szybsze uruchamianie weryfikacji (np. podczas tworzenia benchmarku lub przed przesłaniem)
    • Obsługa androidx.benchmark.profiling.mode=StackSamplingMethodTracing.
    • Dodano androidx.benchmark.enabledRules, aby umożliwić filtrowanie w czasie działania testów profilu bazowego i reguł makrobenchmarku.
    • Dodano argument androidx.benchmark.perfettoSdkTracing.enable, aby włączyć śledzenie za pomocą narzędzia tracing-perfetto, np. śledzenie ponownego komponowania. Pamiętaj, że w przypadku użycia z StartupMode.COLD czas będzie znacznie dłuższy, ponieważ biblioteka śledzenia jest wczytywana i włączana podczas uruchamiania aplikacji.
  • Wymagania

    • Biblioteka Macrobenchmark wymaga teraz wersji ProfileInstaller 1.3.0 lub nowszej w aplikacji docelowej, aby włączyć przechwytywanie i resetowanie profilu oraz czyszczenie pamięci podręcznej shaderów.
  • Nowe eksperymentalne interfejsy API wskaźników

    • Dodano eksperymentalną funkcję TraceSectionMetric, która umożliwia wyodrębnianie prostych danych o czasie z bloków trace("") {} w aplikacji lub TraceMetric, aby w pełni wykorzystać możliwości zapytań Perfetto TraceProcessor.
    • Dodano eksperymentalną funkcję PowerMetric do rejestrowania informacji o zużyciu energii
    • Dodano eksperymentalną funkcję MemoryCountersMetric do zliczania błędów strony.
    • Dodano eksperymentalny interfejs API PerfettoTraceProcessor, który jest używany wewnętrznie do wyodrębniania danych z logów systemowych (czyli logów Perfetto).
  • Poprawki

    • Rozwiązaliśmy problem z awariami podczas instalowania lub wyodrębniania profili z aplikacji zainstalowanej z wielu plików APK (np. z pakietu aplikacji).
    • Naprawiono FrameTimingMetric ignorowanie klatek z niespójnymi identyfikatorami (zwykle klatek podczas falowania na API 31+) (I747d2, b/279088460).
    • Naprawiono błędy analizy w przypadku śladów o rozmiarze powyżej 64 MB (Ief831, b/269949822)
    • Wyjaśnienie błędów, które występują, gdy obraz systemu operacyjnego urządzenia (zwłaszcza emulatora) nie jest prawidłowo skonfigurowany do śledzenia lub kompilacji
    • Pomijanie sprawdzania poziomu baterii w przypadku urządzeń bez baterii (mikro i makro)
    • Ulepszone dane wyjściowe plików, z bardziej przejrzystymi błędami w przypadku nieprawidłowych katalogów wyjściowych i bezpieczniejszymi ustawieniami domyślnymi.
    • Zwiększona stabilność StartupMode.COLD dzięki regularnemu usuwaniu pamięci podręcznej shadera (dostępna też w MacrobenchmarkScope.dropShaderCache).
    • Naprawiono zastępczy tryb pasywny dla urządzenia startActivityAndWait.

Mikrotesty

  • Funkcje
    • Profilowanie zostało przeniesione do osobnej fazy, po innych danych, dzięki czemu jedno uruchomienie testu może wyświetlać zarówno dokładne wyniki pomiaru czasu, jak i wyniki profilowania.
  • Eksperymentalne interfejsy API
    • Dodano eksperymentalny interfejs API MicrobenchmarkConfig do definiowania niestandardowych danych i konfigurowania śledzenia oraz profilowania. Może służyć do rejestrowania śladów metod lub punktów śledzenia (pamiętaj jednak o obciążeniu związanym ze śledzeniem).
    • Dodano eksperymentalne interfejsy API do sterowania BenchmarkState oddzielnie od BenchmarkRule bez JUnit.
    • Dodaliśmy eksperymentalny rekord PerfettoTrace, który umożliwia rejestrowanie śladów Perfetto z niestandardową konfiguracją, niezależnie od interfejsów API testów porównawczych.
  • Poprawki
    • Obejście problemu z brakiem początkowych białych znaków w wyniku testu porównawczego w Androidzie Studio.
    • Rozwiązaliśmy problem polegający na tym, że ostrzeżenia mogły nie być drukowane w wynikach testu porównawczego Android Studio.
    • Naprawiono SampledProfiling awarię na Androidzie 13 (API 33) i nowszych wersjach.
    • Znacznie lepsza wydajność dryRunMode dzięki pomijaniu IsolationActivity i śledzenia Perfetto (nawet 10-krotnie szybszy tryb próbny w starszych wersjach systemu operacyjnego).

Wersja 1.2.0-rc02

6 października 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-rc02 Wersja 1.2.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Poprawiono dane wyjściowe pliku testu porównawczego, aby nie przerywać już BaselineProfilekopiowania plików wtyczek. Pliki zostały wygenerowane i skopiowane z urządzenia, ale zmieniono ich nazwy, przez co wtyczka Gradle ich nie widziała. (I8dbcc, b/303034735, b/296453339)
  • Wyjaśniono komunikaty o błędach wczytywania tracing-perfetto podczas wstrzykiwania z modułu testu porównawczego do aplikacji docelowej.

Wersja 1.2.0-rc01

20 września 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-rc01 Wersja 1.2.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Gdy w teście porównawczym nie uda się zainicjować śledzenia za pomocą pakietu SDK Perfetto, zgłaszany jest wyjątek (z instrukcjami dotyczącymi rozwiązania problemu). (I6c878, b/286228781)
  • Naprawiono błąd OOM podczas konwertowania śladu metody ART na format Perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) Wyjaśniono etykietę śledzenia metody w przypadku linkowania w wyniku testu w Studio i poprawiono nazwy plików śledzenia metody, aby były unikalne na urządzeniu lub hoście, dzięki czemu nie będą zastępowane, gdy uruchomionych jest więcej niż 1 test porównawczy. (I08e65, b/285912360)
  • Zapewnia, że urządzenie jest aktywne podczas rejestrowania profilu podstawowego. (I503fc)

Wersja 1.2.0-beta05

30 sierpnia 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-beta05 Wersja 1.2.0-beta05 zawiera te zatwierdzenia.

Nowe funkcje

  • Wtyczka Gradle profili bazowych obsługuje teraz wtyczkę Androida do obsługi Gradle w wersji 8.3. (aosp/2715214)

Wersja 1.2.0-beta04

23 sierpnia 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-beta04 Wersja 1.2.0-beta04 zawiera te zmiany.

Nowe funkcje

  • Wtyczka Gradle do profili bazowych obsługuje teraz wtyczkę Androida do obsługi Gradle w wersji 8.3. (aosp/2715214)

Poprawki błędów

  • Naprawianie błędów zapisu, przenoszenia i pobierania plików (zwłaszcza z testów parametryzowanych) przez dalsze oczyszczanie nazw plików wyjściowych i unikanie znaków „=” i „:” w nazwach plików wyjściowych. (I759d8)

Wersja 1.2.0-beta03

9 sierpnia 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-beta03 Wersja 1.2.0-beta03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano argument do filtrowania TraceSectionMetric tylko do pakietu docelowego, domyślnie włączony (Ia219b, b/292208786)

Poprawki błędów

  • Zmieniliśmy nazwę argumentu instrumentacji fullTracing.enable na perfettoSdkTracing.enable, aby zachować spójność z nazwą artefaktu i innymi odniesieniami. fullTracing.enable nadal będzie działać jako opcja rezerwowa. (I7cc00)
  • Wewnętrzne punkty śledzenia w bibliotece testów porównawczych (w tym śledzenie pętli i faz mikropomiarów) będą teraz widoczne w przeglądarce śladów systemowych w Studio i będą zagnieżdżone w odpowiednim procesie w Perfetto. (I6b2e7, b/293510459)
  • Usunięto błąd makrobenchmarku NOT-PROFILEABLE na API w wersji 31 lub nowszej i pomijano sprawdzanie możliwości profilowania na urządzeniach z dostępem do roota w wersjach eng/userdebug. (I2abac, b/291722507)
  • W przypadku optymalizacji układu Dex reguły profilu uruchamiania są teraz traktowane jako reguły profilu podstawowego. (aosp/2684246, b/293889189)

Wersja 1.2.0-beta02

26 lipca 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-beta02 Wersja 1.2.0-beta02 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano eksperymentalne interfejsy API do obsługi niestandardowych danych i konfiguracji mikropomiarów (np. profilera i śledzenia). (I86101, b/291820856)

Poprawki błędów

  • Zgłaszanie błędu w testach porównawczych makro, gdy system operacyjny jest nieprawidłowo skonfigurowany do śledzenia, co zostało niedawno naprawione w emulatorach API 26/28 ARM64. (I0a328, b/282191686)
  • Dodano szczegóły dotyczące błędu resetowania kompilacji, aby zasugerować aktualizację emulatora, ponieważ w niektórych emulatorach ten problem został niedawno rozwiązany. (I8c815, b/282191686)
  • Ustaw androidx.test.uiautomator:uiautomator:2.2.0 jako zależność api zamiast implementation. (I1981e)

Wersja 1.2.0-beta01

18 lipca 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-beta01 Wersja 1.2.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono problem z czasowym pomijaniem ostrzeżeń w wynikach testu porównawczego w Studio oraz problem z niewyświetlaniem w Studio początkowych białych znaków w wynikach testu porównawczego (Ia61d0, b/227205461, b/286306579, b/285912360).
  • Naprawiono komentarz dotyczący FrameTimingMetric. Rodzaj danych ma nazwę frameDurationCpuMs. (Ib097f, b/288830934).

Wersja 1.2.0-alpha16

21 czerwca 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha16 Wersja 1.2.0-alpha16 zawiera te zmiany.

Zmiany w interfejsie API

  • Interfejs API BaselineProfileRule.collectBaselineProfile() został zmieniony na BaselineProfileRule.collect(). (I4b665)

Poprawki błędów

  • Obsługa testów porównawczych na poziomie makro w przypadku androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Profilowanie mikrobenczmarków zostało przeniesione do osobnej fazy, więc odbywa się sekwencyjnie po pomiarze, a nie zamiast niego. MethodTracing Sekcje śledzenia są teraz również uwzględniane w zarejestrowanym śledzeniu Perfetto, jeśli są dostępne. (I9f657, b/285014599)
  • Dodaj pomiar liczby do TraceSectionMetric za pomocą Mode.Sum. (Ic121a, b/264398606)

Wersja 1.2.0-alpha15

7 czerwca 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha15 Wersja 1.2.0-alpha15 zawiera te zmiany.

Nowe funkcje

  • Dodano eksperymentalną funkcję MemoryUsageMetric do śledzenia wykorzystania pamięci przez aplikację docelową. (I56453, b/133147125, b/281749311)
  • Dodanie obsługi w pełni niestandardowych konfiguracji Perfetto za pomocą PerfettoTrace.record (If9d75, b/280460183)
  • Dodano właściwość umożliwiającą pominięcie generowania profilu podstawowego. Użycie: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

Zmiany w interfejsie API

  • Interfejs collectBaselineProfile API zawsze generuje stabilne profile podstawowe. Interfejs API collectStableBaselineProfile został usunięty. Zamiast niego należy używać interfejsu collectBaselineProfile. (I17262, b/281078707)
  • Zmieniliśmy argument filterPredicate funkcji BaselineProfileRule na wartość niezerową z równoważną wartością domyślną, aby domyślne działanie filtra było lepiej widoczne w dokumentacji. (I3816e)

Poprawki błędów

  • Wyłącz śledzenie IsolationActivity i Perfetto w dryRunMode, aby znacznie zwiększyć wydajność, ponieważ te funkcje zajmowały większość czasu działania. (Ie4f7d)
  • Obsługa próbkowania stosu wywołań w testach Macrobenchmark przy użyciu argumentów testu instrumentacji androidx.benchmark.profiling.mode=StackSamplingandroidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Naprawiono błąd powodujący awarię podczas upuszczania shaderów w Androidzie U (API 34) oraz w emulatorach. (I031ca, b/274314544)

Wersja 1.2.0-alpha14

3 maja 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha14 Wersja 1.2.0-alpha14 zawiera te zmiany.

Poprawki błędów

  • Naprawianie problemu z ignorowaniem przez FrameTimingMetric klatek z niespójnymi identyfikatorami klatek. Powodowało to, że niektóre animacje w najnowszych wersjach platformy (API 31+) ignorowały wiele klatek podczas animacji RenderThread (np. podczas efektu fali). (I747d2, b/279088460)
  • Poprawiliśmy analizowanie logów czasu większych niż 64 MB. (Ief831, b/269949822)
  • Naprawiliśmy błąd generowania profilu podstawowego na Androidzie U, który występował z powodu innego wyniku polecenia pm dump-profiles. (Id1392, b/277645214)
  • Poprawiono skrypt blokowania zegara GPU, aby prawidłowo porównywał ciągi znaków (I53e54, b/213935715)

Wersja 1.2.0-alpha13

5 kwietnia 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha13 Wersja 1.2.0-alpha13 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano parametr typu profilu podczas generowania profili podstawowych, aby obsługiwać nadchodzącą funkcję profilu uruchamiania (Ie20d7, b/275093123)
  • Dodano nowy eksperymentalny interfejs API TraceMetric do definiowania w pełni niestandardowych wskaźników na podstawie zawartości śladu Perfetto. (I4ce31, b/219851406)
  • Dodaj wskaźnik eksperymentalny, aby określić liczbę błędów strony podczas testu porównawczego. (I48db0)

Wersja 1.2.0-alpha12

22 marca 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha12 Wersja 1.2.0-alpha12 zawiera te zmiany.

Nowe funkcje

  • Nowa wtyczka Gradle do profilu podstawowego została udostępniona w wersji alfa, co ułatwia generowanie profilu podstawowego i upraszcza przepływ pracy programisty.

Zmiany w interfejsie API

  • Usunęliśmy obsługę śledzenia Perfetto w przypadku interfejsów API w wersjach 21 i 22, co obejmuje zarówno mikrobenczmarki, jak i eksperymentalne interfejsy API PerfettoTrace. W poprzedniej wersji połączenia UiAutomation były na niektórych urządzeniach niestabilne. (I78e8c)
  • Dodaliśmy publiczny eksperymentalny interfejs API dla PerfettoTraceProcessor, który umożliwia analizowanie treści śladu. To krok w kierunku w pełni niestandardowych danych opartych na danych śledzenia Perfetto. (I2659e, b/219851406)

Wersja 1.2.0-alpha11

8 marca 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha11 Wersja 1.2.0-alpha11 zawiera te zmiany.

Poprawki błędów

  • Naprawiono awarie w MacrobenchmarkRuleBaselineProfileRule podczas ponownej instalacji lub wyodrębniania profili z pakietu aplikacji zawierającego wiele plików APK. (I0d8c8, b/270587281)

Wersja 1.2.0-alpha10

22 lutego 2023 roku

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha10 Wersja 1.2.0-alpha10 zawiera te zmiany.

Nowe funkcje

  • W przypadku Androida 14 i nowszych wersji Macrobenchmark nie instaluje już ponownie aplikacji docelowych, aby zresetować stan kompilacji, dzięki nowej funkcji platformy. Wcześniej konieczne było zrootowanie urządzenia lub usunięcie całego stanu aplikacji (np. loginu użytkownika) przed każdym uruchomieniem testu porównawczego. (I9b08c, b/249143766)

Poprawki błędów

  • Poprawka DryRunMode, aby nie powodować już awarii w przypadku pustego profilu z powodu pomijania kompilacji. Zamiast tego wykonuje jedną iterację i wyodrębnia profil, aby mieć pewność, że coś zostało zarejestrowane. (I2f05d, b/266403227)
  • Naprawiono błąd PowerMetric występujący podczas sprawdzania obecności powerstats na starszych poziomach interfejsu API. (5faaf9, b/268253898)

Wersja 1.2.0-alpha09

11 stycznia 2023 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha09 Wersja 1.2.0-alpha09 zawiera te zmiany.

Poprawki błędów

  • Włączono przekazywanie argumentu instrumentacji None do androidx.benchmark.enabledRules, aby wyłączyć wszystkie testy porównawcze i generowanie profilu podstawowego. (I3d7fd, b/258671856)
  • Naprawiono przechwytywanie PerfettoTrace w modułach aplikacji (czyli w plikach APK testów, które nie instrumentują się samodzielnie) (I12cfc).
  • Poprawiono kolejność argumentów polecenia adb pull w przypadku stałego profilu podstawowego w danych wyjściowych Studio (I958d1, b/261781624)
  • Emulator Arm API 33 jest teraz prawidłowo rozpoznawany podczas próby uruchomienia testu porównawczego makro i prawidłowo wyświetla ostrzeżenie. (69133b,b/262209591)
  • Pomijanie sprawdzania poziomu baterii na urządzeniach bez baterii w bibliotece Macrobenchmark (fe4114, b/232448937)

Wersja 1.2.0-alpha08

7 grudnia 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha08 Wersja 1.2.0-alpha08 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodaliśmy eksperymentalne nowe interfejsy API PerfettoTrace.record {}PerfettoTraceRule, które umożliwiają rejestrowanie śladów Perfetto (znanych też jako ślady systemowe) w ramach testu, aby sprawdzać zachowanie i wydajność testu. (I3ba16)
  • BaselineProfileRule akceptuje teraz predykat filtra zamiast listy prefiksów pakietów. Dzięki temu test ma pełną kontrolę nad filtrowaniem. (I93240)
  • Dodano eksperymentalny interfejs API BaselineProfileRule.collectStableBaselineProfile, który czeka, aż profil podstawowy ustabilizuje się przez N iteracji. (I923f3)
  • Dodaliśmy możliwość określania prefiksu nazwy pliku wyjściowego podczas generowania profili podstawowych za pomocą BaselineProfileRule. (I7b59f, b/260318655)

Poprawki błędów

  • Poprawiono bezpieczeństwo zapisu plików wyjściowych, co powinno zapobiegać cichemu niezapisywaniu lub niedopisywaniu plików wyjściowych, zwłaszcza w przypadku interfejsów API w wersji 21 i 22. (If8c44, b/227510293)
  • Popraw dane wyjściowe śledzenia simpleperf, aby utworzyć i prawidłowo umieścić plik. Powinno to również rozwiązać problemy, w których gradle nie może pobrać pliku. (I12a1c, b/259424099)
  • Ulepszanie komunikatu o błędzie narzędzia profileinstaller wyświetlanego, gdy jest ono zbyt stare. Teraz zamiast informacji o braku obsługi wyświetla się komunikat o konieczności zaktualizowania wersji instalatora profili (1.2.1) w celu pomiaru profili podstawowych na interfejsach API 31–33. (Ia517f, b/253519888)
  • Naprawiono kilka błędów poleceń powłoki w komunikacie o błędzie Print needed API <=23, w tym nieudaną konfigurację pliku binarnego przechwytywania perfetto i błędy przechwytywania śladu (Ib6b87, b/258863685).
  • Automatyczne sortowanie wygenerowanych reguł profilu w celu zminimalizowania liczby zmian w miarę upływu czasu (podczas sprawdzania reguł profilu w systemie kontroli wersji). (Ie2509)
  • Naprawiono awarię na urządzeniach bez roota z Androidem w wersji starszej niż 13 (API 33) z komunikatem Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

Znane problemy - MacrobenchmarkScope.dropShaderCache() może ulec awarii z powodu braku rejestru transmisji w manifestie instalatora profilu, który nie został jeszcze opublikowany. (I5c728, b/258619948) Aby obejść ten problem w profileinstaller:1.3.0-alpha02, dodaj do pliku AndroidManifest.xml aplikacji (nie testu porównawczego) ten kod:

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

Wersja 1.2.0-alpha07

9 listopada 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha07 Wersja 1.2.0-alpha07 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodaje interfejs PowerMetric API do pomiaru energii i mocy w testach porównawczych Macrobenchmark. (Ife601, b/220183779)
  • Poprawiono MacrobenchmarkScope.dropShaderCache(), aby faktycznie usuwać pamięć podręczną shadera. Spowoduje to usunięcie z benchmarków StartupMode.COLD szumu o wartości około 20 ms, ponieważ shadery są teraz konsekwentnie czyszczone w każdej iteracji. Wcześniej Partialkompilacja z użyciem iteracji rozgrzewających podawała nieprawidłowo szybkie wyniki, ponieważ podczas rozgrzewki częściej dochodziło do buforowania cieniowania. Ta poprawka wymaga urządzenia z dostępem do roota lub używania profileinstaller:1.3.0-alpha02 w aplikacji docelowej. Informacje o zmianach w interfejsie API biblioteki ProfileInstaller znajdziesz na stronie ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • Dodaliśmy TraceSectionMode("label", Mode.Sum), co umożliwia pomiar łącznego czasu spędzonego w wielu sekcjach śladu z tą samą etykietą. Na przykład TraceSectionMetric("inflate", Mode.Sum) będzie raportować dane inflateMs dotyczące łącznego czasu spędzonego na inflacji w ramach testu porównawczego. Usunęliśmy też wymaganie dotyczące interfejsu API w wersji 29, ponieważ TraceSectionMetric działa z androidx.tracing.Trace na niższych poziomach interfejsu API, z użyciem forceEnableAppTracing w aplikacji docelowej. (Id7b68, b/231455742)

Poprawki błędów

  • Zwiększono bezpieczeństwo wszystkich wewnętrznych poleceń powłoki przez weryfikację wszystkich danych wyjściowych i błędów. (I5984d, b/255402908, b/253094958)
  • Określanie urządzenia w profilu podstawowym za pomocą polecenia adb pull, aby w przypadku połączenia z wieloma urządzeniami (maksymalnie 1 emulatorem) można było po prostu skopiować polecenie pobierania (I6ac6c, b/223359380)
  • Dodaj błąd, jeśli testowy plik APK makrobenchmarku nie jest skonfigurowany jako samodzielnie instrumentujący. Ten błąd uniemożliwia przeprowadzanie testów porównawczych w procesie aplikacji docelowej. W tym procesie makrotesty nie mogłyby kompilować, zamykać ani uruchamiać aplikacji na zimno ani kontrolować własnych uprawnień (I4279b).
  • Rozwiązaliśmy problem w measureRepeated(), który powodował, że StartupMode.COLD nie kończył procesu docelowego po setupBlock. Teraz setupBlock interakcja z aplikacją nie spowoduje uruchomienia procesu aplikacji i nieprawidłowego pomiaru uruchomienia „na zimno”. (I8ebb7)

Wersja 1.2.0-alpha06

24 października 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha06 Wersja 1.2.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • BaselineProfileRule nie wymaga już uprawnień roota na Androidzie 13 (API 33) i nie ma już charakteru eksperymentalnego. (Ie0a7d, b/250083467, b/253094958)
    • Ta zmiana naprawia też sposób zapisywania profili z aplikacji na dysku na urządzeniach bez roota, ale wymaga zaktualizowania zależności profileinstaller aplikacji docelowej.
    • Aby korzystać z BaselineProfileRule lub CompilationMode.Partial(warmupIterations) na urządzeniu bez roota, musisz też zaktualizować aplikację docelową, aby używała androidx.profileinstaller.profileinstaller:1.3.0-alpha01. Umożliwia to prawidłowe zapisanie profilu na dysku, aby można go było skompilować lub wyodrębnić.

Poprawki błędów

  • Naprawiono SampledProfiling awarię na API w wersji 33 lub nowszej. (I40743, b/236109374)

Wersja 1.2.0-alpha05

5 października 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha05 Wersja 1.2.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Naprawiono podział klatek w przeglądarce śladów systemowych Studio w przypadku śladów przechwyconych w ramach testu porównawczego (I3f3ae, b/239677443)
  • Poprawka FrameTimingMetric, aby na liście FrameOverrun wymagany był interfejs API 31 zamiast 29 (I716dd, b/220702554)
  • Ustaw iterację w BaselineProfileRule i wyraźnie zgłoś błąd, jeśli pakiet docelowy nie jest zainstalowany (zostało to już zrobione w przypadku MacrobenchmarkRule). (Ic09a3, b/227991471)

Wersja 1.2.0-alpha04

21 września 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha04 Wersja 1.2.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Dodanie do makrobenchmarku argumentu dryRunMode.enable instrumentacji (dostępnego już w mikrobenchmarku) w celu przyspieszenia lokalnego procesu programowania i weryfikacji automatyzacji aplikacji (np. przed przesłaniem). Spowoduje to zastąpienie iteracji wartością 1, pominięcie kompilacji, pominięcie wszystkich błędów konfiguracji i wyłączenie danych wyjściowych pliku JSON pomiaru. (Ib51b4, b/175149857)

    W wierszu poleceń Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    W pliku build.gradle:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

Poprawki błędów

  • Naprawiono StartupTimingMetric, aby nie wymagać już uruchamiania mierzonych aktywności za pomocą MacrobenchmarkScope.startActivityAndWait(). Oznacza to, że wskaźnik może rejestrować uruchomienia np. z poziomu powiadomień, Context.startActivity(), nawigacji opartej na aktywności w aplikacji lub poleceń powłoki. (Ia2de6, b/245414235)
  • Naprawiliśmy błąd, który powodował, że startActivityAndWait przekraczał limit czasu podczas oczekiwania na zakończenie uruchamiania na emulatorach. Zmniejszyliśmy rygorystyczność wykrywania klatek. (Ibe2c6, b/244594339, b/228946895)

Wersja 1.2.0-alpha03

7 września 2022 roku

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha03 Wersja 1.2.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • Dodano eksperymentalne interfejsy API do używania BenchmarkState niezależnie od BenchmarkRule / JUnit4. (Id478f, b/228489614)

Poprawki błędów

  • Dodaliśmy wartość zastępczą Leanback dla startActivityAndWait. (01ed77, b/242899915)

Wersja 1.2.0-alpha02

24 sierpnia 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha02 Wersja 1.2.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • Domyślnie am force stop dla MacrobenchmarkScope.killProcess(), nawet w przypadku zrootowanych urządzeń, z wyjątkiem generowania profilu podstawowego. Można to zastąpić opcjonalnym argumentem logicznym. (02cce9, b/241214097)

Poprawki błędów

  • Obsługa generowania profilu podstawowego dla aplikacji systemowych. (I900b8, b/241214097)
  • Obsługa sprawdzania danych o zużyciu energii ODPM na urządzeniach bez roota. (a38c78, b/229623230)

Wersja 1.2.0-alpha01

27 lipca 2022 roku

Publikacja androidx.benchmark:benchmark-*:1.2.0-alpha01 Wersja 1.2.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Nowy komponent tracing-perfetto-common, który umożliwia narzędziom włączanie śledzenia za pomocą pakietu Perfetto SDK w aplikacji, która go udostępnia (I2cc7f).
  • Dodano argument androidx.benchmark.enabledRules instrumentation, aby umożliwić filtrowanie uruchomień makrobenchmarków tylko do benchmarków lub tylko do generowania profilu podstawowego. Przekaż „Macrobenchmark” lub „BaselineProfile”, aby uruchomić tylko jeden typ testu, np. podczas generowania BaselineProfiles na emulatorze. Obsługiwana jest też lista rozdzielona przecinkami. (I756b7, b/230371561)

    Np. w pliku build.gradle testu porównawczego:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    Możesz też użyć wiersza poleceń Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Zmiany w interfejsie API

  • Dodaliśmy nowe PowerMetric do pomiaru zadań związanych z energią i mocą w testach porównawczych. (I9f39b, b/220183779)
  • Dodano nowy tryb kompilacji CompilationMode.Ignore, który umożliwia pominięcie resetowania profilu i kompilacji. (Ibbcf8, b/230453509)
  • Dodano nowy parametr do BaselineProfileRule#collectBaselineProfile, aby filtrować plik wyjściowy według nazw pakietów (If7338, b/220146561)
  • Umożliwia programiście rozładowanie urządzenia w celu pomiaru zużycia energii. (I6a6cb)
  • Dodaliśmy możliwość wyczyszczenia pamięci podręcznej shaderów w MacrobenchmarkScope. (I32122)
  • Umożliwia deweloperowi skonfigurowanie wyświetlania typu wskaźnika i szczegółów wybranych kategorii podsystemów. (I810c9)
  • Wcześniej w przypadku uruchomienia testu porównawczego na nieobsługiwanym urządzeniu zgłaszany był błąd UnsupportedOperationException. Teraz błąd UOE występuje tylko wtedy, gdy wskaźnik jest używany na nieobsługiwanym urządzeniu (np. PowerMetric.configure). (I5cf20, b/227229375)
  • Dodano TotalPowerMetricTotalEnergyMetric do pomiaru całkowitej mocy i energii w każdej kategorii systemu w przypadku testów porównawczych na dużą skalę. (I3b26b, b/224557371)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że skompilowane metody nie były prawidłowo resetowane między poszczególnymi testami porównawczymi makro na nieuzyskanych uprawnieniach roota. Niestety wymaga to ponownej instalacji pliku APK w każdej iteracji, co spowoduje wyczyszczenie danych aplikacji dla każdego testu porównawczego. (I31c74, b/230665435)
  • Naprawiono awarię nagrywania śladu na interfejsie API w wersji 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
  • Ulepszono wykrywanie zakończenia uruchamiania aktywności, aby naprawić wyjątek „Nie można odczytać żadnych danych” w makrotestach porównawczych uruchamiania. (Ia517c)

Wersja 1.1.1

Wersja 1.1.1

9 listopada 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.1 Wersja 1.1.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd android.system.ErrnoException: open failed: EACCES, który występował na niektórych urządzeniach z Androidem 11 (API 30) i nowszymi wersjami. Jest to wyselekcjonowana poprawka z 1.2.0-alpha01. (aosp/2072249)

Wersja 1.1.0

Wersja 1.1.0

15 czerwca 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0 Wersja 1.1.0 zawiera te zmiany.

  • Ta wersja jest identyczna z wersją androidx.benchmark:benchmark-*:1.1.0-rc03.

Ważne zmiany od wersji 1.0.0

Wersja 1.1.0-rc03

1 czerwca 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-rc03 Wersja 1.1.0-rc03 zawiera te zatwierdzenia.

Poprawki błędów

Wersja 1.1.0-rc02

11 maja 2022 roku

Publikacja androidx.benchmark:benchmark-*:1.1.0-rc02 Wersja 1.1.0-rc02 zawiera te zatwierdzenia.

  • Pamiętaj, że ta wersja zawiera zmianę w działaniu, ponieważ aplikacje są teraz w pełni ponownie instalowane między poszczególnymi testami porównawczymi, aby zapewnić dokładne pomiary.

Poprawki błędów i zmiany w działaniu

  • Rozwiązaliśmy problem polegający na tym, że kompilacja aplikacji nie była prawidłowo resetowana między testami porównawczymi na poziomie makro ani w ogóle w przypadku kompilacji bez dostępu do roota. Rozwiązuje to wiele problemów, w których przeprowadzenie kilku testów miało niewielki lub żaden wpływ na pomiary.CompilationMode Aby obejść ten problem, aplikacja docelowa jest teraz w pełni ponownie instalowana w przypadku każdej metody testowania, co powoduje wyczyszczenie danych aplikacji między poszczególnymi testami makro. (I31c74, b/230665435)

  • Uniemożliwia to aplikacjom konfigurowanie stanu przed testami, więc teraz można pominąć kompilację lub ponowną instalację, aby obejść ten problem. Możesz na przykład w pełni skompilować cel za pomocą polecenia powłoki cmd package compile -f -m speed <package>, a następnie pominąć krok kompilacji w przypadku testu porównawczego.

    Np. w pliku build.gradle testu porównawczego:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    Możesz też użyć wiersza poleceń Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Umożliwiliśmy udostępnianie modułu między testami generującymi profile makrobenchmarków i profile bazowe, dodając argument androidx.benchmark.enabledRules. Przekaż „Macrobenchmark” lub „BaselineProfile”, aby uruchomić tylko jeden typ testu, np. podczas generowania BaselineProfiles na emulatorze. (I756b7, b/230371561)

    Np. w pliku build.gradle testu porównawczego:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    Możesz też użyć wiersza poleceń Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Wersja 1.1.0-rc01

20 kwietnia 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-rc01 Wersja 1.1.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Linki do danych wyjściowych profilu podstawowego w Android Studio używają teraz unikalnej nazwy pliku. Dzięki temu dane wyjściowe zawsze odzwierciedlają najnowsze wyniki użycia BaselineProfileRule. ( aosp/2057008, b/228203086 )

Wersja 1.1.0-beta06

6 kwietnia 2022 roku

Publikacja androidx.benchmark:benchmark-*:1.1.0-beta06 Wersja 1.1.0-beta06 zawiera te zmiany.

Poprawki błędów

  • Naprawiono awarię nagrywania śladu na interfejsie API 21/22 (If7fd6, b/227509388)
  • Ulepszono wykrywanie zakończenia uruchamiania aktywności, aby naprawić wyjątek „Nie można odczytać żadnych danych” w makrotestach porównawczych uruchamiania. (Ia517c)
  • Naprawiliśmy wskaźniki uruchamiania w przypadku testów porównawczych Macrobenchmark, gdy używana jest wartość CompilationMode.None(). Przed tą zmianą CompilationMode.Partial() wydawał się wolniejszy niż Compilation.None(). (611ac9).

Wersja 1.1.0-beta05

23 marca 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-beta05 Wersja 1.1.0-beta05 zawiera te zmiany.

Poprawki błędów

  • Zakończ działanie pakietu po pominięciu instalacji profilu podczas korzystania z narzędzia CompilationMode.None. (aosp/1991373)
  • Rozwiązaliśmy problem, który powodował, że biblioteka Macrobenchmark nie mogła zbierać danych o uruchamianiu podczas korzystania z StartupMode.COLD. (aosp/2012227 b/218668335)

Wersja 1.1.0-beta04

23 lutego 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-beta04 Wersja 1.1.0-beta04 zawiera te zmiany.

Poprawki błędów

  • Naprawiono brakujące dane na Androidzie 10, NoSuchElementException spowodowany nieprawidłowym rejestrowaniem nazw procesów w śladach. (Ib4c17, b/218668335)

  • Używaj PowerManager do wykrywania ograniczenia termicznego na urządzeniach z Androidem Q (API 29) i nowszym. Znacznie zmniejsza to częstotliwość fałszywych alarmów w wykrywaniu ograniczenia termicznego (ponowne uruchomienie testu porównawczego po 90-sekundowym okresie schładzania) i znacznie przyspiesza testy porównawcze w przypadku kompilacji użytkowników. Wykrywa też ograniczenia, nawet gdy zegary są zablokowane (jeśli są zablokowane na zbyt wysokim poziomie w stosunku do fizycznego środowiska urządzenia). (I9c027, b/217497678, b/131755853)

  • Filtrowanie profilowania próbkowanego simpleperf do measureRepeated wątku w celu uproszczenia sprawdzania (Ic3e12, b/217501939)

  • Obsługa danych z nazwanych podprocesów interfejsu w aplikacjach wieloprocesowych (Ice6c0, b/215988434)

  • Filtrowanie reguł profilu podstawowego pod kątem Androida 9 (SDK 28). aosp/1980331 b/216508418

  • Pomiń instalację profilu podczas korzystania z Compilation.None(). Dodatkowo zgłaszaj ostrzeżenia, gdy aplikacja korzysta ze starszej wersji androidx.profileinstaller i wtyczki Androida do obsługi Gradle. aosp/1977029

Wersja 1.1.0-beta03

9 lutego 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-beta03 Wersja 1.1.0-beta03 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano AudioUnderrunMetric do biblioteki testów porównawczych w ramach eksperymentalnej flagi, aby umożliwić wykrywanie niedoborów dźwięku (Ib5972)
  • BaselineProfileRule nie akceptuje już bloku setup, ponieważ działał on tak samo jak blok profileBlock. (Ic7dfe, b/215536447)

    Na przykład:

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że ślady profilera mikrobadań nie były aktualizowane w kolejnych uruchomieniach, gdy były połączone w danych wyjściowych Studio (I5ae4d, b/214917025).
  • Zapobieganie poleceniom powłoki kompilacji w przypadku interfejsu API 23 (Ice380)
  • Zmieniono nazwy FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, aby wyjaśnić, że są to czasy trwania, a nie sygnatury czasowe, i dopasować prefiksy. (I0eba3, b/216337830)

Wersja 1.1.0-beta02

26 stycznia 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-beta02 Wersja 1.1.0-beta02 zawiera te zmiany.

Poprawki błędów

  • Wyniki profilowania za pomocą próbkowania stosu mikrobenczmarków lub śledzenia metod są teraz połączone w danych wyjściowych Studio, podobnie jak inne dane profilowania, i nie powodują pomijania danych alokacji. (Idcb65, b/214440748, b/214253245)
  • Klasa BaselineProfileRule wyświetla teraz polecenie adb pull w logcat i w danych wyjściowych Studio, aby pobrać wygenerowany plik tekstowy BaselineProfile. (f08811)

Wersja 1.1.0-beta01

12 stycznia 2022 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-beta01 Wersja 1.1.0-beta01 zawiera te zmiany.

Poprawki błędów

  • Naprawia ignorowanie argumentu profilera enable. (I37373, b/210619998)
  • Usunięto wycofaną funkcję CompliationModes (I98186, b/213467659)
  • Zmieniono argument profilu podstawowego CompilationMode.Partial na enum, aby był bardziej zrozumiały. (Id67ea)

Wersja 1.1.0-alpha13

15 grudnia 2021 roku

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha13 Wersja 1.1.0-alpha13 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodanie do danych wyjściowych mikropomiarów na Androidzie Q (API 29+) śledzenia systemu o niskim obciążeniu. Pamiętaj, że obecnie nie rejestruje ono śledzenia niestandardowego (za pomocą interfejsów API Jetpack android.os.Trace lub androidx.tracing), aby nie wpływać na wyniki. Śledzenie powinno być przydatne w diagnozowaniu niestabilności, zwłaszcza w przypadku źródeł spoza testu porównawczego. (I298be, b/205636583, b/145598917)
  • Wyjaśnij CompilationModes w 3 klasach: pełna, brak i częściowa. Wcześniej były one niejednolicie nazywane na podstawie argumentów kompilacji (które obecnie traktujemy jako szczegóły implementacji) i funkcji. Dzięki temu łatwiej jest zrozumieć kompromisy, potencjalne kombinacje i zachowania na różnych wersjach platformy. (I3d7bf, b/207132597)
  • Konfiguracja i pomiar są teraz zawsze w parach i w odpowiedniej kolejności. Możesz teraz wysyłać zapytania dotyczące nazwy pakietu i iteracji (chociaż w niektórych scenariuszach rozgrzewki iteracja może mieć wartość null). (Id3b68, b/208357448, b/208369635)

Poprawki błędów

  • Poprawiono nieprawidłowe traktowanie wartości CompilationMode.Speed jako None (I01137)

Wersja 1.1.0-alpha12

17 listopada 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha12 Wersja 1.1.0-alpha12 zawiera te zmiany.

Nowe funkcje

  • Dodaj eksperymentalny wskaźnik TraceSectionMetric do niestandardowych pomiarów czasu opartych na śledzeniu. (I99db1, b/204572664)

Poprawki błędów

  • Wybudzanie urządzenia w każdej iteracji, aby można było przetestować interfejs – wymaga wyłączenia ekranu blokady. (Ibfa28, b/180963442)
  • Naprawiono wiele awarii w trybie profilowania StackSampling na emulatorach i urządzeniach bez roota (Icdbda, b/202719335).
  • Usunięto 0,5-sekundowe uśpienie na końcu każdej iteracji.Jeśli po tej zmianie zauważysz brakujące dane, zgłoś błąd. (Iff6aa)
  • Zmniejszenie prawdopodobieństwa utraty danych i zmniejszenie obciążenia pamięci związanego ze śledzeniem (Id2544, b/199324831, b/204448861)
  • Zmniejsz rozmiar śladu o ok. 40% dzięki przejściu na kompaktowy format pamięci masowej harmonogramu. (Id5fb6, b/199324831)
  • Zaktualizowano implementacje danych dotyczących uruchamiania, aby zawsze kończyły się na końcu wątku renderowania. Będzie ona bardziej spójna w różnych wersjach platformy i dokładniej odzwierciedlać pomiary w aplikacji. (Ic6b55)

Wersja 1.1.0-alpha11

3 listopada 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha11 Wersja 1.1.0-alpha11 zawiera te zmiany.

Zmiany w interfejsie API

  • Macrobenchmark ma teraz minSdkVersion o wartości 23. (If2655)
  • Dodaje nowy eksperymentalny interfejs BaselineProfileRule, który może generować profile podstawowe dla kluczowych ścieżek użytkownika w aplikacji. Szczegółowa dokumentacja zostanie udostępniona wkrótce. (Ibbefa, b/203692160)
  • Usuwa wariant interfejsu measureRepeated, który został dodany dla wywołań w języku Java, ponieważ powodował niejednoznaczność w zakresie kończenia/rozwiązywania metody. Wywołujący w języku Java będą musieli ponownie zwracać wartość Unit.Instance z funkcji measureRepeated. Jeśli to utrudnienie, zgłoś błąd. Możemy ponownie rozważyć tę kwestię w przyszłej wersji. (Ifb23e, b/204331495)

Wersja 1.1.0-alpha10

27 października 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha10 Wersja 1.1.0-alpha10 zawiera te zmiany.

Zmiany w interfejsie API

  • Przeniesienie wstecz funkcji StartupTimingMetric, aby działała w przypadku interfejsu API w wersji 23. Ta nowa implementacja lepiej obsługuje też funkcję reportFullyDrawn(), która czeka, aż odpowiednie treści zostaną wyrenderowane. (If3ac9, b/183129298)
  • Dodano adnotację JvmOverloads do wielu metod MacrobenchmarkScope dla wywołujących w Javie. (I644fe, b/184546459)
  • Udostępnij alternatywną funkcję MacrobenchmarkRule.measureRepeated, która używa Consumer<MacrobenchmarkScope> do idiomatycznego użycia w języku Java. (If74ab, b/184546459)

Poprawki błędów

  • Poprawka dotycząca śladów, które nie zaczynają się wystarczająco wcześnie, i brakujących danych o wartościach. Powinno to rozwiązać wyjątki „Nie można odczytać żadnych danych podczas testu porównawczego”, które były spowodowane przez samą bibliotekę. (I6dfcb, b/193827052, b/200302931)
  • Nazwa FrameNegativeSlack została zmieniona na FrameOverrun, aby wyjaśnić jej znaczenie – o ile klatka przekroczyła swój budżet czasu. (I6c2aa, b/203008701)

Wersja 1.1.0-alpha09

13 października 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha09 Wersja 1.1.0-alpha09 zawiera te zmiany.

Poprawki błędów

  • Obsługa usuwania pamięci podręcznej strony jądra bez uprawnień roota w przypadku interfejsu API 31/S+, co zwiększy dokładność uruchamiania w trybie StartupMode.COLD. (Iecfdb, b/200160030)

Wersja 1.1.0-alpha08

29 września 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha08 Wersja 1.1.0-alpha08 zawiera te zmiany.

Zmiany w interfejsie API

  • Umożliwienie uruchamiania testów porównawczych przewijania na urządzeniach z API 23 (If39c2, b/183129298)
  • Dodaj do interfejsu i danych wyjściowych JSON nowy typ próbkowanych danych, który będzie się koncentrować na percentylach wielu próbek w każdej iteracji. (I56247, b/199940612)
  • Przełączanie na wskaźniki zmiennoprzecinkowe w bibliotekach testów porównawczych (obcięte w interfejsie Studio). (I69249, b/197008210)

Wersja 1.1.0-alpha07

1 września 2021 roku

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha07 Wersja 1.1.0-alpha07 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Podniesiono minimalny poziom API do 21, aby odzwierciedlić zamierzony najniższy poziom API, który będzie obsługiwany w przyszłości. Obecny minimalny obsługiwany interfejs API jest nadal przekazywany za pomocą funkcji RequiredApi() i wynosi obecnie 29 (I440d6, b/183129298).

Poprawki błędów

  • Poprawki ProfileInstaller, które ułatwiają aplikacjom korzystającym z profili podstawowych uruchamianie testów MacroBenchmark za pomocą CompilationMode.BaselineProfile. (I42657, b/196074999) UWAGA: wymaga też aktualizacji do wersji androidx.profileinstaller:profileinstaller:1.1.0-alpha04 lub nowszej.
  • StartupMode.COLDCompilationMode.None testy porównawcze są teraz bardziej stabilne. (I770cd, b/196074999)

Wersja 1.1.0-alpha06

18 sierpnia 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha06 Wersja 1.1.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano argument instrumentacji androidx.benchmark.iterations, aby umożliwić ręczne zastępowanie liczby iteracji podczas testowania lub profilowania lokalnego. (6188be, b/194137879)

Poprawki błędów

  • Od API w wersji 29 domyślnym profilerem próbkowania jest Simpleperf. (Ic4b34, b/158303822)

Znane problemy

  • CompilationMode.BaselineProfile jest w trakcie opracowywania. Na razie nie używaj go do określania, jak dobry jest profil.

Wersja 1.1.0-alpha05

4 sierpnia 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha05 Wersja 1.1.0-alpha05 zawiera te zmiany.

1.1.0-alpha04 zostało anulowane przed publikacją z powodu sporadycznego błędu. b/193827052

Zmiany w interfejsie API

  • Zmieniliśmy wywołanie startActivityAndWait na wywołanie za pomocą am start, co skróciło czas każdej iteracji pomiaru o około 5 sekund. Kosztem tej zmiany jest brak obsługi obiektów Parcelable w intencjach. (I5a6f5, b/192009149

Poprawki błędów

  • Zmniejsz agresywność wykrywania ograniczenia termicznego i ponownie oblicz poziom odniesienia, jeśli ograniczenia są wykrywane często. (I7327b)
  • Poprawka FrameTimingMetric, aby działała w wersji beta Androida S (Ib60cc, b/193260119)
  • Użyj EmptyActivity, aby wyłączyć stan wymuszonego zatrzymania aplikacji docelowej i lepiej obsługiwać CompilationMode.BaselineProfile. (Id7cac, b/192084204)
  • Zmieniono rozszerzenie pliku śledzenia na .perfetto-trace, aby było zgodne ze standardem platformy. (I4c236, b/174663039)
  • StartupTimingMetric zwraca teraz dane „fullyDrawnMs”, aby mierzyć czas do zakończenia renderowania aplikacji. Aby zdefiniować ten pomiar w przypadku aplikacji, wywołaj Activity.reportFullyDrawn, gdy początkowe treści będą gotowe, np. gdy początkowe elementy listy zostaną wczytane z bazy danych lub sieci. (Metoda reportFullyDrawn jest dostępna bez sprawdzania wersji kompilacji w klasie ComponentActivity). Pamiętaj, że test musi trwać wystarczająco długo, aby zarejestrować dane (startActivityAndWait nie czeka na reportFullyDrawn). (If1141, b/179176560)
  • Zmniejszenie kosztu dołączania metadanych interfejsu do śladów o ponad 50 ms (Ic8390, b/193923003)
  • Znacznie zwiększona częstotliwość odpytywania podczas zatrzymywania śledzenia, co może skrócić np.czas działania testu porównawczego uruchamiania o ponad 30% (Idfbc1, b/193723768).

Wersja 1.1.0-alpha03

16 czerwca 2021 r.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha03 Wersja 1.1.0-alpha03 zawiera te zmiany.

Nowe funkcje

Poprawki błędów

  • Przykładowy kod Gradle do pomijania błędów testów porównawczych został zaktualizowany, aby używać nieprzestarzałego interfejsu API ze składnią, która obsługuje też użytkowników plików .gradle.kts.

    Np.

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

Wersja 1.1.0-alpha02

18 maja 2021 r.

Wersja 1.1.0-alpha02 biblioteki Benchmark wprowadza ważny komponent do testów porównawczych – Macrobenchmark. Oprócz testu porównawczego, który umożliwia pomiar pętli procesora, test makro pozwala mierzyć interakcje w całej aplikacji, takie jak uruchamianie i przewijanie, oraz rejestrować ślady. Więcej informacji znajdziesz w dokumentacji biblioteki.

Publikacja androidx.benchmark:benchmark-*:1.1.0-alpha02 Wersja 1.1.0-alpha02 zawiera te zmiany.

Nowe funkcje

Dodano artefakty testu porównawczego (androidx.benchmark:benchmark-macro-junit4androidx.benchmark:benchmark-macro)

  • Zbieranie danych o skuteczności uruchamiania, przewijania i animacji w aplikacji lokalnie lub w CI
  • Rejestrowanie i sprawdzanie śladów w Androidzie Studio

Poprawki błędów

  • Obejście problemu z uprawnieniami powłoki w przypadku katalogu wyjściowego na Androidzie 12 (uwaga – aby nadal przechwytywać pliki wyjściowe na urządzeniach, których dotyczy ten problem, może być konieczne zaktualizowanie wtyczki Android Gradle do wersji 7.0.0 canary i Android Studio do wersji Arctic Fox (2020.3.1)). (Icb039)
  • Zapisywanie w pamięci podręcznej konfiguracji pomocy w BenchmarkPlugin (6be1c1, b/159804788)
  • Uproszczone dane wyjściowe – domyślnie włączone w katalogu, który nie wymaga requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Rozwiązuje problem z ostrzeżeniami logcat dotyczącymi drukowania biblioteki, które informują o braku wątku JIT w wersjach platformy, w których nie występuje. (I9cc63, b/161847393)
  • Poprawka dotycząca maksymalnej częstotliwości urządzenia do czytania. (I55c7a)

Wersja 1.1.0-alpha01

10 czerwca 2020 r.

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01androidx.benchmark:benchmark-junit4:1.1.0-alpha01 są zwalniane. Wersja 1.1.0-alpha01 zawiera te zmiany.

Nowe funkcje wersji 1.1

  • Wskaźnik alokacji – testy porównawcze są teraz przeprowadzane w dodatkowej fazie po rozgrzewce i pomiarze czasu, w której rejestrowane są liczby alokacji. Alokacje mogą powodować problemy z wydajnością w starszych wersjach platformy (140 ns w O stało się 8 ns w M – pomiar na Nexusie 5X z zablokowanymi zegarami). Ta wartość jest wyświetlana w danych wyjściowych konsoli Android Studio, a także w sekcji
  • Obsługa profilowania – teraz możesz rejestrować dane profilowania podczas testu porównawczego, aby sprawdzić, dlaczego Twój kod może działać wolno. Test porównawczy obsługuje rejestrowanie śledzenia metod lub próbkowania metod z ART. Pliki te można sprawdzić za pomocą profilera w Android Studio, klikając Plik > Otwórz.
  • Wtyczka Benchmark Gradle udostępnia teraz ustawienia domyślne, które ułatwiają konfigurację:
    • testBuildType jest domyślnie ustawiona na wersję, aby uniknąć używania zależności z wbudowanym pokryciem kodu. Typ kompilacji wersji jest też skonfigurowany jako domyślny, co umożliwia Androidowi Studio automatyczne wybieranie prawidłowego wariantu kompilacji przy pierwszym otwarciu projektu. (b/138808399)
    • signingConfig.debug jest używana jako domyślna konfiguracja podpisywania (b/153583269).

** Poprawki błędów **

  • Znacznie zmniejszono narzut związany z okresem rozgrzewki, w którym pierwszy pomiar w przypadku każdego testu porównawczego był sztucznie wyższy niż pozostałe. Problem ten był bardziej widoczny w przypadku bardzo małych testów porównawczych (1 mikrosekunda lub mniej). (b/142058671)
  • Usunęliśmy błąd InstrumentationResultParser, który był wyświetlany w przypadku każdego testu porównawczego podczas uruchamiania z wiersza poleceń. (I64988, b/154248456)

Znane problemy

  • Wiersz poleceń i wywołania Gradle w przypadku testu porównawczego nie drukują wyników bezpośrednio. Możesz to obejść, uruchamiając narzędzie w Studio lub analizując plik wyjściowy JSON w celu uzyskania wyników.
  • Raportowanie porównawcze nie może pobrać raportu z urządzeń, na których zainstalowano aplikację z identyfikatorem applicationId kończącym się na „android” lub „download” (bez rozróżniania wielkości liter). Użytkownicy, u których występuje ten problem, powinni uaktualnić wtyczkę Androida do obsługi Gradle do wersji 4.2-alpha01 lub nowszej.

Wersja 1.0.0

Benchmark w wersji 1.0.0

20 listopada 2019 r.

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0androidx.benchmark:benchmark-junit4:1.0.0 są udostępniane bez zmian w stosunku do wersji 1.0.0-rc01. Wersja 1.0.0 zawiera te zatwierdzenia.

Główne funkcje wersji 1.0.0

Biblioteka Benchmark umożliwia pisanie testów porównawczych wydajności kodu aplikacji i szybkie uzyskiwanie wyników.

Zapobiega problemom z konfiguracją kompilacji i środowiska wykonawczego oraz stabilizuje wydajność urządzenia, aby zapewnić dokładność i spójność pomiarów. Uruchamiaj testy porównawcze bezpośrednio w Android Studio lub w ramach ciągłej integracji, aby obserwować wydajność kodu w czasie i zapobiegać regresji.

Główne funkcje:

  • Stabilizacja zegara
  • Automatyczne nadawanie priorytetów wątkom
  • Obsługa testowania wydajności interfejsu, np. w przykładzie RecyclerView
  • Rozgrzewanie i zapętlanie z uwzględnieniem kompilacji JIT
  • Dane wyjściowe testu porównawczego JSON do przetwarzania końcowego

Wersja 1.0.0-rc01

23 października 2019 r.

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01androidx.benchmark:benchmark-junit4:1.0.0-rc01 są zwalniane. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano śledzenie systrace do testów porównawczych

Poprawki błędów

  • Rozwiązanie problemu z niestabilnością wskaźników, który powodował, że kompilacja JIT nie kończyła się przed rozgrzewką z powodu obniżenia priorytetu (b/140773023).
  • Ujednolicony katalog wyjściowy JSON we wtyczkach Androida do obsługi Gradle w wersjach 3.5 i 3.6

Wersja 1.0.0-beta01

9 października 2019 r.

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01androidx.benchmark:benchmark-junit4:1.0.0-beta01 są zwalniane. Wersja 1.0.0-beta01 zawiera te zmiany.

Nowe funkcje

  • Przed każdym rozgrzewaniem uruchamiaj odśmiecanie, aby zmniejszyć obciążenie pamięci z jednego testu porównawczego i zapobiec jego przenoszeniu do następnego (b/140895105).

Poprawki błędów

  • Dodano zależność androidx.annotation:android-experimental-lint, aby kod w Javie prawidłowo generował błędy lint, gdy nie jest używany eksperymentalny interfejs API, podobnie jak w przypadku eksperymentalnej adnotacji Kotlin dla wywołujących w Kotlinie.
  • Teraz prawidłowo wykrywa użycie argumentu instrumentacji additionalTestOutputDir w przypadku danych wyjściowych we wtyczce Androida do obsługi Gradle w wersji 3.6, aby wiedzieć, kiedy AGP będzie obsługiwać kopiowanie danych.
  • Naprawiono niewykrytą częstotliwość zegara w pliku JSON, aby prawidłowo wyświetlać znak -1 (b/141945670).

Wersja 1.0.0-alpha06

18 września 2019 r.

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06androidx.benchmark:benchmark-junit4:1.0.0-alpha06 są zwalniane. Wersja 1.0.0-alpha06 zawiera te zmiany.

Nowe funkcje

  • Dodano sprawdzanie nieprawidłowego użycia starego pakietu w przypadku narzędzia do uruchamiania testów, które teraz wyświetla bardziej pomocny komunikat o błędzie.

Zmiany w interfejsie API

  • Eksperymentalna adnotacja ExperimentalAnnotationReport jest teraz prawidłowo publiczna. Korzystanie z eksperymentalnego interfejsu BenchmarkState#report API wymaga teraz tej adnotacji.

Wersja 1.0.0-alpha05

5 września 2019 r.

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05androidx.benchmark:benchmark-junit4:1.0.0-alpha05 są zwalniane. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Interfejs API BenchmarkState.reportData jest teraz oznaczony jako eksperymentalny

Poprawki błędów

  • Poprawka skryptu blokującego zegar, który nie działał na urządzeniach, na których brakowało narzędzi powłoki cut lub expr.
  • Rozwiązaliśmy problem z zadaniem ./gradlew lockClocks, które zawieszało się na urządzeniach z dostępem do roota, na których zainstalowana była starsza wersja narzędzia su, która nie obsługiwała flagi -c.

Wersja 1.0.0-alpha04

7 sierpnia 2019 r.

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04androidx.benchmark:benchmark-junit4:1.0.0-alpha04 są zwalniane. Zmiany zawarte w tej wersji znajdziesz tutaj.

Dodaliśmy też nową dokumentację dotyczącą używania biblioteki Benchmark bez Gradle, zarówno w przypadku różnych systemów kompilacji (takich jak Bazel czy Buck), jak i podczas uruchamiania w CI. Więcej informacji znajdziesz w artykułach Tworzenie testów porównawczych bez GradleUruchamianie testów porównawczych w integracji ciągłej.

Nowe funkcje

  • Wtyczka Gradle
    • Teraz automatycznie wyłącza pokrycie testami i domyślnie ustawia wartość AndroidBenchmarkRunner (b/138374050).
    • Dodano obsługę nowego kopiowania danych opartego na AGP podczas przeprowadzania testów porównawczych i korzystania z AGP w wersji 3.6 lub nowszej.
  • Dodatki do formatu JSON
    • Wyświetlanie łącznego czasu trwania testu porównawczego (b/133147694)
    • @Parameterized testy porównawcze, które używają ciągu znaków z nazwą (np. @Parameters(name = "size={0},depth={1}")), podają teraz w danych wyjściowych JSON nazwy i wartości parametrów dla każdego testu porównawczego (b/132578772).
  • Tryb uruchomienia próbnego (b/138785848)
    • Dodaliśmy tryb „próbny”, w którym każda pętla testu porównawczego jest uruchamiana tylko raz, aby sprawdzić, czy nie występują błędy lub awarie, bez rejestrowania pomiarów. Może to być przydatne np. do szybkiego przeprowadzania testów porównawczych przed przesłaniem, aby sprawdzić, czy nie są uszkodzone.

Zmiany w interfejsie API

  • Struktura modułu uległa zmianie, co spowodowało podział biblioteki (b/138451391).
    • benchmark:benchmark-junit4 zawiera klasy z zależnością JUnit: AndroidBenchmarkRunnerBenchmarkRule, które zostały przeniesione do pakietu androidx.benchmark.junit4.
    • benchmark:benchmark-common zawiera pozostałą logikę, w tym interfejs BenchmarkState API.
    • Ten podział umożliwi bibliotece w przyszłości obsługę testów porównawczych bez interfejsów JUnit4 API.
  • Ostrzeżenia dotyczące konfiguracji są teraz traktowane jako błędy i powodują przerwanie testu (b/137653596).
    • Ma to na celu dalsze zachęcanie do dokładnych pomiarów, zwłaszcza w przypadku CI.
    • Te błędy można przekształcić z powrotem w ostrzeżenia za pomocą argumentu instrumentacji. Na przykład: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Poprawki błędów

  • Błędy podczas zapisywania danych na urządzeniach zewnętrznych z Androidem Q są opisywane bardziej szczegółowo, a komunikaty zawierają sugestie dotyczące rozwiązania problemu.
  • Podczas testów porównawczych ekrany są automatycznie włączane, zamiast powodować błędy, gdy są wyłączone.

Wkład zewnętrzny

  • Dziękujemy Siergiejowi Zacharowowi za ulepszenia wyników JSON i rozwiązanie problemów z wyłączaniem ekranu.

Wersja 1.0.0-alpha03

2 lipca 2019 r.

Publikacja androidx.benchmark:benchmark:1.0.0-alpha03androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Udostępnianie czasu trwania uśpienia z powodu ograniczenia termicznego w przypadku każdego testu porównawczego w pełnym raporcie JSON

Poprawki błędów

  • Wtyczka Gradle nie powinna już być stosowana po wtyczkach Androida i bloku Androida
  • Dodano obsługę raportów porównawczych na urządzeniach z Androidem 10 korzystających z pamięci o ograniczonym zakresie.

Wersja 1.0.0-alpha02

6 czerwca 2019 r.

androidx.benchmark:1.0.0-alpha02androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 zostały opublikowane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Pamiętaj, że traktujemy schemat JSON jako interfejs API. Planujemy zachować te same ograniczenia dotyczące stabilności co w przypadku innych interfejsów API: stabilne (z bardzo rzadkimi wyjątkami) w wersji beta i ustalone w wersji ostatecznej, z dodatkami tylko w wersjach podrzędnych oraz zmianami i usunięciami w wersjach głównych.

Zmiany w interfejsie API

  • Przebudowany schemat JSON. Dalsze zmiany w schemacie JSON będą prawdopodobnie ograniczone do dodawania nowych elementów:

    • Zmieniliśmy strukturę obiektu wyniku, aby w przyszłości obsługiwać dodatkowe grupy danych (b/132713021).
    • Dodano informacje kontekstowe o testowym uruchomieniu, takie jak informacje o urządzeniu i kompilacji oraz to, czy zegary są zablokowane, do obiektu najwyższego poziomu (b/132711920).
    • Nazwy danych dotyczących czasu zawierają teraz „ns” (b/132714527)
    • Dodano dodatkowe statystyki dla każdego raportowanego rodzaju danych (maksymalne, średnie, minimalne) i usunięto uproszczoną statystykę podsumowującą „nanos” (b/132713851).
  • Usunięto dane wyjściowe XML (b/132714414)

  • Usunięto wykrywanie ograniczenia termicznego z interfejsu API BenchmarkState.reportData (b/132887006)

Poprawki błędów

  • Rozwiązano problem z nieprawidłowym działaniem funkcji ./gradlew lockClocks na niektórych urządzeniach z najnowszymi wersjami systemów operacyjnych (b/133424037)
  • Wykrywanie ograniczania zostało wyłączone w przypadku emulatora (b/132880807)

Wersja 1.0.0-alpha01

7 maja 2019 r.

Publikacja androidx.benchmark:benchmark:1.0.0-alpha01 Zatwierdzenia zawarte w tej wersji są dostępne tutaj.