Test porównawczy

Dokładnie mierz wydajność swojego kodu w Android Studio.
Najnowsza aktualizacja Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
17 kwietnia 2024 r. 1.2.4 - - 1.3.0-alfa03

Deklarowanie zależności

Aby dodać zależność z Benchmark, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.

Makroporównawcze

Aby użyć w projekcie makrporównania, dodaj te zależności do pliku build.gradle modułu macrobenchmark:

Odlotowy

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

Kotlin

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

Mikroporównanie

Aby używać w projekcie mikroporównania, dodaj te zależności do pliku build.gradle w module mikroporównania:

Odlotowy

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

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

Kotlin

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

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

Biblioteka Microbenchmark zawiera też wtyczkę do Gradle, którą możesz używać z modułem mikroporównania. Ta wtyczka ustawia domyślne ustawienia konfiguracji kompilacji dla tego modułu, ustawia kopię testu porównawczego do hosta i udostępnia zadanie ./gradlew lockClocks.

Aby korzystać z wtyczki, umieść ten wiersz w bloku „Wtyczki” w pliku build.gradle najwyższego poziomu:

Odlotowy

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

Kotlin

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

Następnie zastosuj wtyczkę do pliku build.gradle modułu analizy porównawczej

Odlotowy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Opinia

Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.

Utwórz nowy numer

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

Wersja 1.3

Wersja 1.3.0-alfa03

17 kwietnia 2024 r.

Aplikacja androidx.benchmark:benchmark-*:1.3.0-alpha03 została zwolniona. Wersja 1.3.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaje publiczne interfejsy API PerfettoTraceProcessor.Session.queryMetrics w postaci wersji JSON, textproto i binarnych (niezakodowanych) proto. Pozwalają one na wysyłanie zapytań do danych wbudowanych w TraceProcessor (I54d7f, b/304038382).
  • Do danych wyjściowych JSON dodano element profilerOutput, który ułatwia narzędzia wokół logów czasu profilowania (np. perfetto, ślady metod). (I05ddd, b/332604449)
  • Dodano tag zasilania do konfiguracji porównawczej Perfetto. Rejestruje to na przykład punkty śledzenia blokady wybudzenia. (Icfe44, b/286551983)
  • Dodano argument inst androidx.benchmark.profiling.skipWhenDurationRisksAnr. Można ustawić wartość false, aby uniknąć pomijania logów czasu, gdy oczekiwany czas trwania może powodować błąd ANR. Zdecydowanie zalecamy tego unikać w przypadku uruchomień CI.
  • Dodano eksperymentalny argument inst androidx.benchmark.profiling.perfCompare.enable; ustaw tę wartość na „true”, aby uruchamiać czasy porównywania między fazami pomiaru i profilowania. Przydatny np. przy ocenie kosztów śledzenia metod. (I61fb4, b/329146942)

Zmiany w interfejsie API

  • Zmieniono klasę TraceSectionMetric.Mode na zaoszczędzoną, aby umożliwić rozszerzanie w przyszłości bez naruszania warunków wyczerpujących, gdy instrukcje (I71f7b)
  • Dodano argumenty TraceSectionMetric.Mode.Average i .Count oraz zmieniono kolejność argumentów, aby bardziej powszechny argument (tryb) znajdował się wcześniej na liście argumentów, co zmniejszyło potrzebę określania nazw parametrów. (Ibf0b0, b/315830077, b/322167531)
  • Nazwa Metric.getResult została zmieniona na getMeasurements, aby dopasować zwracany typ (I42595)

Poprawki błędów

  • Rozwiąż problem, aby mieć pewność, że testy porównawcze korzystają z wygenerowanych profili podstawowych, gdy zasada automaticGenerationDuringBuild jest wyłączona (Ic144f, b/333024280)
  • Napraw zastąpienia właściwości wtyczki Gradle w BaselineProfile, aby umożliwić generowanie profilu podstawowego i testy porównawcze podczas dostosowywania typu kompilacji nonMinified lub testu porównawczego. (Ib8f05, b/324837887)
  • Naprawione ślady metody są niewidoczne w makroporównaniu, więc powinny być w pełni przechwytywane i prawidłowe nawet na wolniejszych urządzeniach. (I6349a, b/329904950)
  • Włącz rozpoczęcie blokowania w rekordzie śledzenia Perfetto, aby zmniejszyć ryzyko brakujących danych na początku śledzenia. Obsługiwane tylko w przypadku interfejsu API w wersji 33 i nowszych. (Ie6e41, b/310760059)
  • Dodaliśmy ostrzeżenie, które pojawia się w przypadku używania narzędzia Android Test Orchestrator w modułach porównawczych, ponieważ powoduje to wielokrotne zastępowanie wyjściowych plików JSON poszczególnych modułów. (Ia1af6, b/286899049)
  • Wymuszaj stosowanie separatorów tysięcy „,” (przecinek), aby zachować spójność w danych wyjściowych Studio, ignorując ustawienia regionalne urządzenia (I3e921, b/313496656).
  • TraceSectionMetric obsługuje teraz wycinki utworzone za pomocą Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Dodano etykiety log.w / wyjątkowe do wszystkich błędów wykrywania uruchamiania. Nie zmienia to aktualnego działania (więc niektóre błędy są wysyłane, a inne nie wykrywają uruchomienia) i sprawia, że staje się ono bardziej zrozumiałe. Ogólnie rzecz biorąc, te, które Log.w() i nie raportują danych dotyczących uruchamiania, to takie, w których brakuje zdarzeń innych niż ramki. Wyjątki są zgłaszane po wykryciu uruchomienia z wyjątkiem informacji o czasie wczytywania klatek (z wycinków interfejsu użytkownika/RT). (Id240f, b/329145809)
  • Aby zmniejszyć zakłócenia, anuluj zadania dexoptacji w tle przed uruchomieniem analizy porównawczej. (I989ed)
  • Dodano pomiar frameCount do FrameTimingMetric, aby ułatwić wykrywanie scenariuszy, w których pomiary zmieniają się z powodu zmiany liczby utworzonych klatek (dodano nowe animacje, rozwiązano problemy z unieważnianiem). (I1e5aa)
  • Wyjaśniliśmy, że preferowanym wskaźnikiem śledzenia jest frameOverrunMs (jeśli jest dostępny w dokumentach), a także powody, dla których warto go używać. (I18749, b/329478323)

Wersja 1.3.0-alfa02

20 marca 2024 r.

Aplikacja androidx.benchmark:benchmark-*:1.3.0-alpha02 została zwolniona. Wersja 1.3.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Eksperymentalna obsługa R8 w mikrobenchu za pomocą osadzonych reguł ProPard. Pamiętaj, że ta obsługa ma charakter eksperymentalny i wymaga AGP 8.3 do minifikacji testów modułu biblioteki. Użyj poniższych elementów, aby włączyć minifikację/optymalizację R8 w elemencie build.gradle modułu analizy porównawczej. Powinno to spowodować znaczny wzrost wydajności w zależności od obciążenia. (I738a3, b/184378053)

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

Poprawki błędów

  • Naprawiono ostrzeżenie o śledzeniu metod, które znajdowało się w osobnym wierszu od danych wyjściowych mikrobench. (I0455c, b/328308833)

Wersja 1.3.0-alfa01

21 lutego 2024 r.

Aplikacja androidx.benchmark:benchmark-*:1.3.0-alpha01 została zwolniona. Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Zmieniliśmy nazwy parametrów logicznych MicrobenchmarkConfig, aby uniknąć zbędnego słowa „należy” (Ia8f00, b/303387299)
  • Dodano BenchmarkRule.measureRepeatedOnMainThread, aby testy porównawcze wątków głównych (np. dotyczące interfejsu Wyświetlenia lub Tworzenie) mogły uniknąć błędów ANR, zwłaszcza w przypadku dużych zestawów w CI. (I5c86d)
  • Dodaliśmy FrameTimingGfxInfoMetric – eksperymentalną, alternatywną implementację parametru FrameTimingMetric, z pomiarami pochodzącymi bezpośrednio z platformy, a nie ze śladu Perfetto. (I457cb, b/322232828)
  • Dodaj możliwość zrzutu profilu ART podczas poszczególnych iteracji warmUp. (I17923)
  • Kilka zmian w interfejsie TraceSectionMetric API:
    • Dodaj Mode.Min, Mode.Max
    • Dodaj argument etykiety, aby zastąpić nazwę sekcji jako etykietę wskaźnika
    • Dodano nazwę trybu do danych wyjściowych, aby ułatwić zrozumienie znaczenia danych
    • Zmieniono wartość domyślną na sumę, ponieważ większość użycia tego wskaźnika dotyczy powtarzających się zdarzeń. Pamiętaj o tych zmianach w wykorzystaniu CI, ponieważ może to powodować nieciągłości lub przerywanie analizy. (Ic1e82, b/301892382, b/301955938)

