Test porównawczy

Dokładnie zmierz wydajność kodu w Android Studio.
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.

Tworzenie nowego numeru

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).
  • 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 w build.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 przez InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (można ustawić na true) 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

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 metod measureBlocks, 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)
  • Prawidłowo skopiuj profil ART podczas poszczególnych iteracji warmUp po zatrzymaniu procesu, aby pomiary CompilationMode.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 w StartupMode.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.
  • Dane
    • Zasilanie – dodano PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() i PowerMetric.deviceSupportsPowerEnergy()
    • Nazwa Metric.getResult została zmieniona na getMeasurements, 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 do FrameTimingMetric, 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).

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 i mergeStartupProfile 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 kompilacji nonMinified 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 w TraceProcessor (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.ID
      • context.build.version.codename – równa się android.os.Build.VERSION.CODENAME
      • context.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).

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 instrumentacji cpuEventCounter.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 na AFFECTS_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ą funkcji ProfilerConfig.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 i PerfettoConfig. (Icdae3, b/341851833)
  • Sprawdź, czy zadania mergeArtProfile i mergeStartupProfile 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 na PowerMetric.deviceSupportsHighPrecisionTracking (I5b82f)
  • Dodano zasady PowerMetric.deviceBatteryHasMinimumCharge() i PowerMetric.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 na getMeasurements, 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 kompilacji nonMinified 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ą metody Trace.{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 do FrameTimingMetric, 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)

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 w StartupMode.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 na 500 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 typu StartupMode.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

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 API BaselineProfileRule.collectBaselineProfile
    • Po prostu określ packageName i zacznij uruchamiać aplikację
  • 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

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 i MethodTracing.
    • 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.
  • 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.
  • Nowe eksperymentalne interfejsy API do pomiarów

    • Dodano eksperymentalną funkcję TraceSectionMetric, która umożliwia wyodrębnianie prostych bloków czasu z trace("") {} w aplikacji lub TraceMetric, aby wykorzystać wszystkie możliwości zapytań Perfetto TraceProcessor.
    • 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).
  • 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ż przez MacrobenchmarkScope.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 od BenchmarkRule, 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.
  • 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 śledzenia IsolationActivity 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 na perfettoSdkTracing.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 jako api zamiast zależności implementation. (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 na BaselineProfileRule.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. Interfejs collectStableBaselineProfile API został usunięty i zamiast niego należy używać interfejsu collectBaselineProfile. (I17262, b/281078707)
  • Zmieniono argument filterPredicate funkcji BaselineProfileRule 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 w dryRunMode, 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 i androidx.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 funkcja RenderThread 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 i BaselineProfileRule, 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 instrumentacji androidx.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 {} i PerfettoTraceRule 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 problemyMacrobenchmarkScope.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ównawczych StartupMode.COLD, ponieważ moduły do cieniowania są teraz regularnie czyszczone przy każdej iteracji. Wcześniej kompilacja Partial 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 z profileinstaller:1.3.0-alpha02 w aplikacji docelowej. Informacje o zmianach w interfejsie API biblioteki ProfileInstaller znajdziesz na stronie ProfileInstaller w wersji 1.30-alpha02. (Ia5171, b/231455742)
  • Dodano funkcję TraceSectionMode("label", Mode.Sum), która umożliwia pomiar łącznego czasu w wielu sekcjach logu czasu o tej samej etykiecie. Na przykład TraceSectionMetric("inflate", Mode.Sum) raportuje wartość inflateMs jako łączny czas w makroporównaniu opartym na inflacji. Usunięto też wymóg dotyczący interfejsu API 29, ponieważ TraceSectionMetric współpracuje z androidx.tracing.Trace z powrotem na niższe poziomy interfejsu API przy użyciu interfejsu forceEnableAppTracing 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 po setupBlock działanie StartupMode.COLD nie wyłączało procesu docelowego. Teraz interakcja setupBlock 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 lub CompilationMode.Partial(warmupIterations) na urządzeniu bez dostępu do roota, musisz też zaktualizować aplikację docelową, tak aby używała androidx.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ć, że FrameOverrun 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 do MacrobenchmarkScope.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 wersji BenchmarkRule / 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ługi MacrobenchmarkScope.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 elementu BaselineProfiles 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 i TotalEnergyMetric 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 firmy 1.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

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 pliku BaselineProfiles 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 wersji androidx.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ż bloku setup, ponieważ działa on tak samo jak profileBlock. (Ic7dfe, b/215536447)

    Na przykład:

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

Poprawki błędów

  • Rozwiązanie problemu 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 lub androidx.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 jako None (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ści 23. (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życiem CompilationMode.BaselineProfile. (I42657, b/196074999) UWAGA: wymaga również aktualizacji do wersji androidx.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 wsparcie CompilationMode.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

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)

** 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 lub expr.
  • Rozwiązaliśmy problem z zadaniem ./gradlew lockClocks, które zawieszało się na urządzeniach z dostępem do roota w starszej wersji narzędzia su, któ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
  • 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 i BenchmarkRule, które zostały przeniesione do pakietu androidx.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.