Test porównawczy
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.
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 nagetMeasurements
, 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 kompilacjinonMinified
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
doFrameTimingMetric
, 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ę parametruFrameTimingMetric
, 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)
- Dodaj
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 wprowadzeniaStartupMode.Cold
), zwłaszcza w przypadku testów porównawczych w przypadku aplikacji, które nie używają jeszcze instalatora profilu 1.3androidx.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 na500 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ównawczyStartupMode.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 APIBaselineProfileRule.collectBaselineProfile
.- Określ tylko
packageName
i zarządzaj aplikacją
- Określ tylko
- 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
iMethodTracing
. - 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 zStartupMode.COLD
może znacząco wpłynąć na czas, ponieważ biblioteka śledzenia jest wczytywana i włączona podczas uruchamiania aplikacji.
- Obsługa argumentu instrumentacji
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.
- Test porównawczy makr wymaga teraz w aplikacji docelowej
Nowe eksperymentalne interfejsy API wskaźników
- Dodano eksperymentalną funkcję
TraceSectionMetric
, która pozwala na wyodrębnianie prostego kodu czasowego z blokówtrace("") {}
w aplikacji, lub TraceMetric, aby wykorzystać pełną możliwość wysyłania zapytań w PerfettoTraceProcessor
. - 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).
- Dodano eksperymentalną funkcję
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ż przezMacrobenchmarkScope.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 odBenchmarkRule
, 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.
- Dodano eksperymentalny interfejs 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 śledzeniaIsolationActivity
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
naperfettoSdkTracing.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ść typuapi
zamiast zależnościimplementation
. (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 toframeDurationCpuMs
. (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 naBaselineProfileRule.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ą funkcjiMode.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 APIcollectStableBaselineProfile
został usunięty. Zamiast niego należy używać interfejsucollectBaselineProfile
. (I17262, b/281078707) - Zmieniono argument
filterPredicate
klasyBaselineProfileRule
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ędziudryRunMode
, 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
iandroidx.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 animacjiRenderThread
(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 zUiAutomation
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
iBaselineProfileRule
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 instrumentacjiandroidx.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 {}
iPerfettoTraceRule
, 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 problemy
– MacrobenchmarkScope.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ównawczychStartupMode.COLD
, ponieważ systemy do cieniowania są teraz regularnie czyszczone przy każdej iteracji. Wcześniej kompilacjaPartial
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 zprofileinstaller:1.3.0-alpha02
w aplikacji docelowej. Informacje o zmianach w interfejsie API bibliotekiProfileInstaller
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ładTraceSectionMetric("inflate", Mode.Sum)
poda daneinflateMs
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 interfejsemandroidx.tracing.Trace
na niższych poziomach interfejsu API przy użyciuforceEnableAppTracing
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 funkcjaStartupMode.COLD
nie kończyła procesu docelowego posetupBlock
. Teraz użytkowniksetupBlock
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
lubCompilationMode.Partial(warmupIterations)
na urządzeniu bez dostępu do roota, musisz też zaktualizować aplikację docelową do korzystania zandroidx.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 wMacrobenchmarkScope.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 odBenchmarkRule
/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 przypadkuMacrobenchmarkScope.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 parametruBaselineProfiles
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
iTotalEnergyMetric
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łudze1.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
Obsługa testów porównawczych makr Jetpack, które umożliwiają pomiar interakcji w całej aplikacji, takich jak uruchamianie i przewijanie, zapewnia możliwość rejestrowania logów czasu i pomiarów sekcji logów czasu.
Obsługa profili podstawowych
CompilationMode.Partial
, aby zmierzyć skuteczność profili podstawowych.@BaselineProfileRule
, aby automatycznie generować profile bazowe dla danej krytycznej ścieżki użytkownika.
Obsługa danych alokacji i profilowania podczas uruchomień mikroporównawczych.
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
) zpressHome()
. (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 poleceniaBaselineProfiles
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ą plikCompilationMode.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 wersjiandroidx.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ż blokasetup
, ponieważ działa tak samo jakprofileBlock
. (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
lubandroidx.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 jakoNone
(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ści23
. (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ą metodyCompilationMode.BaselineProfile
. (I42657, b/196074999) UWAGA: wymaga też aktualizacji doandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
lub nowszej. - Wartości porównawcze
StartupMode.COLD
iCompilationMode.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
- Dodano nowy element
CompilationMode.BaselineProfile
do obsługi profili zainstalowanych przy użyciu biblioteki Jetpack ProfileInstaller. (Aosp/1720930)
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)
- Domyślnie zasada
** 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
lubexpr
. - 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
- Teraz automatycznie wyłącza zakres testu i domyślnie ustawia
- 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
iBenchmarkRule
, które zostały przeniesione do pakietuandroidx.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.