Poprawki błędów

  • Ulepszony komunikat o błędzie we wtyczce podstawowej profilu Gradle, gdy określone urządzenie zarządzane nie istnieje (Idea2b, b/313803289)
  • Poprawka obejmująca uwzględnianie w AAR profili podstawowych biblioteki przed 8.3.0–alfa 15. AGP (I1d2af, b/313992099)
  • Stały adres URL punktu odniesienia i profilu uruchamiania na końcu zadania generowania (I802e5, b/313976958)
  • Poprawiono limity czasu źródła danych w celu podjęcia próby naprawienia błędu java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Dodaj 2 argumenty instrumentacji służące do zastępowania funkcji pomijania cieniowania w przypadku awarii w przypadku testów porównawczych aplikacji bez ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : może służyć do pomijania wszystkich funkcji cieniowania (także w przypadku wprowadzenia StartupMode.Cold), zwłaszcza w przypadku testów porównawczych w przypadku aplikacji, które nie używają jeszcze instalatora profilu 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : może służyć do tolerowania błędów przy próbie usunięcia programów do cieniowania, np. podczas testów porównawczych aplikacji bez instalatora profilu 1.3 (I4f573).
  • Pomiń śledzenie metod w wątku UI, jeśli powinno to zająć dłużej niż kilka sekund, a podczas rzucania ślady metody czyszczenia. (I6e768)
  • Rzucaj, gdy nazwy plików mają więcej niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab).
  • Rozwiązano problem polegający na tym, że niezakończone klatki na początku i na końcu śledzenia mogły być łączone ze sobą, co powodowałoby nieprawidłowo raportowanie 1 bardzo długiej klatki. (I39353, b/322232828)
  • Aby wyczyścić profile ART w kompilacjach użytkowników, użyj --skip verification w interfejsie API 30 lub nowszym podczas ponownej instalacji pakietu w interfejsie API 30–33. Pomaga to ominąć ostrzeżenia Play Protect, które powodują awarie niektórych klasy urządzeń. (Ic9e36)
  • Użyj am force-stop, aby zatrzymywać aplikacje, które nie są aplikacjami systemowymi takimi jak UI systemu czy Launchery. (I5e028)
  • Analiza porównawcza makr czeka teraz na 1 second, aż aplikacja docelowa opróżni profil ART (wcześniej czekała na 500 ms). (I85a50, b/316082056)
  • Popraw błąd FrameTimingMetric, gdy klatki nie są generowane, i zawsze wysyłaj link do śledzenia w przypadku niepowodzenia analizy wskaźników, aby pomóc w diagnozowaniu problemu. (I956b9)
  • Rozwiązaliśmy problem z awarią FrameTimingMetric, który nie mógł przeanalizować identyfikatora ramki, zwłaszcza na niektórych urządzeniach OEM. (Ia24bc, b/303823815, b/306235276)
  • Zmniejszono rygorystyczność kontroli 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.

Aplikacja androidx.benchmark:benchmark-*:1.2.4 została zwolniona. Wersja 1.2.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Poprawiono atrybut srcset profilu podstawowego, który nie został skonfigurowany w wariantach porównawczych. Poprawiono też plik automaticGenerationDuringBuild w bibliotekach, który powoduje zależność cykliczną. (I28ab7, b/333024280)
  • Użyj am force-stop, aby zatrzymywać aplikacje, które nie są aplikacjami systemowymi takimi jak UI systemu czy Launchery. Naprawia test porównawczy StartupMode.COLD, który powoduje awarię pakietu „Pakiet $package nie może być uruchomiony przed uruchomieniem „na zimno”!”, ponieważ proces kończenia nie zakończył się w pełni. (I5e028)

Wersja 1.2.3

24 stycznia 2024 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.3 została zwolniona. Wersja 1.2.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunięto wyjątek z wtyczki Gradle profilu podstawowego, gdy AGP jest w wersji 8.3.0 lub nowszej.
  • Poprawiono uwzględnianie w AAR profili podstawowych z biblioteki sprzed wersji 8.3.0–alfa 15.

Wersja 1.2.2

1 grudnia 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.2 została zwolniona. Wersja 1.2.2 zawiera te zatwierdzenia.

Profile podstawowe

  • W dziennikach wykonywania będzie widoczna ścieżka wyjściowego pliku profilu podstawowego jako identyfikator URI pliku lokalnego (aosp/2843918, aosp/2853665, b/313976958).

Wersja 1.2.1

15 listopada 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.1 została zwolniona. Wersja 1.2.1 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 1.2.0

18 października 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0 została zwolniona. Wersja 1.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.1.0

Profile podstawowe

  • Nowa wtyczka do Gradle profilu podstawowego automatyzuje rejestrowanie i uwzględnianie profili podstawowych w przepływie pracy związanym z testowaniem i kompilacją.
  • BaselineProfileRule.collect to teraz stabilna, uproszczona wersja poprzedniego eksperymentalnego interfejsu API BaselineProfileRule.collectBaselineProfile.
    • Określ tylko packageName i zarządzaj aplikacją
  • W przypadku bibliotek generujących profile podstawowe można teraz filtrować reguły wygenerowane w kodzie (argument BaselineProfileRule.collect) lub jeszcze prościej we wtyczce Gradle
  • Poprawki
    • Naprawiono zbieranie danych profili podstawowych na Androidzie U+ (Id1392, b/277645214)

Analiza porównawcza w skali makro

  • Kompilacja
    • Analiza porównawcza makr teraz prawidłowo resetuje stan kompilacji każdej kompilacji, co wymaga ponownej instalacji pakietu APK przed Androidem 14. Dlatego zdecydowanie zalecamy przeprowadzenie testów porównawczych na Androidzie 14 i nowszych, jeśli chcesz zachować obecny stan (np. loginu użytkownika) w mierzonych danych.
    • Możesz też obejść ten problem, kontrolując oddzielnie kompilację aplikacji i pomijając kompilację za pomocą CompilationMode.Ignore() lub argumentu instrumentacji.
  • Argumenty instrumentacji

    • Obsługa argumentu instrumentacji androidx.benchmark.dryRunMode.enable (dostępnego już w mikroporównaniu) w celu przyspieszenia przeprowadzania weryfikacji (np.podczas tworzenia testu porównawczego lub wstępnego przesyłania danych).
    • Obsługa systemów androidx.benchmark.profiling.mode=StackSampling i MethodTracing.
    • Dodano androidx.benchmark.enabledRules, aby umożliwić testowanie w czasie działania bazowego filtrowania profilu podstawowego w porównaniu z regułami analizy porównawczej
    • Dodano argument androidx.benchmark.perfettoSdkTracing.enable, aby włączyć śledzenie za pomocą śledzenia-perfetto, np. śledzenie rekompozycji. Pamiętaj, że użycie tej funkcji razem z StartupMode.COLD może znacząco wpłynąć na czas, ponieważ biblioteka śledzenia jest wczytywana i włączona podczas uruchamiania aplikacji.
  • Wymagania

    • Test porównawczy makr wymaga teraz w aplikacji docelowej ProfileInstaller w wersji 1.3.0 lub nowszej, by umożliwić przechwytywanie / resetowanie profilu oraz czyszczenie pamięci podręcznej programu cieniowania.
  • Nowe eksperymentalne interfejsy API wskaźników

    • Dodano eksperymentalną funkcję TraceSectionMetric, która pozwala na wyodrębnianie prostego kodu czasowego z bloków trace("") {} w aplikacji, lub TraceMetric, aby wykorzystać pełną możliwość wysyłania zapytań w Perfetto TraceProcessor.
    • Dodano eksperymentalną funkcję PowerMetric do rejestrowania informacji o zużyciu energii.
    • Dodano eksperymentalną funkcję MemoryCountersMetric umożliwiającą zliczanie błędów strony.
    • Dodano eksperymentalny interfejs API PerfettoTraceProcessor, który jest używany wewnętrznie do wyodrębniania wskaźników ze śladów systemu (tzw. logów czasu Perfetto).
  • Poprawki

    • Naprawiono awarie występujące podczas instalowania lub wyodrębniania profili z aplikacji zainstalowanej z wielu plików APK (np. z pakietu aplikacji).
    • Poprawiono ignorowanie ramek o niespójnych identyfikatorach klatek w interfejsie FrameTimingMetric w interfejsie API 31 i nowszych (I747d2, b/279088460)
    • Naprawiono błędy analizy logów czasu powyżej 64 MB (Ief831, b/269949822)
    • Wyjaśnienie błędów, które występowały, gdy obraz systemu operacyjnego urządzenia (zwłaszcza emulatora) nie był prawidłowo skonfigurowany do śledzenia lub kompilacji.
    • Pomiń sprawdzanie poziomu naładowania baterii w przypadku urządzeń bez baterii (mikro i makro)
    • Ulepszone dane wyjściowe plików z wyraźniejszymi błędami dotyczącymi nieprawidłowych katalogów wyjściowych i bezpieczniejszymi ustawieniami domyślnymi
    • Zwiększono stabilność funkcji StartupMode.COLD przez ciągłe pomijanie pamięci podręcznej programu do cieniowania (dostępną też przez MacrobenchmarkScope.dropShaderCache).
    • Naprawiono kreację zastępczą dla funkcji startActivityAndWait.

