Test porównawczy
Najnowsza aktualizacja | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
21 sierpnia 2024 r. | 1.3.0 | - | - | - |
Deklarowanie zależności
Aby dodać zależność do analizy porównawczej, musisz dodać repozytorium Google Maven do do swojego projektu. Odczytano repozytorium Google Maven. i informacjami o nich.
Test porównawczy
Korzystanie z makra porównawczego
w projekcie, dodaj do pliku build.gradle
te zależności:
Twój
Moduł Macrobenchmark:
Odlotowe
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
Mikrotest porównawczy
Korzystanie z mikrotestu
w projekcie, dodaj do pliku build.gradle
te zależności:
Twój
Moduł microbenchmark:
Odlotowe
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Biblioteka Microbenchmark zawiera też wtyczkę do Gradle, której można używać z modułem testów porównawczych.
Ta wtyczka ustawia domyślne ustawienia konfiguracji dla modułu,
testowa kopia wyjściowa na serwer,
i zapewnia
./gradlew lockClocks
zadanie.
Aby korzystać z tej wtyczki, umieść ten wiersz w bloku „wtyczki” na najwyższym poziomie
Plik build.gradle
:
Odlotowe
plugins { id 'androidx.benchmark' version '1.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.0" apply false }
Następnie zastosuj wtyczkę do pliku build.gradle
modułu analizy porównawczej.
Odlotowe
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.
Zobacz dokumentację narzędzia Issue Tracker. .
Wersja 1.3
Wersja 1.3.0
21 sierpnia 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0
została zwolniona. Wersja 1.3.0 zawiera te zatwierdzenia.
Zmiany mikrotestów porównawczych wprowadzone od wersji 1.2.0
- Śledzenie metod jest domyślnie włączone w mikrotestach porównawczych w przypadku działania na większości urządzeń
- Śledzenie metod jest uruchamiane jako osobna faza, po pomiarach.
- Śledzenie metod na niektórych platformach i w niektórych wersjach ART będzie miało wpływ na późniejsze fazy pomiaru – w tych wersjach śledzenie metod jest domyślnie wyłączone, a na danych wyjściowych Studio pojawia się ostrzeżenie.
- Testy porównawcze i błędy ANR w głównym wątku
- Dodano
measureRepeatedOnMainThread
do testów porównawczych wątków UI (np. tych, które wchodzą w interakcje z interfejsami tworzenia/wyświetlania), aby uniknąć błędów ANR podczas działania przez wiele sekund. - Ślady metod są pomijane, jeśli spodziewane jest przekroczenie terminu możliwego do uniknięcia błędów ANR. Aby wyłączyć to zachowanie, ustaw wartość
androidx.benchmark.profiling.skipWhenDurationRisksAnr
na wartość Fałsz (niezalecane w przypadku uruchomień CI).
- Dodano
- Minifikacja
- Wbudowane reguły ProGuard do ulepszania mikrotestów porównawczych z włączoną minifikacją
- Minifikacja/R8 w module biblioteki wymaga AGP 8.3 i można ją włączyć za pomocą
android.buildTypes.release.androidTest.enableMinification
wbuild.gradle
- Dodano eksperymentalny interfejs API
BlackHole.consume()
, aby zapobiec eliminacji martwego kodu (If6812, b/286091643)
- Dane
- Eksperymentalna funkcja licznika zdarzeń procesora (dane z usługi
perf_event_open
, które w większości wersji platformy wymagają dostępu na poziomie roota), dostęp przezInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(można ustawić natrue
) oraz skonfigurowaćandroidx.benchmark.cpuEventCounter.events
, np. do (Instructions,CpuCycles
). Funkcja ta powinna być obsługiwana w niektórych emulatorach debugowania użytkownika, ale nie została przetestowana
- Eksperymentalna funkcja licznika zdarzeń procesora (dane z usługi
Zmiany wartości MACRObenchmark od wersji 1.2.0
- Aktualizacja śledzenia metod na potrzeby makroporównań.
- Teraz logi czasu metody są ograniczone do czasu trwania zdarzenia
measureBlock
i mogą rejestrować wiele sesji, jeśli proces rozpoczyna się kilka razy. - Wcześniej śledzenie metod działało tylko w przypadku testów porównawczych
StartupMode.COLD
i nie przechwytywało żadnych danych w przypadku metodmeasureBlocks
, które nie uruchomiły ponownie procesu docelowego. - 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)
- Teraz logi czasu metody są ograniczone do czasu trwania zdarzenia
- Prawidłowo skopiuj profil ART podczas poszczególnych iteracji
warmUp
po zatrzymaniu procesu, aby pomiaryCompilationMode.Partial(warmup=N)
były dokładniejsze. (I17923) - Komunikat o niepowodzeniu przesyłania funkcji Shader
- Dodano sugestie dotyczące debugowania w przypadku komunikatu o błędzie transmisji modułu do cieniowania
- Dodaj 2 argumenty instrumentacji, które powodują pomijanie mechanizmu cieniowania w celu obejścia awarii przy wykonywaniu porównawczych 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).
- 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 zmniejszyć zakłócenia, anuluj zadania deksoptowania w tle przed uruchomieniem makroporównania. (I989ed)
- Macrobenchmark czeka teraz przez 1 sekundę, aż aplikacja docelowa opróżni profil ART (wcześniej wynosił 500 ms). (I85a50, b/316082056)
- Aktualizacja TraceSectionMetric
- Uwaga: poniższe zmiany (
TraceSectionMetric
) mogą mieć wpływ na dane wyjściowe w wykorzystaniu CI i mogą powodować nieciągłości lub przerwy w analizie - Domyślnym ustawieniem jest teraz suma, ponieważ większość danych jest używana do powtarzania zdarzeń i w takich przypadkach najpierw powoduje odrzucenie informacji
- Teraz można jeszcze łatwiej dostosować tryb dzięki większej liczbie dostępnych trybów.
- Nazwy trybów są teraz umieszczone w nazwie wyjściowej danych (w Studio i JSON)
- Teraz obsługuje wycinki utworzone za pomocą funkcji
Trace.{begin|end}AsyncSection
.
- Uwaga: poniższe zmiany (
- Dane
- Zasilanie – dodano
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
iPowerMetric.deviceSupportsPowerEnergy()
- Nazwa
Metric.getResult
została zmieniona nagetMeasurements
, aby pasowała do typu zwracanego - 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) - 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) - 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)
- 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).
- Zasilanie – dodano
Przechwytywanie profilu w standardzie / zmiany wtyczki Gradle od wersji 1.2.0
- Zwiększono maksymalną zalecaną wersję AGP do 9.0.0-alfa01.
- Sprawdź, czy zadania
mergeArtProfile
imergeStartupProfile
zawsze czekają na wygenerowanie profilu podstawowego. (I623d6, b/343086054) - Wygenerowanie profilu podstawowego spowoduje wyświetlenie podsumowania zmian (I824c8, b/269484510)
- Dodano DSL do wyłączania ostrzeżeń (Ic4deb, b/331237001)
- 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) - 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 profilu startowego na końcu zadania generowania. (I802e5, b/313976958)
Inne istotne zmiany od wersji 1.2.0
- Przechwytywanie śladów
- Zmniejszono błąd ExitCODE 2 podczas uruchamiania funkcji perfetto z błędu na zarejestrowane ostrzeżenie
- Włącz domyślnie śledzenie AIDL w testach porównawczych(wymaga interfejsu API 28) (Ia0af2, b/341852305)
- Włącz domyślnie śledzenie tagów porterów w testach porównawczych. W ten sposób przechwytuje się na przykład punkty śledzenia blokad uśpienia. (Icfe44, b/286551983)
- Wydłużony czas oczekiwania na uruchomienie rejestrowania logu czasu, aby uniknąć awarii podczas rozpoczynania śledzenia na wolniejszych urządzeniach (I98841, b/329145808)
- Dodano publiczne interfejsy API
PerfettoTraceProcessor.Session.queryMetrics
z wersjami JSON, textproto i proto binarnych (niezakodowanych). Umożliwiają one wysyłanie zapytań o wskaźniki wbudowane wTraceProcessor
(I54d7f, b/304038382). - Włącz uruchamianie blokowania w rekordzie śledzenia Perfetto, aby zmniejszyć ryzyko utraty danych na początku śledzenia. Obsługiwane tylko w przypadku interfejsu API w wersji 33 i nowszych. (IE6e41, b/310760059)
- Dane wyjściowe JSON
- 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 jest ona dostępna na urządzeniu,-1
w innym przypadku).context.build.id
– równa się android.os.Build.IDcontext.build.version.codename
– równa się android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
– odpowiada pierwszej literze przedpremierowej nazwy kryptonimu (w tym w kompilacjach wersji) (Ie5020)
- Dodano listę
profilerOutput
do danych wyjściowych JSON, aby ułatwić korzystanie z narzędzi do śledzenia logów czasu profilowania (np. Perfetto, ślady metody) (I05ddd, b/332604449) - 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)
- Zrzucaj pliki, gdy nazwy plików zawierają więcej niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab).
- Dodaliśmy dodatkowe informacje w kontekście testu porównawczego w danych wyjściowych JSON:
Wersja 1.3.0-rc01
7 sierpnia 2024 r.
Usługa androidx.benchmark:benchmark-*:1.3.0-rc01
została zwolniona. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw problem
androidx.benchmark.cpuEventCounter
, w przypadku których zdarzenia inne niż instrukcje powodują wystąpienie uszkodzonych wartości (I7386a, b/286306579) - Popraw
resumeTiming
/runWithTimingDisabled
, aby uszanować kolejność priorytetów danych i znacznie ograniczyć wpływ wstrzymywania/wznawiania danych o niższym priorytecie na wyniki dotyczące danych o wyższym priorytecie. Jeśli na przykład używasz liczników CPU Perf za pomocą argumentu instrumentacjicpuEventCounter.enable
, czasNs nie będzie już znacząco skrócony w momencie wstrzymania/wznowienia. (I39c2e, b/286306579, b/307445225) - Zmniejszono prawdopodobieństwo próbkowania stosu, które powoduje, że
measureRepeatedOnMainThread
nie osiąga twardego limitu czasu wątku głównego przez przeniesienie konwersji próbkowania stosu z wątku głównego. (I487a8, b/342237318) - Usunęliśmy ręczne dodawanie informacji o dostępie do nowych interfejsów API platformy, ponieważ dzieje się to automatycznie przez modelowanie API w przypadku korzystania z R8 z pakietem AGP w wersji 7.3 lub nowszej (np. R8 w wersji 3.3) oraz wszystkich kompilacji z pakietem AGP 8.1 lub nowszym (np. D8 w wersji 8.1). Klientom, którzy nie korzystają z pakietu AGP, zalecamy zaktualizowanie go do wersji D8 w wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (I9496c, b/345472586)
- Dodano sprawdzanie wersji agp do wysyłania nazwy pakietu jako argumentu instr. We wcześniejszych wersjach AGP 8.4.0 nazwy docelowego pakietu aplikacji nie można wysyłać do aplikacji instrumentacji za pomocą argumentów instrumentacji. (0c72a3f)
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 ułatwić sobie korzystanie z niej, 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. co pozwala oszacować ilość pracy związanej ze śledzeniem metod. (I61fb4, b/329146942)
Zmiany interfejsu API
- Zmieniono klasę
TraceSectionMetric.Mode
na zapleczoną klasę, aby umożliwić rozszerzanie w przyszłości bez naruszania szczegółowych instrukcji (I71f7b) - Dodano argumenty
TraceSectionMetric.Mode.Average
i.Count
oraz zmieniono kolejność argumentów, 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 przypadku interfejsu 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)
- Wymuś, separatory tysięcy (przecinki) zapewniające spójność w wynikach w Studio z pominięciem języka 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ąć niepotrzebnego 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
- Wartość domyślna została zmieniona na sumę, ponieważ te dane są najczęściej używane do powtarzania zdarzeń Pamiętaj o tych zmianach w wykorzystaniu CI, ponieważ mogą one spowodować brak ciągłości lub przerwać analizę. (Ic1e82, b/301892382, b/301955938)
- Dodaj
Poprawki błędów
- Poprawiony komunikat o błędzie we wtyczce 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 przy wykonywaniu porównawczych 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 na
1 second
opróżnienie profilu ART aplikacji docelowej (wcześniej oczekiwano 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
, które powodowały awarię z powodu błędu „Pakiet $package nie może być uruchomiony przed uruchomieniem „na zimno”. z powodu niepełnego zakończenia procesu. (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
, aby umożliwić śledzenie za pomocą śledzenia za pomocą perfetto, np. Utwórz śledzenie zmiany kompozycji. 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ą funkcję
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 z logów czasu 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 > 64MB (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)
- Poprawione dane wyjściowe plików, bardziej klarowne błędy dla nieprawidłowych katalogów wyjściowych i bezpieczniejsze ustawienia domyślne
- 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 Macroporó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 -> 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 dotyczące zapisu, przenoszenia i pobierania plików (zwłaszcza tych pochodzących z testów z parametrami), dokładniej 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 pominięcia 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 błędami polecenia powłoki, gdy wyświetlany jest komunikat o błędzie, w tym: wydrukowanie wymaganego interfejsu API <=23, w tym niepowodzenia podczas przechwytywania konfiguracji plików binarnych i błędów przechwytywania śledzenia (Ib6b87, b/258863685)
- Automatycznie sortuj wygenerowane reguły profilu, aby zminimalizować liczbę zmian, które zmieniają się z czasem (podczas meldowania się reguł profilu w 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 braku rejestru transmisji 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 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)
, 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 zandroidx.tracing.Trace
z powrotem na niższe poziomy 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ć/zakończyć/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 może on rejestrować uruchomienia np. powiadomień,Context.startActivity()
, nawigacji opartej na aktywności w aplikacji lub poleceń 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. Podaj 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)Na przykład: w pliku build.gradle do analizy porównawczej:
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
BaselineProfileRule#collectBaselineProfile
dodaliśmy nowy parametr, który umożliwia filtrowanie plików wyjściowych 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 ustalania stawek działa tylko wtedy, gdy dany wskaźnik jest używany na nieobsługiwanym urządzeniu (np.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 rozwiązania problemu „Nie udało się odczytać żadnych wskaźników” w makrach porównawczych uruchamiania. (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 i przewijanie, umożliwia rejestrowanie śladów oraz sekcji śledzenia pomiarów.
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 danych alokacji i profilowania podczas testó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.Na przykład: w pliku build.gradle do analizy porównawczej:
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 analizami porównawczymi a testami generującymi profil podstawowy to teraz możliwe dzięki dodaniu argumentu instrumentacji
androidx.benchmark.enabledRules
. Podaj wartość „Macrobenchmark” lub „BaselineProfile” aby przeprowadzić tylko jeden typ testu, np. podczas generowania plikuBaselineProfiles
w emulatorze. (I756b7, b/230371561)Na przykład: w pliku build.gradle do analizy porównawczej:
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 rozwiązania problemu „Nie udało się odczytać żadnych wskaźników” w makrach porównawczych uruchamiania. (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ązać problem z brakującymi danymi na Androidzie 10,
NoSuchElementException
spowodowane tym, że nazwy procesów nie są przechwytywane poprawne ślady. (Ib4c17, b/218668335)Użyj
PowerManager
do wykrywania ograniczania termiczna w Q (API) 29) i wyższe. Znacznie zmniejsza to częstotliwość występowania fałszu wyniki dodatnie w wykrywaniu ograniczania termicznego (ponowna próba testu porównawczego po 90) drugi okres oczekiwania) i znacznie przyspiesza analizę porównawczą do tworzenia kampanii. Zapewnia też wykrywanie ograniczenia nawet wtedy, gdy zegary są zablokowany (jeśli jest zbyt wysoki, by blokował ). (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ć użytkowników 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 narzędzia do profilowania microbench 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)
- Zmieniono nazwę
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
, aby wyjaśnić, że są to czasy trwania, a nie sygnatury czasowe, oraz aby dopasować prefiksy. (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
- Próbkowanie stosu w mikroporównaniu / profil śledzenia metod wyniki są teraz łączone w danych wyjściowych Studio, podobnie jak inne dane wyjściowe profilowania, i nie są pomijane wskaźnik 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 argument profilu podstawowego
CompilationMode.Partial
na enum w celu uniknięcia wątpliwości. (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 na Androidzie Q (API 29 lub nowszym). Pamiętaj, że obecnie nie obsługuje to niestandardowego śledzenia (za pomocą interfejsów API
android.os.Trace
lubandroidx.tracing
Jetpack), aby uniknąć problemów. To śledzenie powinno być przydatne w diagnozowaniu zwłaszcza w przypadku źródeł spoza analizy porównawczej. (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 wskaźnik TraceSectionMetric na potrzeby niestandardowego śledzenia pomiarów czasowych. (I99db1, b/204572664)
Poprawki błędów
- Wybudzaj urządzenie przy każdej iteracji, aby przetestować interfejs użytkownika. Funkcja wymaga blokady ekranu jest wyłączona. (Ibfa28, b/180963442)
- Naprawia wiele awarii w trybie profilowania StackSampling na emulatory i urządzenia bez dostępu do roota (Icdbda, b/202719335)
- Usunięto 0,5 sekundy snu na końcu każdej iteracji, jeśli Jeśli po wprowadzeniu tej zmiany brakuje danych, 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)
- Zaktualizowane implementacje wskaźników uruchamiania, tak aby zawsze kończyły się na koniec renderowania. Będzie to bardziej spójne na różnych platformach. i dokładniej je mapują na pomiary 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 dodany wariant interfejsu scalena z powtórzonym pomiarem dla wywołań języka Java, ponieważ powodowało niejasności w uzupełnianiu/rozwiązaniu . Wywołania Javy znowu będą musiały zwrócić Unit.Instance z powtórzony pomiar. Jeśli zaszła niedogodność, zgłoś błąd, a my możesz sprawdzić to 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. Ten nowa implementacja lepiej obsługuje funkcję reportFullyDrawn() w oczekiwaniu do czasu wyrenderowania 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. To powinno rozwiązać problem z komunikatem „Nie udało się odczytać żadnych danych”. podczas analizy porównawczej” wyjątków spowodowanych 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, koncentrując się percentylu wielu próbek na iterację. (I56247, b/199940612)
- Przejdź na dane zmiennoprzecinkowe w teście porównawczym biblioteki (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 i nowszych. (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 działanie startActivityAndWait, aby wywołać uruchomienie przez
am start
, co zmniejsza czas każdej iteracji pomiaru o około 5 sekund przy braku obsługi intencja „parcelable”. (I5a6f5, b/192009149
Poprawki błędów
- Zmniejszenie agresywnego wykrywania przepustnicy termicznej i obliczyć ponownie punkt odniesienia, jeśli często wykrywane są ograniczenia. (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 „fullDrawnMs” dane , by mierzyć czas potrzebny do ukończenia renderowania przez aplikację. Do zdefiniuj te dane dla swojej aplikacji, wywołaj Activity.reportFullyDrawn, gdy początkowa treść jest gotowa, np. kiedy początkowe elementy listy są ładowane z bazy danych lub sieci. (dostępna jest metoda reportFullyDrawn bez sprawdzania wersji kompilacji w 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 ograniczyć np. test porównawczy 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 ważny element 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 i 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 o nieznalezieniu drukowania w bibliotece Wątek JIT na platformach w wersjach, 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, używając polecenia 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ń z zainstalowaną aplikacją z identyfikatorem aplikacji kończącym się ciągiem „android” lub „download” (bez rozróżniania wielkości liter). 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 generował 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.
- 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ó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 w formacie 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)
- Dodano „uruchomienie próbne” tryb, w którym każdą pętlę testu porównawczego wykonujesz tylko raz, dzięki czemu możesz sprawdzać występowanie błędów/awarii bez rejestrowania pomiarów. Może to być przydatne, np. na przykład szybko przeprowadzić analizę porównawczą podczas przesyłania przed przesłaniem, aby sprawdzić, czy wszystko jest w porządku.
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. Na 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.
zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Pamiętaj, że schemat JSON traktujemy jako interfejs API. Zgodnie z planem Google takie jak w przypadku innych interfejsów API: stabilne (z bardzo rzadkimi wyjątkami) raz wersji beta i poprawiono w ostatecznej wersji, ale wprowadzono też zmiany tylko w niewielkich wersjach. zmian/usunięć w głównych wersjach.
Zmiany interfejsu API
Przebudowany schemat JSON. Dalsze zmiany w schemacie JSON prawdopodobnie ograniczona do dodatków:
- Zmodyfikowaliśmy strukturę obiektów wyników, aby obsługiwać dodatkowe grupy danych w przyszłości (b/132713021)
- Dodano informacje kontekstowe uruchomienia testu, takie jak informacje o urządzeniu i kompilacji, czy zegary są zablokowane, do obiektu najwyższego poziomu (b/132711920)
- Nazwy danych czasowych mają teraz w nazwie „ns” (b/132714527)
- dodatkowe statystyki dodawane dla poszczególnych raportowanych danych (maksymalna, mediana, minimum); usunięto uproszczony „nanos” podsumowanie statystyk (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 urządzeniach z najnowszym 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. Uwzględnione zatwierdzenia
w tej wersji są dostępne
tutaj.