Test porównawczy
androidx.benchmark
androidx.benchmark.junit4
androidx.benchmark.macro
androidx.benchmark.macro.junit4
Najnowsza aktualizacja | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
10 lipca 2024 r. | 1.2.4 | - | 1.3.0-beta02 | - |
Deklarowanie zależności
Aby dodać zależność do analizy porównawczej, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
Test porównawczy
Aby użyć narzędzia Macrobenchmark w projekcie, dodaj do pliku build.gradle
te zależności 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") }
Mikrotest porównawczy
Aby użyć mikrotestu w projekcie, dodaj do pliku build.gradle
te zależności modułu microbenchmark:
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 odkryjesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj istniejące problemy w tej bibliotece. Możesz oddać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia do śledzenia problemów.
Wersja 1.3
Wersja 1.3.0-beta02
10 lipca 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-beta02
została zwolniona. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Obsługuj kod ExitCODE
2
po uruchomieniu Perfetto, aby zapisać ostrzeżenie, i kontynuuj.
Wersja 1.3.0-beta01
12 czerwca 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-beta01
została zwolniona. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Nazwa
MethodTracing.affectsMeasurementOnThisDevice
została zmieniona naAFFECTS_MEASUREMENT_ON_THIS_DEVICE
w celu zachowania spójności. (I1bdfa). - Dodano eksperymentalny interfejs API
BlackHole.consume()
, aby zapobiec eliminacji martwych kodów w mikrotestach porównawczych. (If6812, b/286091643) - Mikroporównawczy test porównawczy będzie teraz poprawnie zwracał wyniki, aby zapobiegać zakłóceniu śledzenia metody na zakłócenie pomiarów. Dzieje się tak na niektórych urządzeniach, gdy śledzenie metody jest wymuszone (za pomocą argumentów instrumentacji lub
MicrobenchmarkConfig
) i jeśli próba pomiaru jest przeprowadzana po wykonaniu logu czasu metody. Urządzenia, których dotyczy problem, korzystają z interfejsu API w wersji 26–30 lub w niektórych wersjach modułu głównej ART, w których występuje to zakłócenie. Można je wykryć w czasie działania za pomocą funkcjiProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864)
Poprawki błędów
- Zalecana maksymalna wersja AGP z poprawioną wartością 9.0.0-alfa01. (I5bbb0)
- Tryb kompilacji został dodany do kontekstu testu porównawczego (If5612, b/325512900)
- Włącz domyślnie śledzenie AIDL (wymaga interfejsu API 28) (Ia0af2, b/341852305)
- Dodaliśmy dodatkowe informacje w kontekście testu porównawczego w danych wyjściowych JSON:
context.artMainlineVersion
– wersja całkowita modułu Art mainline (jeśli znajduje się na urządzeniu, -1 w innym przypadku).context.build.id
– równa sięandroid.os.Build.ID
context.build.version.codename
– równa sięandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
– odpowiada pierwszej literze przedpremierowego kryptonimu (nawet w kompilacjach wersji) (Ie5020)
- Naprawia
StackSampling
, aby uwzględnić wartośćandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - Zmień zależność makro->wspólną na
api()
, aby łatwiej było jej używać, np.PerfettoTrace
iPerfettoConfig
. (Icdae3, b/341851833) - Sprawdź, czy zadania
mergeArtProfile
imergeStartupProfile
zawsze czekają na wygenerowanie profilu podstawowego. (I623d6, b/343086054) - Decydując, czy wariant powinien zostać włączony, weź pod uwagę stan włączenia wariantu. (I5d19e, b/343249144)
- Wydłużony domyślny czas oczekiwania na uruchomienie procesora śledzenia perfetto. (I87e8c, b/329145808)
Wersja 1.3.0-alpha05
14 maja 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-alpha05
została zwolniona. Wersja 1.3.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów
- Zgłoś wyraźniejszy wyjątek, gdy wskaźnik w makrobench zwraca zero wartości we wszystkich iteracjach (Iab58f, b/314931695)
- Dodatkowe reguły obejścia dodane do reguł mikrobenchu ProGuard, w tym obsługę reguł detektora i innych zaobserwowanych ostrzeżeń / błędów. (I14d8f, b/329126308, b/339085669)
- Śledzenie metod działa jako osobna faza podczas analizy porównawczej i nie ma już wpływu na pomiary. (If9a50, b/285912360, b/336588271)
- Dodaliśmy dodatkowe sugestie dotyczące debugowania, aby usunąć komunikat o błędzie transmisji funkcji cieniowania. (I5efa6, b/325502725)
Wersja 1.3.0-alfa04
1 maja 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-alpha04
została zwolniona. Wersja 1.3.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano eksperymentalny wariant
MacrobenchmarkRule#measureRepeated
, który wykorzystuje niestandardową wartośćPerfettoConfig
, aby w pełni dostosować rejestrowanie logu czasu Perfetto. Pamiętaj, że nieprawidłowo skonfigurowane konfiguracje mogą powodować błędy wbudowanych klas wskaźników. (Idfd3d, b/309841164, b/304038384) - Aby zwiększyć przejrzystość, zmień nazwę
PowerMetric.deviceSupportsPowerEnergy
naPowerMetric.deviceSupportsHighPrecisionTracking
(I5b82f) - Dodano zasady
PowerMetric.deviceBatteryHasMinimumCharge()
iPowerMetric.deviceSupportsPowerEnergy()
, aby umożliwić zmianę lub pomijanie testów porównawczych w zależności od możliwości pomiaru mocy urządzenia. (I6a591, b/322121218)
Poprawki błędów
- Dodano porównanie z poprzednim profilem bazowym (I824c8, b/269484510)
- Dodano DSL do wyłączania ostrzeżeń (Ic4deb, b/331237001)
- Zmieniono wyjątek z dziennika informacji, gdy wersje testu porównawczego są wyłączone (I8a517, b/332772491)
- Ułatw rejestrowanie logów czasu metody w makroporównawczym na poziomie czasu trwania rzeczywistego
measureBlock()
. Wcześniej rozpoczął się od uruchomienia procesu docelowego i obsługiwał tylko uruchomienia „na zimno” (Iee85a, b/300651094). - Unikaj awarii, gdy procesor śledzenia perfetto uruchamia się powoli (I98841, b/329145808)
Wersja 1.3.0-alfa03
17 kwietnia 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-alpha03
została zwolniona. Wersja 1.3.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaje publiczne interfejsy API
PerfettoTraceProcessor.Session.queryMetrics
w wersjach JSON, textproto i proto binarnych (niezakodowanych). Umożliwiają one wysyłanie zapytań o dane wbudowane w procesor TraceProcessor (I54d7f, b/304038382). - Dodano
profilerOutput
do danych wyjściowych JSON, aby ułatwić korzystanie z narzędzi dotyczących logów czasu profilowania (np. perfetto, śledzenie metody). (I05ddd, b/332604449) - Dodano tag zasilania do konfiguracji porównawczej Perfetto. W ten sposób przechwytuje się na przykład punkty śledzenia blokad uśpienia. (Icfe44, b/286551983)
- Dodano argument inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
. Można go ustawić na wartość false, aby uniknąć pomijania logów czasu, gdy oczekiwany czas trwania może spowodować błąd ANR. Zdecydowanie zalecamy unikać tych logów podczas uruchamiania CI. - Dodano eksperymentalny argument inst.
androidx.benchmark.profiling.perfCompare.enable
. Ustaw tę wartość na „prawda”, aby uruchamiać porównanie czasu pomiaru między fazami pomiaru i profilowania. Przydatne np. do oceny narzutu na śledzenie metod. (I61fb4, b/329146942)
Zmiany interfejsu API
- Zmieniono klasę
TraceSectionMetric.Mode
na zapleczoną klasę, aby umożliwić rozszerzanie w przyszłości bez przerywania szczegółowych instrukcji (I71f7b) - Dodano argumenty
TraceSectionMetric.Mode.Average
i.Count
oraz zmieniono kolejność argumentów, tak aby bardziej powszechny argument (mode) znajdował się wcześniej na liście argumentów, co zmniejsza potrzebę określania nazw parametrów. (Ibf0b0, b/315830077, b/322167531) - Zmieniono nazwę
Metric.getResult
nagetMeasurements
, aby dopasować zwracany typ (I42595)
Poprawki błędów
- Rozwiąż problem, aby testy porównawcze korzystały z wygenerowanych profili podstawowych, gdy zasada
automaticGenerationDuringBuild
jest wyłączona (Ic144f, b/333024280) - Popraw zastąpienia właściwości wtyczki Gradle
BaselineProfile
, aby umożliwić generowanie profilu podstawowego i testy porównawcze podczas dostosowywania typu kompilacjinonMinified
lub testu porównawczego. (Ib8f05, b/324837887) - Naprawione ślady metod są usuwane w makroporównaniu, dzięki czemu ślady metod powinny być w pełni rejestrowane i prawidłowe, nawet na wolniejszych urządzeniach. (I6349a, b/329904950)
- Włącz uruchamianie blokowania w rekordzie śledzenia Perfetto, aby zmniejszyć ryzyko utraty danych na początku śledzenia. Obsługiwane tylko w interfejsie API w wersji 33 i nowszych (Ie6e41, b/310760059).
- Dodaliśmy ostrzeżenie w przypadku użycia narzędzia Android Testinteresor w modułach testów porównawczych, ponieważ spowoduje to wielokrotne zastępowanie wyjściowych plików JSON poszczególnych modułów. (Ia1af6, b/286899049)
- Wymuszaj separatory tysięcy (, przecinki) w celu zachowania spójności w danych wyjściowych Studio, ignorując język urządzenia (I3e921, b/313496656)
TraceSectionMetric
obsługuje teraz wycinki utworzone za pomocą metodyTrace.{begin|end}AsyncSection
. (I91b32, b/300434906)- Dodano etykiety log.w / Wyjątek do wszystkich błędów związanych z wykrywaniem uruchamiania. Nie zmienia to bieżącego zachowania (niektóre błędy zgłaszają, a inne dyskretnie nie wykrywają uruchomienia). Po prostu sprawia, że jest to bardziej zrozumiałe. Zasadniczo żądania
Log.w()
, które nie raportują danych początkowych, to te, w których brakuje zdarzeń niebędących klatkami. 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 deksoptowania w tle przed uruchomieniem makroporównania. (I989ed)
- Dodano pomiar
frameCount
doFrameTimingMetric
, aby ułatwić wykrywanie scenariuszy, w których pomiary zmieniają się w wyniku zmiany liczby wygenerowanych klatek (dodano nowe animacje, rozwiązano problemy z unieważnieniem). (I1e5aa). - Doprecyzowaliśmy, że
frameOverrunMs
to preferowane dane do śledzenia, gdy są dostępne w dokumentach, i dlaczego. (I18749, b/329478323)
Wersja 1.3.0-alfa02
20 marca 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-alpha02
została zwolniona. Wersja 1.3.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
Eksperymentalna obsługa R8 w mikrobench przy użyciu osadzonych reguł ProGuard. Pamiętaj, że jest to funkcja eksperymentalna i wymaga AGP 8.3 do minifikacji testów modułów biblioteki. Użyj poniższych instrukcji, aby włączyć minifikację/optymalizację R8 w
build.gradle
modułu analizy porównawczej. Może to znacznie zwiększyć wydajność 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 metody umieszczone w oddzielnej linii od danych wyjściowych w mikroławce. (I0455c, b/328308833)
Wersja 1.3.0-alpha01
21 lutego 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-alpha01
została zwolniona. Wersja 1.3.0-alfa01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Zmieniono nazwę parametrów logicznych
MicrobenchmarkConfig
, aby uniknąć zbędnego słowa „powinien” (Ia8f00, b/303387299) - Dodano dyrektywę
BenchmarkRule.measureRepeatedOnMainThread
, aby testy porównawcze wątku głównego (np. te wykorzystujące interfejs Widok lub interfejs tworzenia wiadomości) mogły uniknąć wywoływania błędów ANR, zwłaszcza w dużych pakietach w CI. (I5c86d) - Dodano
FrameTimingGfxInfoMetric
, eksperymentalną alternatywną implementacjęFrameTimingMetric
, w której pomiary pochodzą bezpośrednio z platformy, a nie pobierane ze śledzenia Perfetto. (I457cb, b/322232828) - Dodaj możliwość zrzutu profilu ART podczas poszczególnych iteracji
warmUp
. (I17923) - Kilka zmian w interfejsie API
TraceSectionMetric
:- 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 wskaźnika
- Zmieniono wartość domyślną na sumę, ponieważ większość użycia tych danych dotyczy zdarzeń powtarzanych Pamiętaj o tych zmianach w wykorzystaniu CI, ponieważ mogą one powodować nieciągłości lub przerywanie analizy. (Ic1e82, b/301892382, b/301955938)
- Dodaj
Poprawki błędów
- Poprawiony komunikat o błędzie we wtyczce narzędzia Gradle profilu podstawowego, gdy określone urządzenie zarządzane nie istnieje (Idea2b, b/313803289)
- Poprawka polegająca na uwzględnianiu profili podstawowych biblioteki w AAR przed wersją 8.3.0-alfa15 AGP (I1d2af, b/313992099)
- Poprawiono adres URL punktu odniesienia i wyjściowego profilu uruchamiania na końcu zadania generowania (I802e5, b/313976958)
- Skorygowano czas oczekiwania źródła danych na próbę usunięcia błędu
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) - Dodaj 2 argumenty instrumentacji, które powodują pomijanie mechanizmu cieniowania w celu obejścia awarii podczas testowania aplikacji bez
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: tej opcji można użyć do pominięcia całego procesu usuwania cieniowania (łącznie z etapami uruchamianymi wStartupMode.Cold
), zwłaszcza przy porównywaniu aplikacji, które nie korzystają jeszcze z programu Profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: można go użyć, aby tolerować błędy występujące podczas próby usunięcia modułów do cieniowania, na przykład przy analizie aplikacji porównawczych bez narzędzia Profileinstaller 1.3 (I4f573).
- Pomiń śledzenie metody w wątku UI, gdy powinno to trwać dłużej niż kilka sekund, i ślady metody czyszczenia podczas przesyłania. (I6e768)
- Zrzucaj pliki, gdy nazwy plików zawierają więcej niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab).
- Rozwiązaliśmy problem polegający na tym, że niezakończone klatki na początku i na końcu śledzenia mogły być ze sobą sparowane, przez co były one nieprawidłowo raportowane jako jedna bardzo długa klatka. (I39353, b/322232828)
- Aby wyczyścić profile ART w kompilacjach użytkowników, użyj interfejsu
--skip verification
w interfejsie API w wersji 30 lub nowszej podczas ponownego instalowania pakietu za pomocą interfejsu API 30–33. Pomaga to ominąć ostrzeżenia Play Protect, które powodują awarie na niektórych klasach urządzeń. (IC9e36) - Za pomocą
am force-stop
zamykaj aplikacje, jeśli nie są to aplikacje systemowe, takie jak interfejs systemu czy Menu z aplikacjami. (I5e028) - Macrobenchmark czeka teraz, aż aplikacja docelowa opróżnia profil ART (wcześniej
1 second
), aż aplikacja docelowa (wcześniej czekała na500 ms
). (I85a50, b/316082056) - Popraw błąd
FrameTimingMetric
, gdy ramki nie są tworzone, i zawsze wysyłaj link do logu czasu, gdy analiza wskaźnika nie działa, co ułatwia diagnozowanie problemu. (I956b9) - Rozwiązaliśmy problem z błędem analizy identyfikatora ramki w
FrameTimingMetric
, zwłaszcza na niektórych urządzeniach OEM. (Ia24bc, b/303823815, b/306235276) - Zmniejszono rygorystyczność kontroli w pliku
FrameMetrics
i dodano więcej szczegółów do komunikatów o błędach. (Iadede).
Wersja 1.2
Wersja 1.2.4
17 kwietnia 2024 r.
Usługa androidx.benchmark:benchmark-*:1.2.4
została zwolniona. Wersja 1.2.4 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawia atrybut srcset profilu podstawowego, który nie jest konfigurowany w wariantach testów porównawczych. Poprawiono też
automaticGenerationDuringBuild
w bibliotekach, powodując zależność cykliczną. (I28ab7, b/333024280) - Za pomocą
am force-stop
zamykaj aplikacje, jeśli nie są to aplikacje systemowe, takie jak interfejs systemu czy Menu z aplikacjami. Rozwiązano problem z testami porównawczymi typuStartupMode.COLD
zawierającymi awarię „Pakiet $package nie może być uruchomiony przed uruchomieniem „na zimno!”, ponieważ zakończenie procesu nie zostało w pełni zakończone. (I5e028)
Wersja 1.2.3
24 stycznia 2024 r.
Usługa 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 Baseline w wersji 8.3.0 lub nowszej AGP.
- Poprawka polegająca na uwzględnianiu profili podstawowych biblioteki w AAR przed wersją 8.3.0-alfa15 AGP.
Wersja 1.2.2
1 grudnia 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.2
została zwolniona. Wersja 1.2.2 zawiera te zatwierdzenia.
Profile podstawowe
- Dzienniki wykonywania pokazują ścieżkę pliku wyjściowego profilu podstawowego jako identyfikator URI pliku lokalnego (aosp/2843918, aosp/2853665, b/313976958)
Wersja 1.2.1
15 listopada 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.1
została zwolniona. Wersja 1.2.1 zawiera te zatwierdzenia.
Nowe funkcje
- Ulepszony komunikat o błędzie, który pojawia się, gdy użytkownik wyłączy warianty testowe (b/307478189).
- Dodano właściwości do obsługi integracji uruchamiania testów AS (b/309805233), (b/309116324)
Wersja 1.2.0
18 października 2023 r.
Usługa 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 obsługi profilu bazowego automatyzuje przechwytywanie i umieszczanie profili podstawowych w procesie testowania i kompilacji.
- Wersja
BaselineProfileRule.collect
jest teraz stabilna – uproszczona i uproszczona wersja poprzedniego eksperymentalnego interfejsu APIBaselineProfileRule.collectBaselineProfile
- Po prostu określ
packageName
i zacznij uruchamiać aplikację
- Po prostu określ
- W przypadku bibliotek generujących profile podstawowe możesz teraz filtrować reguły wygenerowane w kodzie (argument
BaselineProfileRule.collect
) lub jeszcze prostszym sposobem we wtyczce Gradle - Poprawki
- Poprawiono podstawowe zbieranie profili na Androidzie U+ (Id1392, b/277645214)
Makroanaliza
- Kompilacja
- Narzędzie Macrobenchmark teraz prawidłowo w pełni resetuje stan kompilacji każdej kompilacji. Wymaga to ponownego zainstalowania pakietu APK przed Androidem 14. Jeśli więc chcesz zachować mierzony stan (np. logowanie się użytkownika) na Androidzie 14 lub nowszym, zdecydowanie zalecamy przeprowadzenie testów porównawczych na Androidzie 14 lub nowszym.
- Możesz też obejść ten problem, osobno kontrolując kompilację aplikacji i pomijając kompilację za pomocą parametru
CompilationMode.Ignore()
lub argumentu instrumentu.
Argumenty instrumentacji
- Obsługa argumentu instrumentacji
androidx.benchmark.dryRunMode.enable
(już dostępna w mikrotestach porównawczych), co przyspiesza weryfikację (np.podczas tworzenia testu porównawczego lub podczas wstępnego przesyłania). - Pomoc do
androidx.benchmark.profiling.mode=StackSampling
iMethodTracing
. - Dodano interfejs
androidx.benchmark.enabledRules
, aby umożliwić przeprowadzanie testów podstawowych filtrowania w czasie działania i reguł analizy porównawczej - Dodano argument
androidx.benchmark.perfettoSdkTracing.enable
, który umożliwia śledzenie za pomocą funkcji „tracing-perfetto”, np. śledzenie zmiany kompozycji w wiadomości. Pamiętaj, że gdy jest używana z funkcjąStartupMode.COLD
, znacznie wpływa na czas, ponieważ biblioteka śledzenia jest ładowana i włączona podczas uruchamiania aplikacji.
- Obsługa argumentu instrumentacji
Wymagania
- Aby można było włączyć przechwytywanie / resetowanie profilu i czyszczenie pamięci podręcznej cieniowania, usługa Macrobenchmark wymaga teraz
ProfileInstaller
w wersji 1.3.0 lub nowszej w aplikacji docelowej.
- Aby można było włączyć przechwytywanie / resetowanie profilu i czyszczenie pamięci podręcznej cieniowania, usługa Macrobenchmark wymaga teraz
Nowe eksperymentalne interfejsy API do pomiarów
- Dodano eksperymentalną funkcję
TraceSectionMetric
, która umożliwia wyodrębnianie prostych bloków czasu ztrace("") {}
w aplikacji lub TraceMetric, aby wykorzystać wszystkie możliwości zapytań PerfettoTraceProcessor
. - Dodano eksperymentalną funkcję
PowerMetric
do rejestrowania informacji o zużyciu energii - Dodano eksperymentalną
MemoryCountersMetric
do liczenia 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 (znanych też w logach Perfetto)
- Dodano eksperymentalną funkcję
Poprawki
- Rozwiązaliśmy problemy powodujące awarie, które występowały podczas instalowania lub wyodrębniania profili z aplikacji zainstalowanej z wielu plików APK (np. z pakietu aplikacji).
- Naprawiono
FrameTimingMetric
ignorowanie klatek z niespójnymi identyfikatorami klatek (zwykle w przypadku interfejsu API w wersji 31 i nowszych klatki te były ignorowane) (I747d2, b/279088460) - Usunięto błędy analizy logów czasu > 64 MB (Ief831, b/269949822)
- Naprawiono błędy, które wystąpiły, gdy obraz systemu operacyjnego urządzenia (zwłaszcza emulatora) nie jest 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 bardziej wyraźnymi błędami dla nieprawidłowych katalogów wyjściowych i bezpieczniejszą wartością domyślną
- Poprawiono stabilność aplikacji
StartupMode.COLD
przez ciągłe usuwanie pamięci podręcznej cieniowania (udostępnianej też przezMacrobenchmarkScope.dropShaderCache
) - Naprawiono kreację zastępczą Leanback dla
startActivityAndWait
.
Mikrotesty porównawcze
- Funkcje
- Profilowanie zostało przeniesione do oddzielnej fazy, po innych wskaźnikach, dzięki czemu 1 test może wyświetlić zarówno dokładny czas, jak i wyniki profilowania.
- Eksperymentalne interfejsy API
- Dodano eksperymentalny interfejs API
MicrobenchmarkConfig
do definiowania niestandardowych danych oraz konfigurowania śledzenia i profilowania. Może być używana do rejestrowania logów czasu metod lub punktów śledzenia (pamiętaj o narzutach). - Dodano eksperymentalne interfejsy API do kontrolowania
BenchmarkState
niezależnie odBenchmarkRule
, bez JUnit - Dodano eksperymentalny rekord
PerfettoTrace
, aby umożliwić przechwytywanie logów czasu Perfetto z konfiguracją niestandardową niezależnie od interfejsów API do analizy porównawczej.
- Dodano eksperymentalny interfejs API
- Poprawki
- Aby obejść ten problem, brakuje wiodących odstępów w wynikach testu porównawczego Android Studio.
- Rozwiązaliśmy problem, który powodował, że ostrzeżenia mogły nie zostać wydrukowane w wynikach testu porównawczego Android Studio.
- Naprawiliśmy awarię
SampledProfiling
na Androidzie 13 (API 33) i nowszych. - Znacznie ulepszona wydajność
dryRunMode
dzięki pominięcie śledzeniaIsolationActivity
i Perfetto (nawet 10 razy szybsze uruchomienie próbne w starszych wersjach systemu operacyjnego).
Wersja 1.2.0-rc02
6 października 2023 r.
Usługa 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 analizy porównawczej, aby nie zakłócać kopiowania plików wtyczki
BaselineProfile
. Pliki zostały wygenerowane i skopiowane poza urządzenie, ale zmieniono ich nazwy tak, że wtyczka Gradle ich nie widzi. (I8dbcc, b/303034735, b/296453339) - Doprecyzowaliśmy
tracing-perfetto
o komunikatach o błędach ładowania podczas wstrzykiwania z modułu makroporównania do aplikacji docelowej.
Wersja 1.2.0-rc01
20 września 2023 r.
Usługa 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 testach porównawczych, zgłaszany jest wyjątek (z instrukcjami rozwiązania problemu). (I6c878, b/286228781)
- Naprawa błędu „brak pamięci” podczas konwertowania logu czasu metody ART -> format perfetto. (I106bd, b/296905344)
- (Macrobenchmark) Doprecyzowano etykiety śledzenia metody połączone w danych wyjściowych testowych Studio oraz nazwy plików śledzenia metod stałych, aby były unikalne na urządzeniu lub hoście, więc nie zostaną zastąpione podczas wykonywania więcej niż 1 testu porównawczego. (I08e65, b/285912360)
- Zapewnia, że podczas rejestrowania profilu podstawowego urządzenie jest aktywne. (I503fc)
Wersja 1.2.0-beta05
30 sierpnia 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-beta05
została zwolniona. Wersja 1.2.0-beta05 zawiera te zatwierdzenia.
Nowe funkcje
- Wtyczka do obsługi Gradle profilu Baseline obsługuje teraz wtyczkę Androida do obsługi Gradle w wersji 8.3. (Aosp/2715214).
Wersja 1.2.0-beta04
23 sierpnia 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-beta04
została zwolniona. Wersja 1.2.0-beta04 zawiera te zatwierdzenia.
Nowe funkcje
- Wtyczka do obsługi Gradle profili Baseline obsługuje teraz wtyczkę Androida do obsługi Gradle w wersji 8.3. (Aosp/2715214).
Poprawki błędów
- Napraw błędy związane z zapisywaniem, przenoszeniem i pobieraniem plików (zwłaszcza tych pochodzących z testów z parametrami), dokładnie przeczyszczając nazwy plików wyjściowych, unikając stosowania znaków „=” i „:” w nazwach plików wyjściowych. (I759d8)
Wersja 1.2.0-beta03
9 sierpnia 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-beta03
została zwolniona. Wersja 1.2.0-beta03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano argument do filtra
TraceSectionMetric
tylko do pakietu docelowego (domyślnie włączony Ia219b, b/292208786)
Poprawki błędów
- Zmieniono nazwę argumentu instrumentacji
fullTracing.enable
naperfettoSdkTracing.enable
w celu zachowania spójności z nazwą artefaktu i innych odwołań.fullTracing.enable
będzie nadal działać jako kreacja zastępcza. (I7cc00) - Wewnętrzne punkty śledzenia biblioteki testów porównawczych (w tym pętla mikroporównania/śledzenie faz) będą teraz widoczne w przeglądarce śledzenia systemu w Studio i zagnieżdżone w odpowiednim procesie w Perfetto. (I6b2e7, b/293510459)
- Usunięto błąd pomiaru porównawczego typu NOT-PROFILEABLE typu NOT-PROFILEABLE i usunięto możliwość profilowania na urządzeniach z dostępem do roota eng/userdebug. (I2abac, b/291722507)
- Podczas korzystania z optymalizacji układu Dex reguły profilu startowego są teraz uznawane za reguły profilu podstawowego. (Aosp/2684246, b/293889189)
Wersja 1.2.0-beta02
26 lipca 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-beta02
została zwolniona. Wersja 1.2.0-beta02 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano eksperymentalne interfejsy API do niestandardowych wskaźników i konfiguracji w mikrobench (np. program profilujący i śledzący). (I86101, b/291820856)
Poprawki błędów
- Zgłaszaj w Macrobench błąd związany z nieprawidłową konfiguracją systemu operacyjnego na potrzeby śledzenia, ponieważ został on ostatnio naprawiony w emulatorach interfejsu API 26/28 ARM64. (I0a328, b/282191686)
- Dodaliśmy szczegóły do błędu resetowania kompilacji, które sugeruje aktualizację emulatora, ponieważ niektóre emulatory niedawno rozwiązały ten problem. (I8c815, b/282191686)
- Ustaw
androidx.test.uiautomator:uiautomator:2.2.0
jakoapi
zamiast zależnościimplementation
. (I1981e).
Wersja 1.2.0-beta01
18 lipca 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-beta01
została zwolniona. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Usuń ostrzeżenia, które są czasami pomijane w wynikach testu porównawczego w Studio, i rozwiąż wiodące odstępy z wyników testu porównawczego, które nie pojawiają się w Studio (Ia61d0, b/227205461, b/286306579, b/285912360).
- Poprawiono komentarz dotyczący elementu
FrameTimingMetric
. Dane podrzędne mają nazwęframeDurationCpuMs
. (Ib097f, b/288830934).
Wersja 1.2.0-alfa16
21 czerwca 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha16
została zwolniona. Wersja 1.2.0-alfa16 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Nazwa interfejsu API
BaselineProfileRule.collectBaselineProfile()
została zmieniona naBaselineProfileRule.collect()
. (I4B665)
Poprawki błędów
- Obsługa testów porównawczych
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360) - Profilowanie w ramach mikrotestów zostało przeniesione do oddzielnej fazy, więc odbywa się w sekwencji po pomiarze, zamiast zastępować je. Sekcje logu czasu
MethodTracing
są teraz też zawarte w przechwyconym logu czasu Perfetto, jeśli występuje. (I9f657, b/285014599) - Dodaj pomiar liczby do
TraceSectionMetric
za pomocąMode.Sum
. (Ic121a, b/264398606)
Wersja 1.2.0-alfa15
7 czerwca 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha15
została zwolniona. Wersja 1.2.0-alfa15 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano eksperymentalną funkcję
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ść pomijającą generowanie profilu podstawowego. Wykorzystanie:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
Zmiany interfejsu API
- Interfejs
collectBaselineProfile
API zawsze generuje stabilne profile podstawowe. InterfejscollectStableBaselineProfile
API został usunięty i zamiast niego należy używać interfejsucollectBaselineProfile
. (I17262, b/281078707) - Zmieniono argument
filterPredicate
funkcjiBaselineProfileRule
na niepustą, podając równoważną wartość domyślną, aby domyślny sposób działania filtra był bardziej zrozumiały w dokumentach. (I3816e)
Poprawki błędów
- Wyłącz śledzenie
IsolationActivity
i Perfetto wdryRunMode
, aby znacznie poprawić wydajność, ponieważ dotyczyły one większości czasu działania. (Ie4f7d) - Obsługa próbkowania stosu wywołań w makroporównaniach porównawczych z wykorzystaniem argumentów testu instrumentacji
androidx.benchmark.profiling.mode=StackSampling
iandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Naprawia awarię, która występowała podczas usuwania cieniowania w Androidzie U (API 34) oraz w emulatorach. (I031ca, b/274314544)
Wersja 1.2.0-alfa14
3 maja 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha14
została zwolniona. Wersja 1.2.0-alfa14 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiąż problem z ignorowaniem klatek z niespójnymi identyfikatorami klatek (
FrameTimingMetric
). Może to spowodować, że niektóre animacje na najnowszych wersjach platformy (API 31 i nowszych) będą ignorować wiele klatek w czasie, gdy funkcjaRenderThread
animowała (np. podczas fali). (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) - Napraw skrypt blokujący zegar GPU, aby poprawnie porównać ciągi znaków (I53e54, b/213935715)
Wersja 1.2.0-alfa13
5 kwietnia 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha13
została zwolniona. Wersja 1.2.0-alfa13 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano parametr typu profilu podczas generowania profili podstawowych w celu obsługi funkcji nadchodzącego 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 podczas testu porównawczego. (I48db0)
Wersja 1.2.0-alfa12
22 marca 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha12
została zwolniona. Wersja 1.2.0-alfa12 zawiera te zatwierdzenia.
Nowe funkcje
- Udostępniliśmy nową wtyczkę do narzędzia Gradle profilu podstawowego w wersji alfa, która ułatwia wygenerowanie profilu podstawowego i upraszcza przepływ pracy programisty.
Zmiany interfejsu API
- W interfejsach API 21 i 22 usunęliśmy obsługę śledzenia Perfetto, która obejmuje zarówno testy porównawcze oraz eksperymentalne interfejsy API
PerfettoTrace
. Przed tą wersjąUiAutomation
połączenia nie zawsze były wiarygodne na niektórych urządzeniach. (I78E8C) - Dodano publiczny eksperymentalny interfejs API dla
PerfettoTraceProcessor
, aby umożliwić analizowanie treści logu czasu. Jest 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.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha11
została zwolniona. Wersja 1.2.0-alfa11 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problemy powodujące awarie, które występują w
MacrobenchmarkRule
iBaselineProfileRule
, gdy występowały 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
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha10
została zwolniona. Wersja 1.2.0-alfa10 zawiera te zatwierdzenia.
Nowe funkcje
- Dzięki nowej funkcji platformy Macrobenchmark na Androidzie 14 i nowszych nie instaluje już aplikacji docelowych, aby zresetować stan kompilacji. Wcześniej przed każdym testem porównawczym konieczne było korzystanie z urządzenia z dostępem do roota lub usuwanie całego stanu aplikacji (np. loginu). (I9b08c, b/249143766)
Poprawki błędów
- Rozwiąż problem z awarią
DryRunMode
, aby nie ulegać awarii przy pustym profilu z powodu pomijania kompilacji. Zamiast tego przeprowadza pojedynczą iterację i wyodrębnia profil, aby mieć pewność, że coś zostanie przechwycone. (I2f05d, b/266403227) - Usunięto awarię
PowerMetric
występującą podczas sprawdzania obecności statystyk zasilania na starych poziomach interfejsu API. (5faaf9, b/268253898)
Wersja 1.2.0-alpha09
11 stycznia 2023 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha09
została zwolniona. Wersja 1.2.0-alfa09 zawiera te zatwierdzenia.
Poprawki błędów
- Włączono przekazywanie danych
None
do argumentu instrumentacjiandroidx.benchmark.enabledRules
, aby wyłączyć wszystkie testy porównawcze / generowanie profilu podstawowego. (I3d7fd, b/258671856) - Napraw przechwytywanie
PerfettoTrace
w modułach aplikacji (tj. w niesamoinstrumentowych testowych plikach APK) (I12cfc) - Poprawiono kolejność argumentów pobierania adb w profilu podstawowym w danych wyjściowych Studio (I958d1, b/261781624)
- Interfejs Arm emulator API 33 jest teraz prawidłowo rozpoznawany podczas próby przeprowadzenia testu porównawczego i prawidłowo wyświetla ostrzeżenie. (69133b,b/262209591)
- Pomiń sprawdzanie poziomu naładowania baterii na urządzeniach bez baterii w narzędziu Macrobenchmark (fe4114, b/232448937)
Wersja 1.2.0-alpha08
7 grudnia 2022 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha08
została zwolniona. Wersja 1.2.0-alfa08 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodaliśmy nowe, eksperymentalne interfejsy API
PerfettoTrace.record {}
iPerfettoTraceRule
do rejestrowania logów czasu Perfetto (nazywanych też śladami systemu) w celu zbadania zachowania i wydajności testów. (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 dla N iteracji. (I923f3) - Dodanie możliwości określania prefiksu nazwy pliku wyjściowego podczas generowania profili podstawowych za pomocą funkcji
BaselineProfileRule
. (I7b59f, b/260318655)
Poprawki błędów
- Zwiększ bezpieczeństwo zapisywania danych wyjściowych plików, ponieważ powinno zapobiegać dyskretnemu zapisywaniu/dołączaniu plików wyjściowych, zwłaszcza w przypadku interfejsu API 21 grudnia 2022 r. (If8c44, b/227510293)
- Napraw dane wyjściowe logu
simpleperf
, aby poprawnie utworzyć i umieścić plik. Powinno to też ogólnie rozwiązać problemy powodujące niepowodzenie pobierania pliku przez Gradle. (I12a1c, b/259424099) - Popraw komunikat o błędzie profileinstaller drukowany, gdy program profileinstaller jest za stary. Teraz informuje o zaktualizowaniu wersji profileinstaller (1.2.1) służącej do pomiaru profili podstawowych przy użyciu interfejsu API w wersjach od 31 do 33. Zamiast twierdzić, że ta funkcja nie jest obsługiwana. (Ia517f, b/253519888)
- Naprawianie kilku błędów związanych z komunikatem o błędzie związanym z powłoką (Ib6b87, b/258863685), w tym:
- Automatycznie sortuj wygenerowane reguły profilu, aby zminimalizować liczbę zmian, które zmieniają się z czasem (podczas sprawdzania reguł profilu w ramach kontroli źródła). (IE2509).
- Naprawiono awarię w kompilacjach bez dostępu do roota w wersji starszej 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 brakującego rejestru komunikatów w pliku manifestu profileinstaller, który nie został jeszcze opublikowany. (I5c728, b/258619948) Aby obejść ten problem w profileinstaller:1.3.0-alpha02
, dodaj do pliku AndroidManifest.xml swojej aplikacji (nie Twojego testu porównawczego) ten kod:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Wersja 1.2.0-alpha07
9 listopada 2022 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha07
została zwolniona. Wersja 1.2.0-alfa07 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodaje interfejs API
PowerMetric
do pomiaru energii i mocy w makroporównaniach. (Ife601, b/220183779) - Naprawiono
MacrobenchmarkScope.dropShaderCache()
, aby usunąć pamięć podręczną cieniowania. Pozwala to usunąć około 20 ms szumu z testów porównawczychStartupMode.COLD
, ponieważ moduły do cieniowania są teraz regularnie czyszczone przy każdej iteracji. Wcześniej kompilacjaPartial
wykorzystująca iteracje wstępną zgłaszała nieprawidłowo szybkie liczby, ponieważ w czasie „rozgrzewania się” występuje większe prawdopodobieństwo, że buforowanie cieniowania miało miejsce. Ta poprawka wymaga urządzenia z dostępem do roota lub używaniaprofileinstaller:1.3.0-alpha02
w aplikacji docelowej. Informacje o zmianach interfejsu API bibliotekiProfileInstaller
znajdziesz na stronie ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - Dodano funkcję
TraceSectionMode("label", Mode.Sum)
, która umożliwia pomiar łącznego czasu w wielu sekcjach logu czasu o tej samej etykiecie. Na przykładTraceSectionMetric("inflate", Mode.Sum)
raportuje wartośćinflateMs
jako łączny czas w makroporównaniu opartym na inflacji. Usunięto też wymóg dotyczący interfejsu API 29, ponieważTraceSectionMetric
współpracuje z interfejsemandroidx.tracing.Trace
z powrotem do niższych poziomów interfejsu API przy użyciu interfejsuforceEnableAppTracing
w aplikacji docelowej (Id7b68, b/231455742).
Poprawki błędów
- Zwiększono bezpieczeństwo wszystkich wewnętrznych poleceń powłoki przez weryfikowanie wszystkich danych wyjściowych/błędów. (I5984d, b/255402908, b/253094958)
- Określ urządzenie w poleceniu profilu podstawowego
adb pull
, aby można było je skopiować, gdy jest podłączonych kilka urządzeń (z maksymalnie 1 emulatorem) (I6ac6c, b/223359380) - Dodaj błąd, jeśli pakiet APK w teście porównawczym nie jest skonfigurowany jako samoinstrumentalny. Ten błąd uniemożliwia przeprowadzenie analizy porównawczej makro w ramach procesu aplikacji docelowej. W trakcie tej funkcji makrobench nie będzie w stanie skompilować, uruchomić ani uruchomić aplikacji „na zimno” ani kontrolować własnych uprawnień (I4279b).
- Rozwiązaliśmy problem w regionie
measureRepeated()
, który powodował, że posetupBlock
działanieStartupMode.COLD
nie wyłączało procesu docelowego. Teraz interakcjasetupBlock
z aplikacją nie spowoduje wyłączenia procesu aplikacji i nieprawidłowego pomiaru uruchomienia „na zimno”. (I8ebb7)
Wersja 1.2.0-alpha06
24 października 2022 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha06
została zwolniona. Wersja 1.2.0-alfa06 zawiera te zatwierdzenia.
Zmiany interfejsu API
BaselineProfileRule
nie wymaga już dostępu do roota na Androidzie 13 (API 33) i nie jest już funkcją eksperymentalną. (Ie0a7d, b/250083467, b/253094958)- Ta zmiana rozwiązuje też, jak profile z aplikacji są opróżniane z dysku na urządzeniach bez dostępu do roota, ale wymaga zaktualizowania zależności profileinstaller aplikacji docelowej.
- Jeśli chcesz używać
BaselineProfileRule
lubCompilationMode.Partial(warmupIterations)
na urządzeniu bez dostępu do roota, musisz też zaktualizować aplikację docelową, tak aby używałaandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Umożliwia to prawidłowe opróżnienie profilu na dysk, tak aby można było go skompilować/wyodrębnić.
Poprawki błędów
- Naprawia awarię
SampledProfiling
w interfejsie API w wersji 33 i nowszych (I40743, b/236109374).
Wersja 1.2.0-alpha05
5 października 2022 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha05
została zwolniona. Wersja 1.2.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawianie podziału klatek w przeglądarce śledzenia systemu w Studio na potrzeby zarejestrowanych logów porównawczych (I3f3ae, b/239677443)
- Popraw
FrameTimingMetric
, aby wskazać, żeFrameOverrun
wymaga interfejsu API 31 zamiast 29 (I716dd, b/220702554) - Ustaw iterację w
BaselineProfileRule
i wyraź wyraźne zgłoszenie, jeśli pakiet docelowy nie został zainstalowany (ta czynność została już wykonana w przypadku MacrobenchmarkRule). (Ic09a3, b/227991471)
Wersja 1.2.0-alfa04
21 września 2022 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha04
została zwolniona. Wersja 1.2.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
Dodaj obsługę argumentu instrumentacji
dryRunMode.enable
do makroporównania (już dostępnych w mikro), aby przyspieszyć lokalne programowanie i weryfikować automatyzację aplikacji (np. we wstępnym przesłaniu). Zastępuje to iteracje 1, pomija kompilację, ukrywa wszystkie błędy konfiguracji i wyłącza dane wyjściowe z pliku .json pomiaru. (Ib51b4, b/175149857)W wierszu poleceń Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
W pliku build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Poprawki błędów
- Rozwiązaliśmy problem
StartupTimingMetric
, dzięki czemu nie trzeba już uruchamiać zmierzonych aktywności doMacrobenchmarkScope.startActivityAndWait()
. Oznacza to, że dane mogą rejestrować uruchomienia np. przez powiadomienia,Context.startActivity()
, nawigację na podstawie aktywności w aplikacji lub polecenia powłoki. (Ia2de6, b/245414235) - Naprawiono błąd, który powodował, że funkcja
startActivityAndWait
oczekiwała na zakończenie uruchomienia emulatorów przez przekroczenie limitu czasu przez zmniejszenie rygorystyczności wykrywania klatek. (Ibe2c6, b/244594339, b/228946895)
Wersja 1.2.0-alfa03
7 września 2022 roku
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha03
została zwolniona. Wersja 1.2.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano eksperymentalne interfejsy API do niezależnego korzystania z usługi
BenchmarkState
, niezależnie od wersjiBenchmarkRule
/JUnit4
. (Id478f, b/228489614)
Poprawki błędów
- Dodano kreację zastępczą Leanback dla
startActivityAndWait
. (01ed77, b/242899915)
Wersja 1.2.0-alfa02
24 sierpnia 2022 r.
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha02
została zwolniona. Wersja 1.2.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Domyślnie ustawiona jest wartość
am force stop
w przypadku usługiMacrobenchmarkScope.killProcess()
, nawet po uzyskaniu dostępu do roota, z wyjątkiem generowania profilu podstawowego. Tę wartość można zastąpić opcjonalnym argumentem logicznym. (02cce9, b/241214097)
Poprawki błędów
- Obsługa generowania podstawowego profilu dla aplikacji systemowych. (I900b8, b/241214097)
- Obsługa sprawdzania danych dotyczących zasilania ODPM na urządzeniach bez dostępu do roota. (A38c78, b/229623230)
Wersja 1.2.0-alpha01
27 lipca 2022 roku
Usługa androidx.benchmark:benchmark-*:1.2.0-alpha01
została zwolniona. Wersja 1.2.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Nowy komponent śledzenia, perfetto-common, który umożliwia narzędziom śledzenie Perfetto SDK w aplikacji, która je ujawnia (I2cc7f)
Dodano argument instrumentacji
androidx.benchmark.enabledRules
, aby umożliwić filtrowanie uruchomień makroporównawczych tylko do testów porównawczych lub tylko generowanie profilu odniesienia. Przekaż wartość „Macrobenchmark” lub „BaselineProfile”, aby przeprowadzić tylko jeden typ testu, np. podczas generowania elementuBaselineProfiles
w emulatorze. Lista rozdzielana przecinkami również jest obsługiwana. (I756b7, b/230371561)Np. w pliku build.gradle w pliku Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Możesz też użyć wiersza poleceń Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Zmiany interfejsu API
- Dodano nowe funkcje
PowerMetric
do mierzenia zadań związanych z energią i zasilaniem w testach porównawczych. (I9f39b, b/220183779) - Dodaliśmy nowy tryb kompilacji
CompilationMode.Ignore
, aby pomijać resetowanie i kompilację profilu. (Ibbcf8, b/230453509) - Do pliku
BaselineProfileRule#collectBaselineProfile
dodano nowy parametr pozwalający filtrować pliki wyjściowe według nazw pakietów (If7338, b/220146561). - Umożliwia deweloperowi rozładowanie urządzenia w celu pomiaru zużycia energii. (I6a6cb)
- Dodano możliwość czyszczenia pamięci podręcznej aplikacji
MacrobenchmarkScope
. (I32122) - Umożliwia deweloperowi skonfigurowanie wyświetlania typu wskaźnika i szczegółów wybranych podsystemów. (I810C9)
- Wcześniej w przypadku uruchomienia na nieobsługiwanym urządzeniu testowana była wcześniej wartość
UnsupportedOperationException
. Obecnie uniwersalna funkcja danych działa tylko wtedy, gdy dane są używane na nieobsługiwanym urządzeniu (tj.:PowerMetric.configure
). (I5cf20, b/227229375). - Dodano
TotalPowerMetric
iTotalEnergyMetric
do pomiaru łącznej mocy i energii w poszczególnych kategoriach systemu w makroporównaniach. (I3b26b, b/224557371)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że skompilowane metody nie były prawidłowo resetowane w przypadku poszczególnych makr porównawczych w kompilacjach bez dostępu do roota. Niestety przy każdej iteracji konieczne jest ponowne instalowanie pakietu apk, co spowoduje usunięcie danych aplikacji dla każdego testu porównawczego. (I31c74, b/230665435)
- 21.02.2012 napraw awarię rejestru danych śledzenia w interfejsie API (If7fd6, b/227509388, b/227510293, b/227512788)
- Wykrywanie ukończenia działania związanego z reorganizacją w celu naprawienia wyjątku „Nie udało się odczytać żadnych wskaźników” w testach porównawczych makr startowych. (IA517c).
Wersja 1.1.1
Wersja 1.1.1
9 listopada 2022 r.
Usługa androidx.benchmark:benchmark-*:1.1.1
została zwolniona. Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem
android.system.ErrnoException: open failed: EACCES
, który występował na niektórych urządzeniach z Androidem 11 (API 30) i nowszym. Oto propozycja od firmy1.2.0-alpha01
. (aosp/2072249).
Wersja 1.1.0
Wersja 1.1.0
15 czerwca 2022 r.
Usługa 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 wprowadzone od wersji 1.0.0
Obsługa testów porównawczych jetpacka, które pozwalają mierzyć interakcje całej aplikacji, takie jak uruchamianie czy przewijanie, zapewnia możliwość rejestrowania śladów i pomiaru sekcji logu czasu.
Obsługa profili podstawowych
CompilationMode.Partial
do pomiaru skuteczności profili podstawowych.@BaselineProfileRule
, aby automatycznie generować profile bazowe dla konkretnej krytycznej ścieżki użytkownika.
Obsługa wskaźników alokacji i profilowania podczas uruchomień mikrotestów porównawczych.
Wersja 1.1.0-rc03
1 czerwca 2022 r.
Usługa 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 testu Macrobench, optymalizując polecenia powłoki używane wewnątrz systemu. (aosp/2086023, b/231323582)
Obsługa zarządzanych urządzeń Gradle podczas generowania profili podstawowych za pomocą makr porównawczych. (aosp/2062228, b/228926421)
Wersja 1.1.0-rc02
11 maja 2022 roku
Usługa androidx.benchmark:benchmark-*:1.1.0-rc02
została zwolniona. Wersja 1.1.0-rc02 zawiera te zatwierdzenia.
- Ta wersja obejmuje zmianę działania, ponieważ aplikacje są teraz w pełni ponownie instalowane pomiędzy poszczególnymi testami porównawczymi, aby zapewnić dokładność pomiarów.
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 makro i nie była resetowana w przypadku kompilacji bez dostępu do roota. Rozwiązuje to wiele przypadków, w których przeprowadzenie wielu testów spowodowałoby, że funkcja
CompilationMode
miała znikomy wpływ na pomiary lub nie miałby żadnego wpływu. Aby obejść ten problem, aplikacja docelowa instaluje teraz w pełni wszystkie metody testowe, co spowoduje wyczyszczenie danych aplikacji między poszczególnymi makroporównaniami. (I31c74, b/230665435)Uniemożliwia to aplikacjom konfigurowanie stanu przed testami, dlatego teraz można pominąć kompilację i 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 następnie pominąć krok kompilacji w makroporównaniu.Np. w pliku build.gradle w pliku Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
Możesz też użyć wiersza poleceń Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
Możliwość współużytkowania modułu między testami porównawczymi a testami generującymi profil podstawowy to dodanie argumentu instrumentacji
androidx.benchmark.enabledRules
. Przekaż wartość „Macrobenchmark” lub „BaselineProfile”, aby przeprowadzić tylko jeden typ testu, np. podczas generowania elementuBaselineProfiles
w emulatorze. (I756b7, b/230371561)Np. w pliku build.gradle w pliku Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Możesz też użyć wiersza poleceń Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Wersja 1.1.0-rc01
20 kwietnia 2022 r.
Usługa 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 używają teraz unikalnej nazwy pliku. Dzięki temu dane wyjściowe zawsze będą zawierać najnowsze wyniki użycia interfejsu
BaselineProfileRule
. ( aosp/2057008, b/228203086 )
Wersja 1.1.0-beta06
6 kwietnia 2022 roku
Usługa androidx.benchmark:benchmark-*:1.1.0-beta06
została zwolniona. Wersja 1.1.0-beta06 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawianie awarii rejestrowania danych śledzenia w interfejsie API 21.01 (If7fd6, b/227509388)
- Wykrywanie ukończenia działania związanego z reorganizacją w celu naprawienia wyjątku „Nie udało się odczytać żadnych wskaźników” w testach porównawczych makr startowych. (IA517c).
- Poprawianie danych dotyczących uruchamiania w makrach porównawczych, gdy używana jest właściwość
CompilationMode.None()
. Przed tą zmianą wartośćCompilationMode.Partial()
wydaje się być wolniejsza niżCompilation.None()
. (611ac9).
Wersja 1.1.0-beta05
23 marca 2022 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-beta05
została zwolniona. Wersja 1.1.0-beta05 zawiera te zatwierdzenia.
Poprawki błędów
- Jeśli używasz
CompilationMode.None
, zamknij pakiet po pominięciu instalacji profilu. (Aosp/1991373). - Rozwiązaliśmy problem, który powodował, że testy porównawcze nie zbierały danych po uruchomieniu podczas korzystania z narzędzia
StartupMode.COLD
. (Aosp/2012227 b/218668335)
Wersja 1.1.0-beta04
23 lutego 2022 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-beta04
została zwolniona. Wersja 1.1.0-beta04 zawiera te zatwierdzenia.
Poprawki błędów
Rozwiąż problemy z brakującymi wskaźnikami na Androidzie 10 i elementami
NoSuchElementException
powodowanymi przez nieprawidłowe rejestrowanie nazw procesów w śladach. (Ib4c17, b/218668335)Używaj
PowerManager
do wykrywania ograniczania termiczna na platformie Q (API 29) i nowszych. Pozwala to znacznie ograniczyć częstotliwość występowania wyników fałszywie dodatnich (ponowne próby po 90 sekundach po 90 sekundach) i znacząco przyspiesza testy porównawcze w kompilacjach użytkowników. Zapewnia też wykrywanie ograniczeń nawet wtedy, gdy zegary są zablokowane (jeśli są zablokowane zbyt wysoko w przypadku fizycznego środowiska urządzenia). (I9c027, b/217497678, b/131755853)Przefiltruj profilowanie próbkowane 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
Jeśli używasz
Compilation.None()
, pomiń instalację profilu. 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.
Usługa androidx.benchmark:benchmark-*:1.1.0-beta03
została zwolniona. Wersja 1.1.0-beta03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano element
AudioUnderrunMetric
do biblioteki Macroporównania pod flagą eksperymentu, aby umożliwić wykrywanie zaniżonych wyświetleń dźwięku (Ib5972) BaselineProfileRule
nie akceptuje już blokusetup
, ponieważ działa on 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 polegającego na tym, że zrzuty danych z narzędzia do profilowania mikrobench nie były aktualizowane podczas kolejnych uruchomień, gdy były połączone w danych wyjściowych Studio (I5ae4d, b/214917025)
- Zapobiegaj poleceńom powłoki kompilacji w interfejsie API 23 (Ice380)
- Zmieniliśmy nazwę
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
, aby uściślić, że są to czasy trwania, a nie sygnatury czasowe oraz pasują do prefiksów. (I0eba3, b/216337830)
Wersja 1.1.0-beta02
26 stycznia 2022 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-beta02
została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Wyniki w mikroporównaniu z próbkowaniem stosu i śledzeniem metod są teraz połączone w danych wyjściowych Studio, podobnie jak inne dane wyjściowe profilowania. Nie są pomijane dane alokacji. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule wyświetla teraz polecenie
adb pull
w narzędziu logcat i dane wyjściowe Studio w celu pobrania wygenerowanego pliku tekstowego BaselineProfile. (F08811)
Wersja 1.1.0-beta01
12 stycznia 2022 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-beta01
została zwolniona. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawia ignorowanie włączenia argumentu profilera. (I37373, b/210619998)
- Usunięto wycofaną wersję
CompliationModes
(I98186, b/213467659) - Zmieniono podstawowy argument profilu
CompilationMode.Partial
na wyliczenie, aby zwiększyć przejrzystość. (Id67ea).
Wersja 1.1.0-alfa13
15 grudnia 2021 roku
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha13
została zwolniona. Wersja 1.1.0-alfa13 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodaj funkcję śledzenia systemu, która nie wymaga dużych nakładów pracy, do danych wyjściowych w mikrotestowej wersji Androida Q (API 29 lub nowszej). Pamiętaj, że obecnie nie rejestruje ona niestandardowego śledzenia (za pomocą interfejsów
android.os.Trace
aniandroidx.tracing
Jetpack API), aby uniknąć problemów z wynikami. Takie śledzenie powinno być przydatne w diagnozowaniu niestabilności, zwłaszcza ze źródeł innych niż testy porównawcze. (I298be, b/205636583, b/145598917) - Podziel zadanie
CompilationModes
na 3 klasy: Pełne, Brak, Częściowe. Wcześniej były niespójnie nazwane po argumentach kompilacji (które obecnie traktujemy jako szczegóły implementacji) i funkcjach. Sprawia to, że kompromisy, potencjalne kombinacje i działanie w różnych wersjach platformy są bardziej przejrzyste. (I3d7bf, b/207132597) - Konfiguracja i pomiar zawsze odbywają się w parach i po kolei. Możesz teraz wysyłać zapytania o nazwę pakietu i iteerację (choć w niektórych scenariuszach „rozgrzewania” iteracja może wynosić
null
). (Id3b68, b/208357448, b/208369635)
Poprawki błędów
- Naprawiono atrybut
CompilationMode.Speed
nieprawidłowo traktowany jakoNone
(I01137).
Wersja 1.1.0-alfa12
17 listopada 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha12
została zwolniona. Wersja 1.1.0-alfa12 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaj eksperymentalny parametr TraceSectionMetric na potrzeby niestandardowych pomiarów czasu opartych na logach czasu. (I99db1, b/204572664)
Poprawki błędów
- Aby umożliwić przetestowanie interfejsu, wybudzaj urządzenie przy każdej iteracji – wymaga wyłączenia ekranu blokady. (Ibfa28, b/180963442)
- Naprawia wiele awarii w trybie profilowania StackSampling w emulatorach i urządzeniach bez dostępu do roota (Icdbda, b/202719335)
- Usunęliśmy 0,5 sekundy snu na końcu każdej iteracji.Jeśli zauważysz brakujące dane po tej zmianie, zgłoś błąd. (Iff6aa).
- Zmniejsz ryzyko utraty danych i zmniejsz ilość pamięci związanej ze śledzeniem (Id2544, b/199324831, b/204448861)
- Zmniejsz rozmiar logu czasu o około 40%, przechodząc na kompaktowy format pamięci zaplanowanej. (Id5fb6, b/199324831)
- Zaktualizowaliśmy implementacje wskaźników uruchamiania tak, aby zawsze kończyć się na końcu renderthread. Różnica będzie w różnych wersjach platformy i będzie bardziej zbliżona do pomiarów w aplikacji. (IC6B55)
Wersja 1.1.0-alfa11
3 listopada 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha11
została zwolniona. Wersja 1.1.0-alfa11 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Wskaźnik porównawczy ma teraz
minSdkVersion
o wartości23
. (If2655). - Dodaje nową eksperymentalną funkcję
BaselineProfileRule
, która może generować profile podstawowe dla krytycznej ścieżki użytkownika aplikacji. Szczegółowa dokumentacja. (Ibbefa, b/203692160) - Usuwa wariant interfejsu nodeRepeated, który został dodany w przypadku wywołań języka Java, ponieważ powoduje niejasności w ukończeniu/rozwiązaniu metody. Wywołania Javy znowu będą musiały zwracać parametr Unit.Instance z measureRepeated. Jeśli zaszła niedogodność, zgłoś błąd, możemy wrócić do niej w przyszłej wersji. (Ifb23e, b/204331495)
Wersja 1.1.0-alfa10
27 października 2021 roku
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha10
została zwolniona. Wersja 1.1.0-alfa10 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Backport StartupTimingMetric w celu przywrócenia interfejsu API 23. Nowa implementacja lepiej obsługuje też funkcję reportFullyDrawn() w oczekiwaniu na wyrenderowanie odpowiednich treści. (If3ac9, b/183129298)
- Dodano JvmOverloads do wielu metod MacrobenchmarkScope w przypadku wywołań Java. (I644fe, b/184546459)
- Podaj alternatywną funkcję MacrobenchmarkRule.measureRepeated, która korzysta z parametru
Consumer<MacrobenchmarkScope>
do idiomatycznego użycia w języku Java. (If74ab, b/184546459)
Poprawki błędów
- Rozwiązanie problemu, który dotyczy sytuacji, gdy ślady nie zaczynają się wystarczająco wcześnie i brakuje w nich danych wskaźników. Ma to za zadanie rozwiązać 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 Frame negativeSlack została zmieniona na FrameOverrun, aby doprecyzować jej znaczenie – czyli jak bardzo dana klatka przekroczyła budżet czasowy. (I6c2aa, b/203008701)
Wersja 1.1.0-alpha09
13 października 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha09
została zwolniona. Wersja 1.1.0-alfa09 zawiera te zatwierdzenia.
Poprawki błędów
- Obsługa usuwania pamięci podręcznej strony jądra bez dostępu do roota w interfejsie API 31/S+, co zwiększy dokładność uruchamiania StartupMode.COLD. (Iecfdb, b/200160030)
Wersja 1.1.0-alpha08
29 września 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha08
została zwolniona. Wersja 1.1.0-alfa08 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Włącz testy porównawcze makr przewijania, aby uruchamiać z powrotem do interfejsu API 23 (If39c2, b/183129298)
- Dodaj do interfejsu użytkownika i danych wyjściowych JSON nowy typ próbkowanych wskaźników, który skupia się na centylu wielu próbek w każdej iteracji. (I56247, b/199940612)
- Przełącz się na wskaźniki zmiennoprzecinkowe w bibliotekach testów porównawczych (skrócone w interfejsie Studio). (I69249, b/197008210)
Wersja 1.1.0-alpha07
1 września 2021 roku
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha07
została zwolniona. Wersja 1.1.0-alfa07 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Zwiększono minimalny poziom interfejsu API do 21, aby odzwierciedlić zamierzony najniższy poziom interfejsu API, który ma być obsługiwany w przyszłości. Obecny min. interfejs API jest nadal przekazywany za pomocą funkcji requiredApi() i ma obecnie wersję 29 (I440d6, b/183129298)
Poprawki błędów
- Naprawiono
ProfileInstaller
, aby ułatwić aplikacjom korzystającym z profili podstawowych przeprowadzanie testów porównawczych z użyciemCompilationMode.BaselineProfile
. (I42657, b/196074999) UWAGA: wymaga również aktualizacji do wersjiandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
lub nowszej. - Testy porównawcze
StartupMode.COLD
+CompilationMode.None
są teraz bardziej stabilne. (I770cd, b/196074999)
Wersja 1.1.0-alpha06
18 sierpnia 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha06
została zwolniona. Wersja 1.1.0-alfa06 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano argument instrumentacji
androidx.benchmark.iterations
, który umożliwia ręczne zastępowanie liczby iteracji podczas testowania/profilowania lokalnie. (6188be, b/194137879)
Poprawki błędów
- Przełączono na Simpleperf jako domyślny program profilujący próbkowanie w interfejsie API w wersji 29 lub nowszej (Ic4b34, b/158303822).
Znane problemy
CompilationMode.BaselineProfile
jest w trakcie opracowywania. Unikaj używania go do określania jakości profilu na razie.
Wersja 1.1.0-alpha05
4 sierpnia 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha05
została zwolniona. Wersja 1.1.0-alfa05 zawiera te zatwierdzenia.
Pakiet 1.1.0-alpha04
został anulowany przed premierą z powodu sporatycznej awarii. b/193827052
Zmiany interfejsu API
- Przełączono metodę startActivityAndWait, aby wywoływał uruchomienie za pomocą metody
am start
, co skraca czas każdej iteracji pomiaru o około 5 sekund i rezygnuje z obsługi elementów właściwości planowanych. (I5a6f5, b/192009149
Poprawki błędów
- Zmniejsza agresywność wykrywania dławienia termicznego i oblicz ponownie wartość bazową w przypadku częstego wykrywania ograniczeń. (I7327b)
- Poprawia działanie FrameTimingMetric, by działało na Androidzie S w wersji beta (Ib60cc, b/193260119).
- Użyj narzędzia
EmptyActivity
, aby przywrócić aplikację docelową ze stanu wymuszonego zatrzymania, aby zapewnić lepsze wsparcieCompilationMode.BaselineProfile
. (Id7cac, b/192084204) - Rozszerzenie pliku śledzenia zmieniono na
.perfetto-trace
, aby było zgodne ze standardem platformy. (I4c236, b/174663039) - StartupTimingMetric zwraca teraz wskaźnik „fullDrawnMs”, aby zmierzyć czas do ukończenia renderowania przez aplikację. Aby zdefiniować te dane dla aplikacji, wywołaj Activity.reportFullyDrawn, gdy początkowe treści będą gotowe, np. gdy początkowe elementy listy zostaną wczytane z bazy danych lub sieci. (metoda reportFullyDrawn jest dostępna bez sprawdzania wersji kompilacji w komponencie KomponentActivity). Pamiętaj, że test musi trwać wystarczająco długo, aby można było zarejestrować wskaźnik (startActivityAndWaitn nie czeka na zakończenie raportu reportFullyDrawn). (If1141, b/179176560)
- Zmniejsz koszty dołączania metadanych Ui do logów czasu o ponad 50 ms (Ic8390, b/193923003)
- Znacznie zwiększona częstotliwość odpytywania podczas zatrzymywania śledzenia, co może np. skrócić czas działania testu porównawczego uruchamiania o ponad 30% (Idfbc1, b/193723768)
Wersja 1.1.0-alfa03
16 czerwca 2021 r.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha03
została zwolniona. Wersja 1.1.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy nową
CompilationMode.BaselineProfile
do obsługi profili zainstalowanych przy użyciu biblioteki Jetpack ProfileInstaller. (Aosp/1720930).
Poprawki błędów
Przykładowy kod Gradle do pomijania błędów analizy porównawczej został zaktualizowany, aby używał niewycofanego interfejsu API ze składnią obsługującą także użytkowników korzystających z pliku .gradle.kts.
Np.
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Wersja 1.1.0-alfa02
18 maja 2021 r.
Test porównawczy w wersji 1.1.0-alfa02 wnosi duży element do testów porównawczych – Macrobenchmark. Oprócz testu porównawczego umożliwiającego mierzenie pętli procesora macrobenchmark umożliwia także pomiar interakcji z całą aplikacją, np. uruchamiania i przewijania, oraz rejestrowania logów czasu. Więcej informacji znajdziesz w dokumentacji biblioteki.
Usługa androidx.benchmark:benchmark-*:1.1.0-alpha02
została zwolniona. Wersja 1.1.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
Dodane artefakty analizy porównawczej (androidx.benchmark:benchmark-macro-junit4
i androidx.benchmark:benchmark-macro
)
- Rejestrowanie danych o wydajności uruchamiania, przewijania lub animacji z poziomu aplikacji, lokalnie lub w CI
- Przechwytuj i sprawdzaj ślady w Android Studio
Poprawki błędów
- Obejście problemu z uprawnieniami powłoki w katalogu wyjściowym w Androidzie 12 (uwaga: może być konieczne zaktualizowanie wtyczki Android Gradle do wersji 7.0.0 Canary, a Android Studio do wersji Arctic Fox (2020.3.1), aby nadal zapisywać pliki wyjściowe na urządzeniach, których dotyczy problem). (Icb039)
- Obsługa buforowania konfiguracji w narzędziu BenchmarkPlugin (6be1c1, b/159804788)
- Uproszczone wyjście pliku – domyślnie włączone w katalogu, który nie wymaga
requestLegacyExternalStorage=true
(8b5a4d, b/172376362) - Naprawiono ostrzeżenia logcat dotyczące drukowania w bibliotece, które nie znalazły wątku JIT w wersjach platformy, w których go nie ma. (I9cc63, b/161847393)
- Naprawiono odczytywanie maksymalnej częstotliwości na urządzeniu. (I55c7A)
Wersja 1.1.0-alpha01
10 czerwca 2020 r.
androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
i androidx.benchmark:benchmark-junit4:1.1.0-alpha01
zostały udostępnione. Wersja 1.1.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje w wersji 1.1
- Wskaźnik alokacji – testy porównawcze uruchamiają teraz dodatkową fazę po przygotowaniu i czasie, w którym rejestrowana jest liczba alokacji. Przydział może powodować problemy z wydajnością w starszych wersjach platformy (140 ns w O zamieniło się w 8 ns w M – mierzone na Nexusie5X przy zablokowanych zegarach). Te dane są widoczne w danych wyjściowych konsoli Android Studio, a także w tabeli
- Obsługa profilowania – teraz możesz przechwytywać dane profilowania na potrzeby testu porównawczego, aby sprawdzić, dlaczego Twój kod działa wolno. Test porównawczy obsługuje śledzenie jednej z metod lub dobór metod z ART. Pliki można sprawdzić za pomocą programu Profiler w Android Studio, klikając kolejno Plik > Otwórz.
- Wtyczka Benchmark Gradle udostępnia teraz ustawienia domyślne, aby uprościć konfigurację:
- Aby uniknąć używania zależności z wbudowanym zasięgiem kodu, zasada
testBuildType
jest domyślnie ustawiona na zwalnianie. Obiekt buildType wersji jest też skonfigurowany jako domyślny obiekt BuildType, dzięki czemu Android Studio może automatycznie wybrać prawidłowy wariant kompilacji przy pierwszym otwarciu projektu. (b/138808399) signingConfig.debug
jest używany jako domyślna konfiguracja podpisywania (b/153583269)
- Aby uniknąć używania zależności z wbudowanym zasięgiem kodu, zasada
** Poprawki błędów **
- Znacznie zmniejszyły się koszty związane z przejściem w ramach rozgrzewki, ponieważ pierwszy pomiar dla każdego testu porównawczego był sztucznie wyższy niż w innych testach. Ten problem był wyraźniejszy w bardzo niewielkich testach porównawczych (do 1 mikrosekundy). (b/142058671)
- Naprawiliśmy
InstrumentationResultParser
błąd drukowany w każdej analizie porównawczej podczas uruchamiania z wiersza poleceń. (I64988, b/154248456)
Znane problemy
- Wiersz poleceń, wywołania narzędzia Gradle analizy porównawczej nie wydrukują wyników bezpośrednio. Możesz obejść ten problem, uruchamiając Studio lub analizując wyjściowy plik JSON, aby uzyskać wyniki.
- Raportowanie porównawcze nie pobiera raportu z urządzeń, na których zainstalowano aplikację o identyfikatorze aplikacji z identyfikatorem „applicationId” kończącym się ciągiem „android” lub „download” (wielkość liter nie jest rozróżniana). 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
Wersja testu porównawczego 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 udostępnione bez zmian od wersji 1.0.0-rc01. Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje 1.0.0
Biblioteka Porównania umożliwia pisanie testów porównawczych wydajności kodu aplikacji i szybkie uzyskiwanie wyników.
Zapobiega problemom z konfiguracją kompilacji i czasu działania oraz stabilizuje wydajność urządzenia, zapewniając dokładność i spójność pomiarów. Przeprowadzaj testy porównawcze bezpośrednio w Android Studio lub w ciągłej integracji, aby obserwować wydajność kodu w czasie i zapobiegać regresjom.
Najważniejsze funkcje:
- Stabilizacja zegara
- Automatyczne nadawanie priorytetów wątkom
- Obsługa testowania wydajności interfejsu, np. RecyclerView Sample
- Rozgrzewka z uwzględnieniem JIT i pętla
- Test porównawczy JSON na potrzeby przetwarzania końcowego
Wersja 1.0.0-rc01
23 października 2019 r.
androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
i androidx.benchmark:benchmark-junit4:1.0.0-rc01
zostały udostępnione. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano śledzenie systrace do testów porównawczych
Poprawki błędów.
- Rozwiązaliśmy problem z niestabilnością danych, który powodował, że JIT nie kończył się przed rozgrzewką z powodu obniżenia priorytetu danych (b/140773023).
- Ujednolicony katalog wyjściowy JSON we wtyczce Androida do obsługi Gradle w wersjach 3.5 i 3.6
Wersja 1.0.0-beta01
9 października 2019 r.
androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
i androidx.benchmark:benchmark-junit4:1.0.0-beta01
zostały udostępnione. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Uruchamiaj czyszczenie pamięci przed każdym rozgrzewką, aby zmniejszyć wykorzystanie pamięci z jednego testu porównawczego do wycieku do kolejnej (b/140895105)
Poprawki błędów.
- Dodano zależność
androidx.annotation:android-experimental-lint
, aby kod w Javie prawidłowo zwracał błędy lintowania, gdy nie jest używany eksperymentalny interfejs API, podobnie jak w przypadku eksperymentalnej adnotacji Kotlin w przypadku wywołań Kotlin. - Teraz poprawnie wykrywa użycie argumentu instrumentacji
additionalTestOutputDir
na potrzeby danych wyjściowych we wtyczce Androida do obsługi Gradle w wersji 3.6, aby określić, kiedy AGP obsługuje kopiowanie danych. - Napraw niewykrytą częstotliwość zegara w formacie JSON, aby poprawnie wydrukować
-1
(b/141945670).
Wersja 1.0.0-alpha06
18 września 2019 r.
androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
i androidx.benchmark:benchmark-junit4:1.0.0-alpha06
zostały udostępnione. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy sprawdzanie nieprawidłowego użycia starego pakietu w procesie uruchamiania testów. Teraz wyświetla się przydatniejszy komunikat o błędzie.
Zmiany interfejsu API
- Eksperymentalna adnotacja
ExperimentalAnnotationReport
jest teraz poprawnie publiczna. Użycie tej adnotacji wymaga teraz użycia eksperymentalnego interfejsu API BenchmarkState#report
Wersja 1.0.0-alpha05
5 września 2019 r.
androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
i androidx.benchmark:benchmark-junit4:1.0.0-alpha05
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany interfejsu API
- Interfejs API
BenchmarkState.reportData
jest teraz oznaczony jako eksperymentalny
Poprawki błędów.
- Poprawiliśmy 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óre nie obsługiwało flagi-c
.
Wersja 1.0.0-alpha04
7 sierpnia 2019 r.
androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
i androidx.benchmark:benchmark-junit4:1.0.0-alpha04
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Dodaliśmy też nową dokumentację dotyczącą korzystania z biblioteki testów porównawczych bez Gradle zarówno do użytku w różnych systemach kompilacji (takich jak Bazel czy Buck), jak i podczas uruchamiania w CI. Więcej informacji znajdziesz w artykułach na temat tworzenia testów porównawczych bez Gradle i Uruchamianie testów porównawczych w ramach ciągłej integracji.
Nowe funkcje
- Wtyczka Gradle
- Teraz automatycznie wyłącza zasięg testu i ustawia
AndroidBenchmarkRunner
domyślnie (b/138374050) - Dodano obsługę nowego kopiowania danych opartego na AGP w przypadku testów porównawczych oraz korzystania z AGP 3.6 lub nowszego
- Teraz automatycznie wyłącza zasięg testu i ustawia
- Dodatki do formatu JSON:
- Łączny czas trwania testu wyjściowego testu porównawczego (b/133147694)
- Testy porównawcze
@Parameterized
, które korzystają z ciągu nazwy (np.@Parameters(name = "size={0},depth={1}")
), wyświetlają teraz w danych wyjściowych JSON nazwy i wartości parametrów dla punktu odniesienia (b/132578772)
- Tryb uruchomienia próbnego (b/138785848)
- Dodaliśmy tryb próbny, dzięki któremu każdą pętlę testu porównawczego wykonujemy tylko raz, aby sprawdzać występowanie błędów/awarii bez rejestrowania pomiarów. Może to być przydatne, np. do szybkiego przeprowadzania testów porównawczych podczas przesyłania przed przesłaniem, aby sprawdzić, czy nie występują błędy.
Zmiany interfejsu API
- Zmieniła się struktura modułu, co powoduje podział biblioteki (b/138451391)
benchmark:benchmark-junit4
zawiera klasy z zależnością JUnit:AndroidBenchmarkRunner
iBenchmarkRule
, które zostały przeniesione do pakietuandroidx.benchmark.junit4
benchmark:benchmark-common
zawiera resztę logiki, w tym interfejs BenchmarkState API- Ten podział umożliwi bibliotece obsługę testów porównawczych bez interfejsów API JUnit4 w przyszłości
- Ostrzeżenia dotyczące konfiguracji są teraz traktowane jako błędy i spowodują 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ć z powrotem 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 zapewniają bardziej opisowe wiadomości wraz z sugestiami rozwiązania problemu
- Ekrany włączają się automatycznie podczas testów porównawczych, a nie wyłączają się, gdy ekran jest wyłączony
Treści publikowane przez użytkowników zewnętrznych
- Dziękujemy Siergiejowi Zacharowaowi za wkład w ulepszenia danych wyjściowych JSON i rozwiązanie problemów z wyłączeniem ekranu.
Wersja 1.0.0-alpha03
2 lipca 2019 r.
androidx.benchmark:benchmark:1.0.0-alpha03
i androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Pokaż czas trwania snu z powodu ograniczenia dotyczącego temperatury na podstawie testu porównawczego w pełnym raporcie JSON
Poprawki błędów.
- Wtyczka Gradle nie powinna już być stosowana po zablokowaniu wtyczek Androida i zablokowania 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-alpha02
6 czerwca 2019 r.
androidx.benchmark:1.0.0-alpha02
i androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
zostały zwolnione. Zobowiązania zawarte w tej wersji znajdziesz tutaj.
Pamiętaj, że schemat JSON traktujemy jako interfejs API. Planujemy stosować te same ograniczenia w zakresie stabilności co w przypadku innych interfejsów API: stabilne (z bardzo rzadkimi wyjątkami) w wersji beta i poprawione w wersji ostatecznej, z dodatkami tylko w przypadku niewielkich wersji oraz zmianami/usunięciami w dużych wersjach.
Zmiany interfejsu API
Przebudowany schemat JSON. Dalsze zmiany w schemacie JSON prawdopodobnie będą ograniczone do dodatków:
- Zreorganizowaliśmy strukturę obiektów wyników, aby w przyszłości obsługiwać dodatkowe grupy danych (b/132713021)
- Do obiektu najwyższego poziomu (b/132711920) dodano informacje kontekstowe uruchomienia testu, takie jak informacje o urządzeniu i kompilacji oraz o tym, czy zegary są zablokowane
- Nazwy danych dotyczących czasu mają teraz w nazwie „ns” (b/132714527)
- Dodano dodatkowe statystyki dla poszczególnych raportowanych danych (maksymalne, mediana, minimum) oraz usunięto uproszczone statystyki „nanos” (b/132713851)
Usunięto dane wyjściowe XML (b/132714414)
Usunięto wykrywanie ograniczania temperatury z interfejsu API
BenchmarkState.reportData
(b/132887006)
Poprawki błędów.
- Rozwiązaliśmy problem z zapisywaniem treści
./gradlew lockClocks
na niektórych najnowszych urządzeniach z systemem operacyjnym (b/133424037) - Wykrywanie ograniczania zostało wyłączone w emulatorze (b/132880807)
Wersja 1.0.0-alpha01
7 maja 2019 r.
Usługa androidx.benchmark:benchmark:1.0.0-alpha01
została zwolniona. Zatwierdzenia zawarte w tej wersji są dostępne tutaj.