Mikroporównanie

  • Funkcje
    • Profilowanie zostało przeniesione do oddzielnej fazy, po innych wskaźnikach, więc jedno uruchomienie testu może wyświetlić zarówno dokładny czas oraz wyniki profilowania.
  • Eksperymentalne interfejsy API
    • Dodano eksperymentalny interfejs API MicrobenchmarkConfig do definiowania wskaźników niestandardowych oraz konfigurowania śledzenia i profilowania. Może być używana do rejestrowania śladów metod lub do rejestrowania punktów śledzenia (ale pamiętaj o przesłanym śledztwie).
    • Dodano eksperymentalne interfejsy API do kontrolowania BenchmarkState niezależnie od BenchmarkRule, bez JUnit
    • Dodano eksperymentalny rekord PerfettoTrace, aby umożliwić rejestrowanie logów czasu Perfetto z konfiguracją niestandardową niezależnie od porównawczych interfejsów API.
  • Poprawki
    • Obejście brakujących wiodących odstępów w wynikach analizy porównawczej Android Studio.
    • Rozwiązaliśmy problem z wyświetlaniem ostrzeżeń w testach porównawczych Android Studio.
    • Naprawiono awarię SampledProfiling na Androidzie 13 (API 33) i nowszych.
    • Znacznie poprawiła wydajność aplikacji dryRunMode dzięki pominięciem śledzenia IsolationActivity i śledzenia Perfetto (nawet 10 razy szybszego trybu próbnego w starszych wersjach systemów operacyjnych).

Wersja 1.2.0-rc02

6 października 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-rc02 została zwolniona. Wersja 1.2.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Popraw dane wyjściowe pliku testu porównawczego, aby nie przerywać kopiowania pliku wtyczki BaselineProfile. Pliki zostały wygenerowane i skopiowane poza urządzenie, ale ich nazwa została zmieniona tak, że wtyczka Gradle ich nie widzi. (I8dbcc, b/303034735, b/296453339)
  • Wyczyszczono komunikaty o błędach wczytywania funkcji tracing-perfetto występujące podczas wstrzykiwania danych z modułu makr porównawczych do aplikacji docelowej.

Wersja 1.2.0-rc01

20 września 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-rc01 została zwolniona. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Gdy śledzenie Perfetto SDK nie zainicjuje się w narzędziu Porównawczym, zgłaszany jest teraz wyjątek (z instrukcjami rozwiązania problemu). (I6c878, b/286228781)
  • Naprawa błędu OOM podczas konwertowania formatu śledzenia metody ART -> perfetto. (I106bd, b/296905344)
  • (Test porównawczy w skali makro) Doprecyzowano etykietę śledzenia metod po połączeniu w danych wyjściowych testu Studio oraz poprawione nazwy plików śledzenia metod, tak aby były niepowtarzalne na urządzeniu/hostie, dzięki czemu nie są zastępowane przy więcej niż 1 analizie porównawczej. (I08e65, b/285912360)
  • Zapewnia, że urządzenie jest wybudzone podczas rejestrowania profilu podstawowego. (I503fc)

Wersja 1.2.0-beta05

30 sierpnia 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-beta05 została zwolniona. Wersja 1.2.0-beta05 zawiera te zatwierdzenia.

Nowe funkcje

  • Wtyczka Gradle profilu podstawowego obsługuje teraz wtyczkę do obsługi Gradle w Androidzie 8.3. (Aosp/2715214)

Wersja 1.2.0-beta04

23 sierpnia 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-beta04 została zwolniona. Wersja 1.2.0-beta04 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

  • Napraw błędy podczas zapisywania, przenoszenia i pobierania plików (zwłaszcza tych z testów z parametrami) – dokładniej opracuj nazwy plików wyjściowych, unikając znaków „=” i „:” w nazwach plików wyjściowych. (I759d8)

Wersja 1.2.0-beta03

9 sierpnia 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-beta03 została zwolniona. Wersja 1.2.0-beta03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

  • Zmieniono nazwę argumentu instrumentacji fullTracing.enable na perfettoSdkTracing.enable, aby zapewnić spójność z nazwą artefaktu i innymi odwołaniami. fullTracing.enable będzie nadal działać jako zastępcza. (I7cc00)
  • Wewnętrzne punkty śledzenia z biblioteki porównawczej (w tym pętla mikrotestu i śledzenie faz) będą teraz wyświetlane w przeglądarce śledzenia systemu Studio i zagnieżdżane w odpowiednim procesie w Perfetto. (I6b2e7, b/293510459)
  • W interfejsie API w wersji 31 lub nowszej usunięto błąd „makrobenchmark NOT-PROFILEABLE”, a także pominięto profilowalne sprawdzanie na urządzeniach z dostępem do roota eng/userdebug. (I2abac, b/291722507)
  • Podczas korzystania z optymalizacji układu Dex reguły profilu uruchamiania są teraz uznawane za podstawowe reguły profilu. (Aosp/2684246, b/293889189)

Wersja 1.2.0-beta02

26 lipca 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-beta02 została zwolniona. Wersja 1.2.0-beta02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano eksperymentalne interfejsy API do niestandardowych wskaźników i konfiguracji microbench (np. profiler i śledzenie). (I86101, b/291820856)

Poprawki błędów

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

Wersja 1.2.0-beta01

18 lipca 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-beta01 została zwolniona. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawa ostrzeżeń, które czasem pomijane w wynikach analizy porównawczej w Studio i obejście odstępów wiodących z wyników testu porównawczego, które nie pojawiają się w Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Naprawiony komentarz dotyczący zadania FrameTimingMetric. Dane podrzędne to frameDurationCpuMs. (Ib097f, b/288830934).

Wersja 1.2.0-alfa16

21 czerwca 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha16 została zwolniona. Wersja 1.2.0-alfa16 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Nazwa interfejsu API BaselineProfileRule.collectBaselineProfile() została zmieniona na BaselineProfileRule.collect(). (I4b665)

Poprawki błędów

  • Obsługa makr porównawczych w przypadku androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Profilowanie mikrotestów zostało przeniesione do oddzielnej fazy, więc ma miejsce w sekwencji po pomiarze, a nie zastępowane. W przechwyconym śladzie Perfetto są też teraz uwzględniane MethodTracing sekcje śledzenia (jeśli występują). (I9f657, b/285014599)
  • Dodaj pomiar liczby do elementu TraceSectionMetric za pomocą funkcji Mode.Sum. (Ic121a, b/264398606)

Wersja 1.2.0-alfa15

7 czerwca 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha15 została zwolniona. Wersja 1.2.0-alfa15 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano eksperymentalny element MemoryUsageMetric do śledzenia wykorzystania pamięci przez aplikację docelową. (I56453, b/133147125, b/281749311)
  • Dodaj obsługę w pełni niestandardowych konfiguracji Perfetto w PerfettoTrace.record (If9d75, b/280460183)
  • Dodano właściwość, która pozwala pominąć generowanie profilu podstawowego. Wykorzystanie: ./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)
  • Zmieniono argument filterPredicate klasy BaselineProfileRule na niezerowy z odpowiednią wartością domyślną, aby domyślny sposób działania filtra w dokumentach był bardziej zrozumiały. (I3816e)

Poprawki błędów

  • Aby znacznie poprawić wydajność, wyłącz śledzenie IsolationActivity i śledzenie Perfetto w narzędziu dryRunMode, ponieważ odbywały się przez większość czasu działania. (Ie4f7d).
  • Obsługa próbkowania stosu wywołań w makrach porównawczych z wykorzystaniem argumentów testowania instrumentacji: androidx.benchmark.profiling.mode=StackSampling i androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Naprawiono awarię podczas usuwania cieniowania na Androidzie U (API 34) oraz w emulatorach. (I031ca, b/274314544)

Wersja 1.2.0-alfa14

3 maja 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha14 została zwolniona. Wersja 1.2.0-alfa14 zawiera te zatwierdzenia.

Poprawki błędów

  • Poprawiono błąd FrameTimingMetric ignorowania ramek o niespójnych identyfikatorach. Spowoduje to, że niektóre animacje w najnowszych wersjach platformy (API 31 i nowsze) zignorują wiele klatek podczas animacji RenderThread (np. w fazie). (I747d2, b/279088460)
  • Naprawiono analizę procesora śledzenia w przypadku logów czasu większych niż 64 MB. (Ief831, b/269949822)
  • Rozwiązaliśmy problem z generowaniem profilu podstawowego na Androidzie U z powodu różnych danych wyjściowych polecenia pm dump-profiles. (Id1392, b/277645214)
  • Aby prawidłowo porównać ciągi tekstowe, rozwiąż problem ze skryptem blokującym zegar GPU (I53e54, b/213935715)

Wersja 1.2.0-alfa13

5 kwietnia 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha13 została zwolniona. Wersja 1.2.0-alpha13 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano parametr typu profilu podczas generowania profili podstawowych na potrzeby obsługi funkcji profilu startowego (Ie20d7, b/275093123)
  • Dodano nowy, eksperymentalny interfejs API TraceMetric do definiowania w pełni niestandardowych wskaźników na podstawie treści logu czasu Perfetto. (I4ce31, b/219851406)
  • Dodaj dane eksperymentalne, aby określić liczbę błędów strony w testach porównawczych. (I48db0)

Wersja 1.2.0-alfa12

22 marca 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha12 została zwolniona. Wersja 1.2.0-alpha12 zawiera te zatwierdzenia.

Nowe funkcje

  • W wersji alfa została opublikowana nowa wtyczka Gradle profilu podstawowego, która ułatwia generowanie profilu podstawowego i upraszcza pracę programisty.

Zmiany w interfejsie API

  • Usunęliśmy obsługę śledzenia Perfetto w interfejsach API 21 i 22. Obejmuje to zarówno mikroporównania, jak i eksperymentalne interfejsy API PerfettoTrace. Wcześniej połączenia z UiAutomation były niestabilne na niektórych urządzeniach. (I78e8c)
  • Dodano publiczny eksperymentalny interfejs API dla PerfettoTraceProcessor, aby umożliwić analizę treści logu czasu. To krok w kierunku w pełni niestandardowych wskaźników opartych na danych śledzenia Perfetto. (I2659e, b/219851406)

Wersja 1.2.0-alfa11

8 marca 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha11 została zwolniona. Wersja 1.2.0-alpha11 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono awarie w MacrobenchmarkRule i BaselineProfileRule występujące podczas ponownego instalowania lub wyodrębniania profili z pakietu aplikacji z wieloma plikami APK. (I0d8c8, b/270587281)

Wersja 1.2.0-alfa10

22 lutego 2023 roku

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha10 została zwolniona. Wersja 1.2.0-alpha10 zawiera te zatwierdzenia.

Nowe funkcje

  • Dzięki nowej funkcji platformy na Androidzie 14 i nowszym Macrobenchmark nie instaluje już aplikacji docelowych w celu resetowania stanu kompilacji. Wcześniej przed każdym testem porównawczym konieczne było urządzenie z dostępem do roota lub usuwanie całego stanu aplikacji (np. loginu użytkownika). (I9b08c, b/249143766)

Poprawki błędów

  • Poprawiono DryRunMode, aby nie ulegał już awarii z powodu pustego profilu z powodu pomijania kompilacji. Zamiast tego przeprowadza pojedynczą iterację i wyodrębnia profil, aby mieć pewność, że coś zostanie zarejestrowane. (I2f05d, b/266403227)
  • Usunięto awarię PowerMetric podczas sprawdzania obecności statystyk powerstatów na starszych poziomach interfejsu API. (5faaf9, b/268253898)

Wersja 1.2.0-alfa09

11 stycznia 2023 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha09 została zwolniona. Wersja 1.2.0-alpha09 zawiera te zatwierdzenia.

Poprawki błędów

  • Włączono przekazywanie wartości None do argumentu instrumentacji androidx.benchmark.enabledRules, aby wyłączyć generowanie wszystkich testów porównawczych / generowania profilu podstawowego. (I3d7fd, b/258671856)
  • Popraw przechwytywanie PerfettoTrace w modułach aplikacji (tj. nieinwazyjnych testowych pakietów APK) (I12cfc)
  • Stała kolejność argumentów pull adb profilu podstawowego w danych wyjściowych Studio (I958d1, b/261781624)
  • Interfejs API emulatora Arm 33 jest teraz prawidłowo rozpoznawany jako taki podczas próby uruchomienia makr porównawczych i prawidłowo wyświetla ostrzeżenie. (69133b,b/262209591)
  • Pomiń sprawdzanie poziomu baterii na urządzeniach bez baterii (fe4114, b/232448937)

Wersja 1.2.0-alfa08

7 grudnia 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha08 została zwolniona. Wersja 1.2.0-alpha08 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodaliśmy nowe, eksperymentalne interfejsy API PerfettoTrace.record {} i PerfettoTraceRule, które umożliwiają rejestrowanie logów czasu Perfetto (nazywanych też śladami systemu) w ramach testu w celu badania zachowania i wydajności testu. (I3ba16)
  • BaselineProfileRule akceptuje teraz predykat filtra zamiast listy prefiksów pakietów. Daje to testowi pełną kontrolę nad filtrowaniem. (I93240)
  • Dodaj eksperymentalny interfejs API BaselineProfileRule.collectStableBaselineProfile, który czeka, aż profil podstawowy będzie stabilny w przypadku N iteracji. (I923f3)
  • Dodaj możliwość określenia prefiksu nazwy pliku wyjściowego podczas generowania profili podstawowych przy użyciu BaselineProfileRule. (I7b59f, b/260318655)

Poprawki błędów

  • Zwiększ bezpieczeństwo zapisu danych wyjściowych plików, co powinno zapobiegać dyskretnemu zapisywaniu / dołączaniu plików wyjściowych, zwłaszcza w przypadku interfejsu API 21/22. (If8c44, b/227510293)
  • Aby utworzyć i prawidłowo umieścić plik, popraw dane wyjściowe logu czasu simpleperf. Powinno to też rozwiązać problemy z nieudanym pobraniem pliku przez Gradle. (I12a1c, b/259424099)
  • Komunikat o błędzie instalatora profilu wyświetlający się, gdy instalator profili jest za stary. Teraz informuje, że należy zaktualizować wersję instalatora profilu (1.2.1) do pomiaru profili podstawowych w interfejsach API od 31 do 33 zamiast informować, że funkcja nie jest obsługiwana. (Ia517f, b/253519888)
  • Naprawa kilku błędów polecenia powłoki w przypadku komunikatu o błędzie Drukuj wymagany interfejs API <=23, w tym nieudanej konfiguracji przechwytywania plików binarnych i błędów przechwytywania logów czasu (Ib6b87, b/258863685)
  • Automatycznie sortuj wygenerowane reguły profilu, aby zminimalizować liczbę zmian zmieniających się w czasie (podczas sprawdzania reguł profilu na kontrolę źródła). (IE2509)
  • Usunięto awarię w kompilacjach bez dostępu do roota w wersjach starszych niż Android 13 (API 33) z komunikatem Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

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

  <!-- 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-alfa07

9 listopada 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha07 została zwolniona. Wersja 1.2.0-alpha07 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano interfejs API PowerMetric do pomiaru energii i mocy w Macroporównania. (Ife601, b/220183779)
  • Naprawiliśmy błąd MacrobenchmarkScope.dropShaderCache(), który powoduje pomijanie pamięci podręcznej programu do cieniowania. Eliminuje to około 20 ms szumu z testów porównawczych StartupMode.COLD, ponieważ systemy do cieniowania są teraz regularnie czyszczone przy każdej iteracji. Wcześniej kompilacja Partial z wykorzystaniem iteracji z rozgrzewki zgłaszała nieprawidłowe szybkie wartości, ponieważ buforowanie programu do cieniowania było bardziej prawdopodobne podczas rozruchu. Ta poprawka wymaga urządzenia z dostępem do roota lub korzystania z profileinstaller:1.3.0-alpha02 w aplikacji docelowej. Informacje o zmianach w interfejsie API biblioteki ProfileInstaller znajdziesz na stronie ProfileInstaller w wersji 1.30-alpha02. (Ia5171, b/231455742)
  • Dodano funkcję TraceSectionMode("label", Mode.Sum), co umożliwia pomiar łącznego czasu spędzonego w wielu sekcjach śledzenia z tą samą etykietą. Na przykład TraceSectionMetric("inflate", Mode.Sum) poda dane inflateMs dotyczące łącznego czasu w makroporównawczej wartości czasu poświęconego inflacji. Usunięto też wymaganie interfejsu API 29, ponieważ TraceSectionMetric współpracuje z interfejsem androidx.tracing.Trace na niższych poziomach interfejsu API przy użyciu 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/błędów. (I5984d, b/255402908, b/253094958)
  • Określ urządzenie w poleceniu adb pull w profilu podstawowym, aby móc je skopiować po podłączeniu wielu urządzeń (maks. 1 emulator) (I6ac6c, b/223359380)
  • Dodaj błąd, jeśli plik APK do testu makroporównawczego nie został skonfigurowany jako autoinstrukcyjny. Ten błąd uniemożliwia korzystanie z makr porównawczych w procesie aplikacji docelowej. Makrobench nie jest w stanie skompilować/zamknąć/uruchomić aplikacji „na zimno” ani kontrolować własnych uprawnień (I4279b).
  • Naprawiono błąd w funkcji measureRepeated(), który powodował, że funkcja StartupMode.COLD nie kończyła procesu docelowego po setupBlock. Teraz użytkownik setupBlock wchodzi w interakcję z aplikacją, a jego działanie jest nieprawidłowe, a pomiar uruchomienia „na zimno” jest nieprawidłowy. (I8ebb7)

Wersja 1.2.0-alfa06

24 października 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha06 została zwolniona. Wersja 1.2.0-alpha06 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Aplikacja BaselineProfileRule nie wymaga już dostępu do roota na Androidzie 13 (API 33) i nie jest już eksperymentalna. (Ie0a7d, b/250083467, b/253094958)
    • Ta zmiana obejmuje też usuwanie profili z aplikacji na dysk na urządzeniach bez dostępu do roota, ale wymaga zaktualizowania zależności od instalatora profilu aplikacji docelowej.
    • Aby używać aplikacji BaselineProfileRule lub CompilationMode.Partial(warmupIterations) na urządzeniu bez dostępu do roota, musisz też zaktualizować aplikację docelową do korzystania z androidx.profileinstaller.profileinstaller:1.3.0-alpha01. Umożliwia to prawidłowe opróżnienie profilu na dysk, co umożliwia skompilowanie/wyodrębnienie.

Poprawki błędów

  • Naprawia awarię SampledProfiling w interfejsie API 33 i nowszych. (I40743, b/236109374)

Wersja 1.2.0-alfa05

5 października 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha05 została zwolniona. Wersja 1.2.0-alpha05 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawianie podziału klatek w przeglądarce śledzenia systemu Studio w przypadku logów czasu zarejestrowanych w ramach analizy porównawczej (I3f3ae, b/239677443)
  • Prawidłowa wartość FrameTimingMetric, aby oznaczyć FrameOverrun jako wymagające API 31 zamiast 29 (I716dd, b/220702554)
  • Ustaw iterację w elemencie BaselineProfileRule i wyraźnie zwracaj, jeśli pakiet docelowy nie jest zainstalowany (wykonano to już w przypadku reguły MacrobenchmarkRule). (Ic09a3, b/227991471)

Wersja 1.2.0-alfa04

21 września 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha04 została zwolniona. Wersja 1.2.0-alpha04 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaj obsługę argumentu instrumentacji funkcji dryRunMode.enable do analizy porównawczej (już dostępnych w mikro), aby przyspieszyć programowanie lokalne i zweryfikować automatyzację aplikacji (np. we wstępnym przesłaniu). 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 z pomiarem. (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

  • Naprawiliśmy zasadę StartupTimingMetric, aby nie wymagać już zmierzonych działań do uruchomienia w MacrobenchmarkScope.startActivityAndWait(). Oznacza to, że dane mogą rejestrować uruchomienia np. po otrzymaniu powiadomienia, Context.startActivity(), nawigacji na podstawie aktywności w aplikacji czy poleceń powłoki. (Ia2de6, b/245414235)
  • Przez zmniejszenie rygorystyczności wykrywania klatek, żeby naprawić błąd, przez który startActivityAndWait wyłączał czas oczekiwania na zakończenie uruchamiania w emulatorach. (Ibe2c6, b/244594339, b/228946895)

Wersja 1.2.0-alfa03

7 września 2022 roku

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha03 została zwolniona. Wersja 1.2.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

  • Dodano kreację zastępczą SKAdNetwork dla startActivityAndWait. (01ed77, b/242899915)

Wersja 1.2.0-alfa02

24 sierpnia 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha02 została zwolniona. Wersja 1.2.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Domyślnie ustawiona jest wartość am force stop w przypadku MacrobenchmarkScope.killProcess(), nawet z dostępem do roota, z wyjątkiem generowania profilu podstawowego. Można ją zastąpić opcjonalnym argumentem logicznym. (02cce9, b/241214097)

Poprawki błędów

  • Obsługują generowanie profilu podstawowego dla aplikacji systemowych. (I900b8, b/241214097)
  • Obsługa sprawdzania wskaźników zasilania ODPM na urządzeniach bez dostępu do roota. (A38c78, b/229623230)

Wersja 1.2.0-alfa01

27 lipca 2022 roku

Aplikacja androidx.benchmark:benchmark-*:1.2.0-alpha01 została zwolniona. Wersja 1.2.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Nowy komponent tracing-perfetto-common umożliwiający narzędzie do włączania śledzenia pakietu Perfetto SDK w aplikacji, która je udostępnia (I2cc7f)
  • Dodano argument instrumentacji androidx.benchmark.enabledRules, aby umożliwić filtrowanie uruchomień makr porównawczych tylko do testów porównawczych lub tylko do generowania profilu podstawowego. Przekaż dane „Macrobenchmark” lub „BaselineProfile”, aby uruchomić tylko jeden typ testu, np. podczas generowania parametru BaselineProfiles w emulatorze. Obsługiwana jest też lista rozdzielana przecinkami. (I756b7, b/230371561)

    np. w pliku build.gradle w makrach porównawczych:

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

    W wierszu poleceń Gradle:

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

Zmiany w interfejsie API

  • Dodano nowe urządzenie PowerMetric do mierzenia zadań związanych z energią i energią w testach porównawczych. (I9f39b, b/220183779)
  • Dodano nowy tryb kompilacji CompilationMode.Ignore, w którym można pominąć resetowanie profilu i kompilację. (Ibbcf8, b/230453509)
  • Do funkcji BaselineProfileRule#collectBaselineProfile dodano nowy parametr pozwalający filtrować plik wyjściowy według nazw pakietów (If7338, b/220146561)
  • Umożliwia deweloperowi rozładowywanie urządzenia w celu pomiaru zużycia energii. (I6a6cb)
  • Dodano możliwość czyszczenia pamięci podręcznej programu do cieniowania w: MacrobenchmarkScope. (I32122)
  • Umożliwia deweloperowi skonfigurowanie wyświetlania typu wskaźników i szczegółów pożądanych kategorii podsystemów. (I810c9)
  • Wcześniej kod UnsupportedOperationException był uwzględniany w testach porównawczych, gdy został uruchomiony na nieobsługiwanym urządzeniu. Teraz UOE występuje tylko wtedy, gdy dany rodzaj danych jest używany na nieobsługiwanym urządzeniu (np. PowerMetric.configure). (I5cf20, b/227229375)
  • Dodano TotalPowerMetric i TotalEnergyMetric do pomiaru łącznej mocy i energii w każdej kategorii systemu w makroporównawczych testach. (I3b26b, b/224557371)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że skompilowane metody nie były prawidłowo resetowane między poszczególnymi testami makr w kompilacjach bez dostępu do roota. Wymaga to niestety ponownego zainstalowania pakietu apk przy każdej iteracji, co spowoduje usunięcie danych aplikacji dla każdego testu porównawczego makr. (I31c74, b/230665435)
  • Naprawiono awarię rejestrowania śledzenia w interfejsie API 21 grudnia (If7fd6, b/227509388, b/227510293, b/227512788)
  • Wykrywanie zakończenia działania związanego z remontem, aby naprawić wyjątek „Nie można odczytać żadnych danych” w testach porównawczych makr startowych. (Ia517c)

Wersja 1.1.1

Wersja 1.1.1

9 listopada 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.1 została zwolniona. Wersja 1.1.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunięto błąd android.system.ErrnoException: open failed: EACCES, który występował na niektórych urządzeniach z Androidem 11 (API 30) i nowszymi. To łatwy wybór, który poprawił się w usłudze 1.2.0-alpha01. (Aosp/2072249)

Wersja 1.1.0

Wersja 1.1.0

15 czerwca 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0 została zwolniona. Wersja 1.1.0 zawiera te zatwierdzenia.

  • Ta wersja jest taka sama jak androidx.benchmark:benchmark-*:1.1.0-rc03.

Ważne zmiany od wersji 1.0.0

Wersja 1.1.0-rc03

1 czerwca 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-rc03 została zwolniona. Wersja 1.1.0-rc03 zawiera te zatwierdzenia.

Poprawki błędów

  • Unikaj ponownego instalowania pakietu docelowego przy każdej iteracji testu porównawczego. ( aosp/2093027, b/231976084)

  • Usuń opóźnienie (300ms) z pressHome(). (Aosp/2086030, b/231322975)

  • Zwiększ szybkość iteracji Macrobenchmark, optymalizując polecenia powłoki używane w tle. (Aosp/2086023, b/231323582)

  • Obsługa zarządzanych urządzeń Gradle podczas generowania profili podstawowych za pomocą testów porównawczych makr. (Aosp/2062228, b/228926421)

Wersja 1.1.0-rc02

11 maja 2022 roku

Aplikacja androidx.benchmark:benchmark-*:1.1.0-rc02 została zwolniona. Wersja 1.1.0-rc02 zawiera te zatwierdzenia.

  • Uwaga: w tej wersji wprowadziliśmy zmianę w działaniu aplikacji. Aby zapewnić dokładność pomiarów, aplikacje są teraz w pełni instalowane pomiędzy każdym testem porównawczym.

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

  • Rozwiązaliśmy problem, który powodował, że kompilacja aplikacji nie była prawidłowo resetowana między analizami porównawczymi makr ani nie była resetowana w przypadku kompilacji pozbawionych dostępu do roota. Rozwiązuje to w wielu przypadkach, w których przeprowadzenie kilku testów spowodowałoby, że CompilationMode nie miałby żadnego lub prawie żadnego wpływu na pomiary. Aby obejść ten problem, aplikacja docelowa w pełni ponownie instaluje wszystkie metody testowe, co powoduje usunięcie danych aplikacji między poszczególnymi testami makr. (I31c74, b/230665435)

  • Ponieważ zapobiega to konfigurowaniu stanu aplikacji przed testami, można teraz pominąć kompilację lub ponowną instalację, aby obejść ten problem. Możesz na przykład w pełni skompilować środowisko docelowe za pomocą polecenia powłoki cmd package compile -f -m speed <package>, a potem pominąć krok kompilacji w makrobenchmark.

    np. w pliku build.gradle w makrach porównawczych:

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

    W wierszu poleceń Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Umożliwiło to udostępnianie modułu między analizami porównawczymi makr i testami generującymi profil bazowy przez dodanie argumentu instrumentacji androidx.benchmark.enabledRules. Przekaż dane „Macrobenchmark” lub „BaselineProfile”, aby uruchomić tylko jeden typ testu, np. podczas generowania polecenia BaselineProfiles w emulatorze. (I756b7, b/230371561)

    np. w pliku build.gradle w makrach porównawczych:

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

    W wierszu poleceń Gradle:

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

Wersja 1.1.0-rc01

20 kwietnia 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-rc01 została zwolniona. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Linki wyjściowe profilu podstawowego w Android Studio mają teraz unikalną nazwę pliku. Dzięki temu dane wyjściowe zawsze odzwierciedlają najnowsze wyniki korzystania z tabeli BaselineProfileRule. ( aosp/2057008, b/228203086 )

Wersja 1.1.0-beta06

6 kwietnia 2022 roku

Aplikacja androidx.benchmark:benchmark-*:1.1.0-beta06 została zwolniona. Wersja 1.1.0-beta06 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono awarię rejestrowania śledzenia w interfejsie API 21 grudnia (If7fd6, b/227509388)
  • Wykrywanie zakończenia działania związanego z remontem, aby naprawić wyjątek „Nie można odczytać żadnych danych” w testach porównawczych makr startowych. (Ia517c)
  • Popraw dane uruchamiania w makrach porównawczych, gdy używana jest zasada CompilationMode.None(). Przed tą zmianą plik CompilationMode.Partial() wydawał się wolniejszy niż Compilation.None(). (611ac9).

Wersja 1.1.0-beta05

23 marca 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-beta05 została zwolniona. Wersja 1.1.0-beta05 zawiera te zatwierdzenia.

Poprawki błędów

  • Podczas korzystania z CompilationMode.None zamknij pakiet po pominięciu instalacji profilu. (Aosp/1991373)
  • Rozwiązaliśmy problem, który powodował, że makroporównania nie mogło zbierać danych początkowych podczas korzystania z StartupMode.COLD. (Aosp/2012227 b/218668335)

Wersja 1.1.0-beta04

23 lutego 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-beta04 została zwolniona. Wersja 1.1.0-beta04 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawa brakujących wskaźników w Androidzie 10 i NoSuchElementException spowodowanych przez nieprawidłowe zapisywanie nazw procesów w śladach. (Ib4c17, b/218668335)

  • Do wykrywania ograniczeń termicznych w interfejsie Q (API 29) i nowszych używaj zasady PowerManager. Znacznie zmniejsza to częstotliwość występowania fałszywych trafień w wykrywaniu ograniczania wykorzystania ciepła (ponowienie testu porównawczego po 90 sekundach oczekiwania) i znacznie przyspiesza osiąganie wyników testów porównawczych w przypadku kompilacji użytkowników. Zapewnia też wykrywanie przepustnicy nawet wtedy, gdy zegary są zablokowane (jeśli są zablokowane zbyt wysoko w zależności od środowiska fizycznego urządzenia). (I9c027, b/217497678, b/131755853)

  • Filtruj próbkowane profilowanie Simpleperf tylko do wątku measureRepeated, aby uprościć kontrolę (Ic3e12, b/217501939)

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

  • Filtruj reguły profilu podstawowego, aby kierować je na Androida 9 (SDK 28). aosp/1980331 b/216508418

  • Pomiń instalację profilu, jeśli używasz narzędzia Compilation.None(). Dodatkowo zgłaszaj ostrzeżenia, gdy aplikacja używa starszej wersji androidx.profileinstaller i wtyczki Androida do obsługi Gradle. aosp/1977029

Wersja 1.1.0-beta03

9 lutego 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-beta03 została zwolniona. Wersja 1.1.0-beta03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano tag AudioUnderrunMetric do biblioteki testów porównawczych makr w ramach flagi eksperymentalnej, aby umożliwić wykrywanie zaniżonych wyników dźwiękowych (Ib5972).
  • BaselineProfileRule nie akceptuje już bloka setup, ponieważ działa tak samo jak 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ązanie problemu, który powodował, że ślady programu profilującego mikrobencha nie były aktualizowane przy kolejnych uruchomieniach po połączeniu w danych wyjściowych Studio (I5ae4d, b/214917025).
  • Zapobiegaj poleceniam powłoki kompilacji w interfejsie API 23 (Ice380)
  • Zmieniono nazwę FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, aby wyjaśnić, że chodzi o czasy trwania, a nie sygnatury czasowe, i aby dopasować prefiksy. (I0eba3, b/216337830)

Wersja 1.1.0-beta02

26 stycznia 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-beta02 została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

  • Wyniki mikrotestowania stosu opartego na próbkowaniu stosu / profilu śledzenia metod są teraz łączone w danych wyjściowych Studio, podobnie jak inne dane wyjściowe profilowania, i nie pomijają wskaźnika alokacji. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule wyświetla teraz polecenie adb pull w logcat i danych wyjściowych Studio, aby pobrać wygenerowany plik tekstowy BaselineProfile. (F08811)

Wersja 1.1.0-beta01

12 stycznia 2022 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-beta01 została zwolniona. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązano problem z ignorowaniem włączenia argumentu profiler. (I37373, b/210619998)
  • Usunięto wycofaną instancję CompliationModes (I98186, b/213467659)
  • Aby zwiększyć przejrzystość, przełączono argument profilu podstawowego z CompilationMode.Partial na wyliczenie. (Id67ea)

Wersja 1.1.0-alfa13

15 grudnia 2021 roku

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha13 została zwolniona. Wersja 1.1.0-alpha13 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodaj śledzenie systemu niskiej jakości do danych wyjściowych mikrobench w Androidzie Q (API 29 i nowszych). Pamiętaj, że obecnie nie rejestruje to śledzenia niestandardowego (za pomocą interfejsów API android.os.Trace lub androidx.tracing Jetpack API), aby nie miało to wpływu na wyniki. Takie śledzenie powinno być przydatne w diagnozowaniu niestabilności, zwłaszcza ze źródeł spoza testu porównawczego. (I298be, b/205636583, b/145598917)
  • Przypisz CompilationModes do 3 klas: Pełne, Brak i Częściowe. Wcześniej nazwy te były niespójne na podstawie argumentów kompilacji (które teraz traktujemy jako szczegóły implementacji) i funkcji. Dzięki temu łatwiej jest porównać wady, potencjalne kombinacje i działania na różnych platformach. (I3d7bf, b/207132597)
  • Konfiguracja i pomiar są teraz zawsze zawsze w parach, w określonej kolejności. Możesz teraz wysyłać zapytania dotyczące nazwy pakietu i iteracji (chociaż w niektórych scenariuszach wczytywania może to być null). (Id3b68, b/208357448, b/208369635)

Poprawki błędów

  • Poprawiono błąd CompilationMode.Speed nieprawidłowo traktowany jako None (I01137)

Wersja 1.1.0-alfa12

17 listopada 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha12 została zwolniona. Wersja 1.1.0-alpha12 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaj eksperymentalne TraceSectionMetric do niestandardowych pomiarów czasu na podstawie logów czasu. (I99db1, b/204572664)

Poprawki błędów

  • Wybudzaj urządzenie przy każdej iteracji, aby umożliwić przetestowanie UI – wymaga wyłączenia ekranu blokady. (Ibfa28, b/180963442)
  • Naprawia wiele awarii w trybie profilowania StackSampling na emulatorach i urządzeniach bez dostępu do roota (Icdbda, b/202719335)
  • Usunięto 0,5-sekundowe usypianie na koniec każdej iteracji.Jeśli zauważysz brak danych po tej zmianie, zgłoś błąd. (Iff6aa)
  • Zmniejsz ryzyko utraty danych i zmniejsz obciążenie pamięci przez śledzenie (Id2544, b/199324831, b/204448861)
  • Zmniejsz rozmiar logu czasu o około 40%, przechodząc na kompaktowy format pamięci zgodnie z harmonogramem. (Id5fb6, b/199324831)
  • Zaktualizowano implementacje wskaźników uruchamiania, aby zawsze kończyły się na końcu wątku renderowania. Będzie to bardziej spójne w przypadku wszystkich wersji platformy i będzie bardziej zgodne z pomiarami w aplikacji. (Ic6b55)

Wersja 1.1.0-alfa11

3 listopada 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha11 została zwolniona. Wersja 1.1.0-alpha11 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Makroporównawcze ma teraz minSdkVersion o wartości 23. (If2655)
  • Dodaje nowy eksperymentalny element BaselineProfileRule, który może generować profile podstawowe dla krytycznej ścieżki użytkownika aplikacji. Wkrótce otrzymasz szczegółową dokumentację. (Ibbefa, b/203692160)
  • Usuwa wariant interfejsu MeasureRepeated, który został dodany na potrzeby wywołań Javy, ponieważ powodowało niejasności przy kończeniu lub rozwiązywaniu problemów z metodą. Elementy wywołujące Javę w języku Java ponownie będą musiały zwracać Unit.Instance z measureRepeated. Jeśli jest to niedogodność, zgłoś błąd, a my zajmiemy się tym problemem w kolejnej wersji. (Ifb23e, b/204331495)

Wersja 1.1.0-alfa10

27 października 2021 roku

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha10 została zwolniona. Wersja 1.1.0-alpha10 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Wróć do interfejsu StartupTimingMetric, by wrócić do interfejsu API 23. Ta nowa implementacja lepiej obsługuje też funkcję reportFullyDrawn() w czasie oczekiwania na wyrenderowanie odpowiedniej treści. (If3ac9, b/183129298)
  • Dodano znaczniki JvmOverload do wielu metod MacrobenchmarkScope dla obiektów wywołujących Java. (I644fe, b/184546459)
  • Podaj alternatywną funkcję MacrobenchmarkRule.measureRepeated, korzystającą z funkcji Consumer<MacrobenchmarkScope> na potrzeby idiomatycznego użycia w języku Java. (If74ab, b/184546459)

Poprawki błędów

  • Naprawiono logi czasu, które nie rozpoczynały się dostatecznie wcześnie i brakuje danych wskaźników. Zwykle rozwiązuje to wyjątki „Nie można odczytać żadnych danych podczas testu porównawczego”, które zostały spowodowane przez samą bibliotekę. (I6dfcb, b/193827052, b/200302931)
  • Nazwa elementu FrameNegativeSlack została zmieniona na FrameOverrun, aby doprecyzować jego znaczenie – jak bardzo klatka przekroczyła swój budżet czasowy. (I6c2aa, b/203008701)

Wersja 1.1.0-alfa09

13 października 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha09 została zwolniona. Wersja 1.1.0-alpha09 zawiera te zatwierdzenia.

Poprawki błędów

  • Obsługa pomijania pamięci podręcznej stron jądra bez dostępu do roota w przypadku interfejsu API 31/S lub nowszego, co zwiększy dokładność uruchamiania StartupMode.COLD. (Iecfdb, b/200160030)

Wersja 1.1.0-alfa08

29 września 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha08 została zwolniona. Wersja 1.1.0-alpha08 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Włącz testy porównawcze makr przewijania, by wrócić do interfejsu API 23 (If39c2, b/183129298)
  • Dodaj nowy typ próbkowanych wskaźnika do interfejsu użytkownika i danych wyjściowych JSON, koncentrujący się na centylach wielu próbek na iterację. (I56247, b/199940612)
  • Przełącz na wskaźniki zmiennoprzecinkowe w bibliotekach porównawczych (obcięte w interfejsie Studio). (I69249, b/197008210)

Wersja 1.1.0-alfa07

1 września 2021 roku

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha07 została zwolniona. Wersja 1.1.0-alpha07 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

  • Poprawiono funkcję ProfileInstaller, aby ułatwić aplikacjom korzystającym z profili podstawowych wykonywanie testów porównawczych makr za pomocą metody CompilationMode.BaselineProfile. (I42657, b/196074999) UWAGA: wymaga też aktualizacji do androidx.profileinstaller:profileinstaller:1.1.0-alpha04 lub nowszej.
  • Wartości porównawcze StartupMode.COLD i CompilationMode.None są teraz bardziej stabilne. (I770cd, b/196074999)

Wersja 1.1.0-alfa06

18 sierpnia 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha06 została zwolniona. Wersja 1.1.0-alpha06 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

  • Przełączono na Simpleperf jako domyślny program profilujący próbkowanie w interfejsie API 29 lub nowszym. (Ic4b34, b/158303822).

Znane problemy

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

Wersja 1.1.0-alfa05

4 sierpnia 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha05 została zwolniona. Wersja 1.1.0-alpha05 zawiera te zatwierdzenia.

Gra 1.1.0-alpha04 została anulowana przed wydaniem z powodu awarii sportowej. b/193827052

Zmiany w interfejsie API

  • Przełączono metodę startActivityAndwait, aby wywoływał uruchamianie za pomocą metody am start, co skraca czas każdej iteracji pomiaru o około 5 sekund. Nie ma już obsługi działów intencji. (I5a6f5, b/192009149)

Poprawki błędów

  • Zmniejsz agresywność wykrywania przepustnicy termicznej i ponownie oblicz wartość bazową, jeśli przepustnice są często wykrywane. (I7327b)
  • Poprawiono błąd FrameTimingMetric, który działa na Androidzie S w wersji beta (Ib60cc, b/193260119).
  • Użyj polecenia EmptyActivity, aby przywrócić aplikację docelową ze stanu wymuszonego zatrzymania 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 generuje teraz dane „fullDrawnMs”, by zmierzyć czas do zakończenia renderowania aplikacji. Aby zdefiniować te dane w aplikacji, wywołaj Activity.reportFullyDrawn, gdy początkowe treści będą gotowe, np. gdy początkowe elementy list zostaną wczytane z bazy danych lub sieci. (metoda reportFullyDrawn dostępna bez sprawdzania wersji kompilacji w komponencie KomponentActivity). Pamiętaj, że test musi trwać wystarczająco długo, aby zarejestrować dane (startActivityAndwait nie czeka na raportFullyDrawn). (If1141, b/179176560)
  • Zmniejsz koszty dodawania metadanych UI do śladów o ponad 50 ms (Ic8390, b/193923003)
  • Znacznie wzrosła częstotliwość odpytywania przy zatrzymaniu śledzenia, co może np. skrócić czas działania w testach porównawczych dla startupów o ponad 30% (Idfbc1, b/193723768)

Wersja 1.1.0-alfa03

16 czerwca 2021 r.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha03 została zwolniona. Wersja 1.1.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Przykładowy kod Gradle do eliminowania błędów analizy porównawczej został zaktualizowany i używa niewycofanego interfejsu API o składni, która obsługuje też użytkowników korzystających z formatu .gradle.kts.

    Np.

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

Wersja 1.1.0-alfa02

18 maja 2021 r.

Wersja 1.1.0-alfa02 wprowadza ważny element testów porównawczych – Macroporównanie. Oprócz testu porównawczego umożliwiającego pomiar pętli procesora macrobenchmark umożliwia pomiar interakcji w całej aplikacji, takich jak uruchamianie i przewijanie, oraz rejestrowanie logów czasu. Więcej informacji znajdziesz w dokumentacji biblioteki.

Aplikacja androidx.benchmark:benchmark-*:1.1.0-alpha02 została zwolniona. Wersja 1.1.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

Dodano artefakty makroporównania (androidx.benchmark:benchmark-macro-junit4 i androidx.benchmark:benchmark-macro)

  • Rejestruj dane o wydajności uruchamiania, przewijania lub animacji z aplikacji, lokalnie lub w CI
  • Przechwytuj i sprawdzaj ślady w Android Studio

Poprawki błędów

  • Obejście problemu z uprawnieniami powłoki w przypadku katalogu wyjściowego na Androidzie 12 (uwaga: aby nadal rejestrować pliki wyjściowe na urządzeniach, na których występuje problem, może być konieczne zaktualizowanie wtyczki Androida do obsługi Gradle do wersji 7.0.0 w wersji do wczesnych testów oraz Androida Studio do wersji Arctic Fox (2020.3.1). (Icb039)
  • Obsługa buforowania konfiguracji w BenchmarkPlugin (6be1c1, b/159804788)
  • Uproszczone dane wyjściowe plików – domyślnie włączone, w katalogu, który nie wymaga requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Rozwiązano problemy z ostrzeżeniami drukowania biblioteki logcat dotyczącymi braku możliwości znalezienia wątku JIT w wersjach platformy, w których go nie ma. (I9cc63, b/161847393)
  • Rozwiązano problem z odczytywaniem maksymalnej częstotliwości urządzenia. (I55c7a)

Wersja 1.1.0-alfa01

10 czerwca 2020 r.

Opublikowano androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 i androidx.benchmark:benchmark-junit4:1.1.0-alpha01. Wersja 1.1.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje w wersji 1.1

  • Dane alokacji – testy porównawcze przechodzą teraz dodatkową fazę po przygotowaniu i czasie, by rejestrować liczbę przydziałów. Przydziały mogą powodować problemy z wydajnością w starszych wersjach platformy (140 NS w O zmieniało się w 8 na 8 na 8 centymetrów – w przypadku Nexus5X z zablokowanymi zegarami). Te dane są wyświetlane w danych wyjściowych konsoli Android Studio oraz w sekcji
  • Obsługa profilowania – możesz teraz przechwytywać dane profilowania na potrzeby testu porównawczego, aby sprawdzić, dlaczego kod może działać wolno. Analiza porównawcza obsługuje śledzenie zarówno metod, jak i próbkowanie metod z ART. Pliki te można sprawdzić za pomocą programu profilującego w Android Studio, klikając Plik > Otwórz.
  • Wtyczka Gradle Porównania udostępnia teraz ustawienia domyślne, które ułatwiają konfigurację:
    • Domyślnie zasada testBuildType jest ustawiona na wersję premierową, aby uniknąć używania zależności z wbudowanym zakresem kodu. Element buildType wersji jest też skonfigurowany jako domyślny typ kompilacji, co umożliwia Android Studio automatyczne wybieranie odpowiedniego wariantu kompilacji przy pierwszym otwarciu projektu. (b/138808399)
    • Jako domyślna konfiguracja podpisywania używana jest signingConfig.debug (b/153583269)

** Poprawki błędów **

  • Znacznie zmniejszono koszty związane z przejściem na rozgrzewkę, przy czym pierwszy pomiar dla każdej wartości referencyjnej był sztucznie wyższy od innych. Ten problem był wyraźnie widoczny w przypadku bardzo małych testów porównawczych (do 1 mikrosekundy). (b/142058671)
  • Naprawiono błąd InstrumentationResultParser wyświetlany dla każdej testu porównawczego podczas uruchamiania z wiersza poleceń. (I64988, b/154248456)

Znane problemy

  • Wywołania testu porównawczego w wierszu poleceń lub gradle nie wyświetlają bezpośrednio wyników. Możesz obejść ten problem, uruchamiając Studio lub analizując wyjściowy plik JSON pod kątem wyników.
  • Raporty porównawcze nie pobierają raportu z urządzeń z zainstalowaną aplikacją z identyfikatorem applicationId kończącym się cyframi „android” lub „download” (wielkość liter nie ma znaczenia). Użytkownicy, którzy napotkają ten problem, powinni uaktualnić wtyczkę Androida do obsługi Gradle do wersji 4.2-alfa01 lub nowszej.

Wersja 1.0.0

Analiza porównawcza: wersja 1.0.0

20 listopada 2019 r.

Wersje androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 i androidx.benchmark:benchmark-junit4:1.0.0 zostały opublikowane bez zmian od 1.0.0-rc01. Wersja 1.0.0 zawiera te zatwierdzenia.

Główne funkcje wersji 1.0.0

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

Zapobiega problemom z konfiguracją tworzenia i czasu działania aplikacji, a także stabilizuje wydajność urządzenia, zapewniając dokładność i spójność pomiarów. Testy porównawcze możesz przeprowadzać bezpośrednio w Android Studio lub w trybie ciągłej integracji, aby obserwować wydajność kodu w czasie i zapobiegać regresjom.

Główne funkcje:

  • Stabilizacja zegara
  • Automatyczne ustalanie priorytetów wątków
  • Obsługa testowania wydajności interfejsu, na przykład w przykładzie RecyclerView.
  • Zapętlanie i rozgrzewka z uwzględnieniem JIT
  • Dane wyjściowe JSON w testach porównawczych do przetworzenia

Wersja 1.0.0-rc01

23 października 2019 r.

Opublikowano androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 i androidx.benchmark:benchmark-junit4:1.0.0-rc01. 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ą danych, który powodował, że narzędzie JIT nie kończyło się przed rozgrzewką z powodu zmniejszenia priorytetu (b/140773023)
  • Ujednolicony katalog wyjściowy JSON we wtyczce Android Gradle w wersjach 3.5 i 3.6

Wersja 1.0.0-beta01

9 października 2019 r.

Opublikowano androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 i androidx.benchmark:benchmark-junit4:1.0.0-beta01. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • Uruchamiaj zbieranie pamięci przed każdym rozruchem, aby zmniejszyć użycie pamięci z jednej analizy porównawczej do kolejnej (b/140895105)

Poprawki błędów

  • Dodano zależność androidx.annotation:android-experimental-lint, aby kod Java prawidłowo generował błędy lint, gdy nie jest używany eksperymentalny interfejs API, podobnie jak w przypadku eksperymentalnej adnotacji Kotlin dla elementów wywołujących Kotlin.
  • Teraz prawidłowo wykrywa użycie argumentu instrumentacji additionalTestOutputDir na potrzeby danych wyjściowych we wtyczce do obsługi Gradle w Androidzie 3.6, dzięki czemu wiesz, kiedy AGP będzie obsługiwać kopiowanie danych.
  • Popraw niewykrytą częstotliwość zegara w formacie JSON, aby prawidłowo wydrukować dokument -1 (b/141945670).

Wersja 1.0.0-alfa06

18 września 2019 r.

Opublikowano androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 i androidx.benchmark:benchmark-junit4:1.0.0-alpha06. Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy sprawdzanie pod kątem nieprawidłowego użycia starego pakietu w narzędziu uruchamiającym test. Teraz jest to bardziej przydatny komunikat o błędzie.

Zmiany w interfejsie API

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

Wersja 1.0.0-alfa05

5 września 2019 r.

Opublikowano androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 i androidx.benchmark:benchmark-junit4:1.0.0-alpha05. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Interfejs BenchmarkState.reportData API jest teraz oznaczony jako eksperymentalny

Poprawki błędów

  • Poprawiono skrypt blokujący zegar, który powodował awarię na urządzeniach bez 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 w starszej wersji narzędzia su, która nie obsługiwała flagi -c.

Wersja 1.0.0-alfa04

7 sierpnia 2019 r.

Opublikowano androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 i androidx.benchmark:benchmark-junit4:1.0.0-alpha04. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Dodaliśmy też nową dokumentację na temat korzystania z biblioteki testów porównawczych bez Gradle zarówno do użytku z różnymi systemami kompilacji (np. Bazel, Buck), jak i podczas pracy w CI. Więcej informacji znajdziesz w artykułach na temat tworzenia testów porównawczych bez Gradle i wykonywania testów porównawczych w trybie ciągłej integracji.

Nowe funkcje

  • Wtyczka Gradle
    • Teraz automatycznie wyłącza zakres testu i domyślnie ustawia AndroidBenchmarkRunner (b/138374050)
    • Dodaliśmy obsługę kopiowania danych w oparciu o AGP, testów porównawczych i używania AGP w wersji 3.6 lub nowszej
  • Dodanie formatu JSON
    • Wyjściowy łączny czas trwania testu porównawczego (b/133147694)
    • Testy porównawcze @Parameterized, które używają ciągu znaków z nazwą (np. @Parameters(name = "size={0},depth={1}")), teraz podają nazwy i wartości parametrów zgodne z wartościami referencyjnymi w danych wyjściowych JSON (b/132578772).
  • Tryb uruchomienia próbnego (b/138785848)
    • Dodaliśmy tryb „próbnego uruchomienia” do przeprowadzania każdej pętli porównawczej tylko raz, co pozwala na sprawdzanie pod kątem błędów/awarii bez rejestrowania pomiarów. Może to być przydatne np. podczas szybkiego uruchamiania testów porównawczych we wstępnym przesłaniu formularza, aby sprawdzić, czy nie ma błędów.

Zmiany w interfejsie API

  • Zmieniła się struktura modułu, dzieląc bibliotekę (b/138451391)
    • benchmark:benchmark-junit4 zawiera klasy z zależność JUnit: AndroidBenchmarkRunner i BenchmarkRule, które zostały przeniesione do pakietu androidx.benchmark.junit4
    • benchmark:benchmark-common zawiera resztę logiki, w tym interfejs API BenchmarkState.
    • Ten podział umożliwi bibliotece w przyszłości testy porównawcze bez interfejsów API JUnit4
  • Ostrzeżenia konfiguracji są teraz traktowane jako błędy i powodują awarię testu (b/137653596)
    • Ma to na celu zwiększenie dokładności pomiarów, zwłaszcza w CI
    • Błędy te można ograniczyć do ostrzeżeń za pomocą argumentu instrumentacji. Przykład: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Poprawki błędów

  • Błędy podczas zapisywania w pamięci zewnętrznej na urządzeniach Q zawierają bardziej szczegółowe wiadomości wraz z sugestiami rozwiązania problemu
  • Ekrany są automatycznie włączane podczas testów porównawczych, dzięki czemu nie występują błędy przy wyłączonym ekranie

Treści tłumaczone z zewnątrz

  • Dziękujemy Siergiejowi Zacharowa za przesłanie ulepszeń wyjściowych JSON i poprawienie błędów związanych z wyłączaniem ekranu.

Wersja 1.0.0-alfa03

2 lipca 2019 r.

Opublikowano androidx.benchmark:benchmark:1.0.0-alpha03 i androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Przedstaw czas trwania snu z powodu ograniczenia temperatury na podstawie wartości referencyjnej w pełnym raporcie JSON

Poprawki błędów

  • Wtyczka Gradle nie powinna już być stosowana po wtyczkach na Androidzie i bloku Androida.
  • Dodano obsługę raportów porównawczych na urządzeniach z Androidem 10 korzystających z ograniczonego miejsca na dane.

Wersja 1.0.0-alfa02

6 czerwca 2019 r.

Zwolniono androidx.benchmark:1.0.0-alpha02 i androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02. Zobowiązania uwzględnione w tej wersji znajdziesz tutaj.

Pamiętaj, że schemat JSON traktujemy jak interfejs API. Planujemy wprowadzić te same ograniczenia dotyczące stabilności co w przypadku innych interfejsów API: stabilne (z bardzo rzadkich wyjątkami) raz w wersji beta i poprawione w ostatecznej wersji. Zmiany będą pojawiać się tylko w mniejszych wersjach, a w głównych wersjach wprowadzimy zmiany lub usunięcia.

Zmiany w interfejsie API

  • Przerobiony schemat JSON. Dalsze zmiany w schemacie JSON prawdopodobnie będą ograniczone do dodawania:

    • Zmieniliśmy strukturę obiektów wyników, aby w przyszłości umożliwić obsługę dodatkowych grup danych (b/132713021)
    • Do obiektu najwyższego poziomu dodaliśmy informacje kontekstowe, 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 mają teraz w nazwie „ns” (b/132714527).
    • Dodatkowe statystyki dodane do każdego raportowanego rodzaju danych (maksymalna, mediana, minimalna) oraz usunięte uproszczone statystyki podsumowania „nanos” (b/132713851)
  • Usunięto dane wyjściowe XML (b/132714414)

  • Wykrywanie ograniczenia termicznego z interfejsu API BenchmarkState.reportData (b/132887006)

Poprawki błędów

  • Rozwiązanie problemu: ./gradlew lockClocks nie przyklejał się na niektórych ostatnich urządzeniach z systemem operacyjnym (b/133424037)
  • Wykrywanie tłumienia wyłączone w emulatorze (b/132880807)

Wersja 1.0.0-alfa01

7 maja 2019 r.

Aplikacja androidx.benchmark:benchmark:1.0.0-alpha01 została zwolniona. Zatwierdzenia zawarte w tej wersji są dostępne tutaj.