Test porównawczy

Dokładnie zmierz wydajność kodu w Android Studio.
Najnowsza aktualizacja Wersja stabilna Kandydat do wydania Wersja Beta Wydanie alfa
10 lipca 2024 r. 1.2.4 - 1.3.0-beta02 -

Deklarowanie zależności

Aby dodać zależność do analizy porównawczej, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.

Test porównawczy

Aby użyć narzędzia Macrobenchmark w projekcie, dodaj do pliku build.gradle te zależności modułu macrobenchmark:

Odlotowy

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

Kotlin

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

Mikrotest porównawczy

Aby użyć mikrotestu w projekcie, dodaj do pliku build.gradle te zależności modułu microbenchmark:

Odlotowy

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

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

Kotlin

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

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

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

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

Odlotowy

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

Kotlin

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

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

Odlotowy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Opinia

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

Tworzenie nowego numeru

Więcej informacji znajdziesz w dokumentacji narzędzia do śledzenia problemów.

Wersja 1.3

Wersja 1.3.0-beta02

10 lipca 2024 r.

Usługa androidx.benchmark:benchmark-*:1.3.0-beta02 została zwolniona. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

  • Obsługuj kod ExitCODE 2 po uruchomieniu Perfetto, aby zapisać ostrzeżenie, i kontynuuj.

Wersja 1.3.0-beta01

12 czerwca 2024 r.

Usługa androidx.benchmark:benchmark-*:1.3.0-beta01 została zwolniona. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Nazwa MethodTracing.affectsMeasurementOnThisDevice została zmieniona 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 łatwiej było jej używać, 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. do oceny narzutu na śledzenie metod. (I61fb4, b/329146942)

Zmiany interfejsu API

  • Zmieniono klasę TraceSectionMetric.Mode na zapleczoną klasę, aby umożliwić rozszerzanie w przyszłości bez przerywania szczegółowych instrukcji (I71f7b)
  • Dodano argumenty TraceSectionMetric.Mode.Average i .Count oraz zmieniono kolejność argumentów, tak aby bardziej powszechny argument (mode) znajdował się wcześniej na liście argumentów, co zmniejsza potrzebę określania nazw parametrów. (Ibf0b0, b/315830077, b/322167531)
  • Zmieniono nazwę Metric.getResult 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 interfejsie API w wersji 33 i nowszych (Ie6e41, b/310760059).
  • Dodaliśmy ostrzeżenie w przypadku użycia narzędzia Android Testinteresor w modułach testów porównawczych, ponieważ spowoduje to wielokrotne zastępowanie wyjściowych plików JSON poszczególnych modułów. (Ia1af6, b/286899049)
  • Wymuszaj separatory tysięcy (, przecinki) w celu zachowania spójności w danych wyjściowych Studio, ignorując język urządzenia (I3e921, b/313496656)
  • TraceSectionMetric obsługuje teraz wycinki utworzone za pomocą 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ąć zbędnego słowa „powinien” (Ia8f00, b/303387299)
  • Dodano dyrektywę BenchmarkRule.measureRepeatedOnMainThread, aby testy porównawcze wątku głównego (np. te wykorzystujące interfejs Widok lub interfejs tworzenia wiadomości) mogły uniknąć wywoływania błędów ANR, zwłaszcza w dużych pakietach w CI. (I5c86d)
  • Dodano FrameTimingGfxInfoMetric, eksperymentalną alternatywną implementację FrameTimingMetric, w której pomiary pochodzą bezpośrednio z platformy, a nie pobierane ze śledzenia Perfetto. (I457cb, b/322232828)
  • Dodaj możliwość zrzutu profilu ART podczas poszczególnych iteracji warmUp. (I17923)
  • Kilka zmian w interfejsie API TraceSectionMetric:
    • Dodaj Mode.Min, Mode.Max
    • Dodaj argument etykiety, aby zastąpić nazwę sekcji jako etykietę wskaźnika
    • Dodano nazwę trybu do danych wyjściowych, aby ułatwić zrozumienie znaczenia wskaźnika
    • Zmieniono wartość domyślną na sumę, ponieważ większość użycia tych danych dotyczy zdarzeń powtarzanych Pamiętaj o tych zmianach w wykorzystaniu CI, ponieważ mogą one powodować nieciągłości lub przerywanie analizy. (Ic1e82, b/301892382, b/301955938)

Poprawki błędów

  • Poprawiony komunikat o błędzie we wtyczce narzędzia Gradle profilu podstawowego, gdy określone urządzenie zarządzane nie istnieje (Idea2b, b/313803289)
  • Poprawka polegająca na uwzględnianiu profili podstawowych biblioteki w AAR przed wersją 8.3.0-alfa15 AGP (I1d2af, b/313992099)
  • Poprawiono adres URL punktu odniesienia i wyjściowego profilu uruchamiania na końcu zadania generowania (I802e5, b/313976958)
  • Skorygowano czas oczekiwania źródła danych na próbę usunięcia błędu java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Dodaj 2 argumenty instrumentacji, które powodują pomijanie mechanizmu cieniowania w celu obejścia awarii podczas testowania aplikacji bez ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : tej opcji można użyć do pominięcia całego procesu usuwania cieniowania (łącznie z etapami uruchamianymi 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, aż aplikacja docelowa opróżnia profil ART (wcześniej 1 second), aż aplikacja docelowa (wcześniej czekała 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 zawierającymi awarię „Pakiet $package nie może być uruchomiony przed uruchomieniem „na zimno!”, ponieważ zakończenie procesu nie zostało w pełni zakończone. (I5e028)

Wersja 1.2.3

24 stycznia 2024 r.

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

Poprawki błędów

  • Usunięto wyjątek z wtyczki Gradle profilu Baseline w wersji 8.3.0 lub nowszej AGP.
  • Poprawka polegająca na uwzględnianiu profili podstawowych biblioteki w AAR przed wersją 8.3.0-alfa15 AGP.

Wersja 1.2.2

1 grudnia 2023 r.

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

Profile podstawowe

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, który umożliwia śledzenie za pomocą funkcji „tracing-perfetto”, np. śledzenie zmiany kompozycji w wiadomości. Pamiętaj, że gdy jest używana z funkcją StartupMode.COLD, znacznie wpływa na czas, ponieważ biblioteka śledzenia jest ładowana i włączona podczas uruchamiania aplikacji.
  • 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ą MemoryCountersMetric do liczenia błędów strony.
    • Dodano eksperymentalny interfejs API PerfettoTraceProcessor, który jest używany wewnętrznie do wyodrębniania wskaźników ze śladów systemu (znanych też w logach Perfetto)
  • Poprawki

    • Rozwiązaliśmy problemy powodujące awarie, które występowały podczas instalowania lub wyodrębniania profili z aplikacji zainstalowanej z wielu plików APK (np. z pakietu aplikacji).
    • Naprawiono FrameTimingMetric ignorowanie klatek z niespójnymi identyfikatorami klatek (zwykle w przypadku interfejsu API w wersji 31 i nowszych klatki te były ignorowane) (I747d2, b/279088460)
    • Usunięto błędy analizy logów czasu > 64 MB (Ief831, b/269949822)
    • Naprawiono błędy, które wystąpiły, gdy obraz systemu operacyjnego urządzenia (zwłaszcza emulatora) nie jest prawidłowo skonfigurowany do śledzenia lub kompilacji.
    • Pomiń sprawdzanie poziomu naładowania baterii w przypadku urządzeń bez baterii (mikro i makro)
    • Ulepszone dane wyjściowe plików, z bardziej wyraźnymi błędami dla nieprawidłowych katalogów wyjściowych i bezpieczniejszą wartością domyślną
    • Poprawiono stabilność aplikacji StartupMode.COLD przez ciągłe usuwanie pamięci podręcznej cieniowania (udostępnianej też 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 makroporównania do aplikacji docelowej.

Wersja 1.2.0-rc01

20 września 2023 r.

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

Poprawki błędów

  • Gdy śledzenie Perfetto SDK nie zainicjuje się w testach porównawczych, zgłaszany jest wyjątek (z instrukcjami rozwiązania problemu). (I6c878, b/286228781)
  • Naprawa błędu „brak pamięci” podczas konwertowania logu czasu metody ART -> format perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) Doprecyzowano etykiety śledzenia metody połączone w danych wyjściowych testowych Studio oraz nazwy plików śledzenia metod stałych, aby były unikalne na urządzeniu lub hoście, więc nie zostaną zastąpione podczas wykonywania więcej niż 1 testu porównawczego. (I08e65, b/285912360)
  • Zapewnia, że podczas rejestrowania profilu podstawowego urządzenie jest aktywne. (I503fc)

Wersja 1.2.0-beta05

30 sierpnia 2023 r.

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

Nowe funkcje

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

Wersja 1.2.0-beta04

23 sierpnia 2023 r.

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

Nowe funkcje

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

Poprawki błędów

  • Napraw błędy związane z zapisywaniem, przenoszeniem i pobieraniem plików (zwłaszcza tych pochodzących z testów z parametrami), dokładnie przeczyszczając nazwy plików wyjściowych, unikając stosowania znaków „=” i „:” w nazwach plików wyjściowych. (I759d8)

Wersja 1.2.0-beta03

9 sierpnia 2023 r.

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

Zmiany interfejsu API

  • Dodano argument do filtra TraceSectionMetric tylko do pakietu docelowego (domyślnie włączony Ia219b, b/292208786)

Poprawki błędów

  • Zmieniono nazwę argumentu instrumentacji fullTracing.enable 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 pomijania kompilacji. Zamiast tego przeprowadza pojedynczą iterację i wyodrębnia profil, aby mieć pewność, że coś zostanie przechwycone. (I2f05d, b/266403227)
  • Usunięto awarię PowerMetric występującą podczas sprawdzania obecności statystyk zasilania na starych poziomach interfejsu API. (5faaf9, b/268253898)

Wersja 1.2.0-alpha09

11 stycznia 2023 r.

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

Poprawki błędów

  • Włączono przekazywanie danych None do argumentu 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 komunikatem o błędzie związanym z powłoką (Ib6b87, b/258863685), w tym:
  • Automatycznie sortuj wygenerowane reguły profilu, aby zminimalizować liczbę zmian, które zmieniają się z czasem (podczas sprawdzania reguł profilu w ramach kontroli źródła). (IE2509).
  • Naprawiono awarię w kompilacjach bez dostępu do roota w wersji starszej niż Android 13 (API 33) z komunikatem Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

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

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

Wersja 1.2.0-alpha07

9 listopada 2022 r.

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

Zmiany interfejsu API

  • Dodaje interfejs API PowerMetric do pomiaru energii i mocy w makroporównaniach. (Ife601, b/220183779)
  • Naprawiono MacrobenchmarkScope.dropShaderCache(), aby usunąć pamięć podręczną cieniowania. Pozwala to usunąć około 20 ms szumu z testów poró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 używania profileinstaller:1.3.0-alpha02 w aplikacji docelowej. Informacje o zmianach interfejsu API biblioteki ProfileInstaller znajdziesz na stronie ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • Dodano funkcję TraceSectionMode("label", Mode.Sum), która umożliwia pomiar łącznego czasu w wielu sekcjach logu czasu o tej samej etykiecie. Na przykł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 interfejsem androidx.tracing.Trace z powrotem do niższych poziomów 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ć, uruchomić ani 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 dane mogą rejestrować uruchomienia np. przez powiadomienia, Context.startActivity(), nawigację na podstawie aktywności w aplikacji lub polecenia powłoki. (Ia2de6, b/245414235)
  • Naprawiono błąd, który powodował, że funkcja startActivityAndWait oczekiwała na zakończenie uruchomienia emulatorów przez przekroczenie limitu czasu przez zmniejszenie rygorystyczności wykrywania klatek. (Ibe2c6, b/244594339, b/228946895)

Wersja 1.2.0-alfa03

7 września 2022 roku

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

Nowe funkcje

  • Dodano eksperymentalne interfejsy API do niezależnego korzystania z usługi BenchmarkState, niezależnie od 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. Przekaż 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)

    Np. w pliku build.gradle w pliku Macrobenchmark:

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

    Możesz też użyć wiersza poleceń Gradle:

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

Zmiany interfejsu API

  • Dodano nowe funkcje PowerMetric do mierzenia zadań związanych z energią i zasilaniem w testach porównawczych. (I9f39b, b/220183779)
  • Dodaliśmy nowy tryb kompilacji CompilationMode.Ignore, aby pomijać resetowanie i kompilację profilu. (Ibbcf8, b/230453509)
  • Do pliku BaselineProfileRule#collectBaselineProfile dodano nowy parametr pozwalający filtrować pliki wyjściowe według nazw pakietów (If7338, b/220146561).
  • Umożliwia deweloperowi rozładowanie urządzenia w celu pomiaru zużycia energii. (I6a6cb)
  • Dodano możliwość czyszczenia pamięci podręcznej aplikacji MacrobenchmarkScope. (I32122)
  • Umożliwia deweloperowi skonfigurowanie wyświetlania typu wskaźnika i szczegółów wybranych podsystemów. (I810C9)
  • Wcześniej w przypadku uruchomienia na nieobsługiwanym urządzeniu testowana była wcześniej wartość UnsupportedOperationException. Obecnie uniwersalna funkcja danych działa tylko wtedy, gdy dane są używane na nieobsługiwanym urządzeniu (tj.: PowerMetric.configure). (I5cf20, b/227229375).
  • Dodano TotalPowerMetric 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 naprawienia wyjątku „Nie udało się odczytać żadnych wskaźników” w testach porównawczych makr startowych. (IA517c).

Wersja 1.1.1

Wersja 1.1.1

9 listopada 2022 r.

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

Poprawki błędów

  • Rozwiązaliśmy problem android.system.ErrnoException: open failed: EACCES, który występował na niektórych urządzeniach z Androidem 11 (API 30) i nowszym. Oto propozycja od 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.

    Np. w pliku build.gradle w pliku Macrobenchmark:

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

    Możesz też użyć wiersza poleceń Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Możliwość współużytkowania modułu między testami porównawczymi a testami generującymi profil podstawowy to dodanie argumentu instrumentacji androidx.benchmark.enabledRules. Przekaż wartość „Macrobenchmark” lub „BaselineProfile”, aby przeprowadzić tylko jeden typ testu, np. podczas generowania elementu BaselineProfiles w emulatorze. (I756b7, b/230371561)

    Np. w pliku build.gradle w pliku Macrobenchmark:

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

    Możesz też użyć wiersza poleceń Gradle:

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

Wersja 1.1.0-rc01

20 kwietnia 2022 r.

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

Poprawki błędów

  • Linki wyjściowe profilu podstawowego w Android Studio używają teraz unikalnej nazwy pliku. Dzięki temu dane wyjściowe zawsze będą zawierać najnowsze wyniki użycia interfejsu BaselineProfileRule. ( aosp/2057008, b/228203086 )

Wersja 1.1.0-beta06

6 kwietnia 2022 roku

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

Poprawki błędów

  • Naprawianie awarii rejestrowania danych śledzenia w interfejsie API 21.01 (If7fd6, b/227509388)
  • Wykrywanie ukończenia działania związanego z reorganizacją w celu naprawienia wyjątku „Nie udało się odczytać żadnych wskaźników” w testach porównawczych makr startowych. (IA517c).
  • Poprawianie danych dotyczących uruchamiania w makrach porównawczych, gdy używana jest właściwość CompilationMode.None(). Przed tą zmianą wartość CompilationMode.Partial() wydaje się być wolniejsza niż Compilation.None(). (611ac9).

Wersja 1.1.0-beta05

23 marca 2022 r.

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

Poprawki błędów

  • Jeśli używasz CompilationMode.None, zamknij pakiet po pominięciu instalacji profilu. (Aosp/1991373).
  • Rozwiązaliśmy problem, który powodował, że testy porównawcze nie zbierały danych po uruchomieniu podczas korzystania z narzędzia StartupMode.COLD. (Aosp/2012227 b/218668335)

Wersja 1.1.0-beta04

23 lutego 2022 r.

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

Poprawki błędów

  • Rozwiąż problemy z brakującymi wskaźnikami na Androidzie 10 i elementami NoSuchElementException powodowanymi przez nieprawidłowe rejestrowanie nazw procesów w śladach. (Ib4c17, b/218668335)

  • Używaj PowerManager do wykrywania ograniczania termiczna na platformie Q (API 29) i nowszych. Pozwala to znacznie ograniczyć częstotliwość występowania wyników fałszywie dodatnich (ponowne próby po 90 sekundach po 90 sekundach) i znacząco przyspiesza testy porównawcze w kompilacjach użytkowników. Zapewnia też wykrywanie ograniczeń nawet wtedy, gdy zegary są zablokowane (jeśli są zablokowane zbyt wysoko w przypadku fizycznego środowiska urządzenia). (I9c027, b/217497678, b/131755853)

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

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

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

  • Jeśli używasz Compilation.None(), pomiń instalację profilu. Dodatkowo zgłaszaj ostrzeżenia, gdy aplikacja używa starszej 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 z narzędzia do profilowania mikrobench nie były aktualizowane podczas kolejnych uruchomień, gdy były połączone w danych wyjściowych Studio (I5ae4d, b/214917025)
  • Zapobiegaj poleceńom powłoki kompilacji w interfejsie API 23 (Ice380)
  • Zmieniliśmy nazwę FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, aby uściślić, że są to czasy trwania, a nie sygnatury czasowe oraz pasują do prefiksów. (I0eba3, b/216337830)

Wersja 1.1.0-beta02

26 stycznia 2022 r.

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

Poprawki błędów

  • Wyniki w mikroporównaniu z próbkowaniem stosu i śledzeniem metod są teraz połączone w danych wyjściowych Studio, podobnie jak inne dane wyjściowe profilowania. Nie są pomijane dane alokacji. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule wyświetla teraz polecenie adb pull w narzędziu logcat i dane wyjściowe Studio w celu pobrania wygenerowanego pliku tekstowego BaselineProfile. (F08811)

Wersja 1.1.0-beta01

12 stycznia 2022 r.

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

Poprawki błędów

  • Naprawia ignorowanie włączenia argumentu profilera. (I37373, b/210619998)
  • Usunięto wycofaną wersję CompliationModes (I98186, b/213467659)
  • Zmieniono podstawowy argument profilu CompilationMode.Partial na wyliczenie, aby zwiększyć przejrzystość. (Id67ea).

Wersja 1.1.0-alfa13

15 grudnia 2021 roku

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

Zmiany interfejsu API

  • Dodaj funkcję śledzenia systemu, która nie wymaga dużych nakładów pracy, do danych wyjściowych w mikrotestowej wersji Androida Q (API 29 lub nowszej). Pamiętaj, że obecnie nie rejestruje ona niestandardowego śledzenia (za pomocą interfejsów android.os.Trace ani androidx.tracing Jetpack API), aby uniknąć problemów z wynikami. Takie śledzenie powinno być przydatne w diagnozowaniu niestabilności, zwłaszcza ze źródeł innych niż testy porównawcze. (I298be, b/205636583, b/145598917)
  • Podziel zadanie CompilationModes na 3 klasy: Pełne, Brak, Częściowe. Wcześniej były niespójnie nazwane po argumentach kompilacji (które obecnie traktujemy jako szczegóły implementacji) i funkcjach. Sprawia to, że kompromisy, potencjalne kombinacje i działanie w różnych wersjach platformy są bardziej przejrzyste. (I3d7bf, b/207132597)
  • Konfiguracja i pomiar zawsze odbywają się w parach i po kolei. Możesz teraz wysyłać zapytania o nazwę pakietu i iteerację (choć w niektórych scenariuszach „rozgrzewania” iteracja może wynosić null). (Id3b68, b/208357448, b/208369635)

Poprawki błędów

  • Naprawiono atrybut CompilationMode.Speed nieprawidłowo traktowany 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 parametr TraceSectionMetric na potrzeby niestandardowych pomiarów czasu opartych na logach czasu. (I99db1, b/204572664)

Poprawki błędów

  • Aby umożliwić przetestowanie interfejsu, wybudzaj urządzenie przy każdej iteracji – wymaga wyłączenia ekranu blokady. (Ibfa28, b/180963442)
  • Naprawia wiele awarii w trybie profilowania StackSampling w emulatorach i urządzeniach bez dostępu do roota (Icdbda, b/202719335)
  • Usunęliśmy 0,5 sekundy snu na końcu każdej iteracji.Jeśli zauważysz brakujące dane po tej zmianie, zgłoś błąd. (Iff6aa).
  • Zmniejsz ryzyko utraty danych i zmniejsz ilość pamięci związanej ze śledzeniem (Id2544, b/199324831, b/204448861)
  • Zmniejsz rozmiar logu czasu o około 40%, przechodząc na kompaktowy format pamięci zaplanowanej. (Id5fb6, b/199324831)
  • Zaktualizowaliśmy implementacje wskaźników uruchamiania tak, aby zawsze kończyć się na końcu renderthread. Różnica będzie w różnych wersjach platformy i będzie bardziej zbliżona do pomiarów w aplikacji. (IC6B55)

Wersja 1.1.0-alfa11

3 listopada 2021 r.

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

Zmiany interfejsu API

  • Wskaźnik porównawczy ma teraz minSdkVersion o wartoś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 wariant interfejsu nodeRepeated, który został dodany w przypadku wywołań języka Java, ponieważ powoduje niejasności w ukończeniu/rozwiązaniu metody. Wywołania Javy znowu będą musiały zwracać parametr Unit.Instance z measureRepeated. Jeśli zaszła niedogodność, zgłoś błąd, możemy wrócić do niej w przyszłej wersji. (Ifb23e, b/204331495)

Wersja 1.1.0-alfa10

27 października 2021 roku

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

Zmiany interfejsu API

  • Backport StartupTimingMetric w celu przywrócenia interfejsu API 23. Nowa implementacja lepiej obsługuje też funkcję reportFullyDrawn() w oczekiwaniu na wyrenderowanie odpowiednich treści. (If3ac9, b/183129298)
  • Dodano JvmOverloads do wielu metod MacrobenchmarkScope w przypadku wywołań Java. (I644fe, b/184546459)
  • Podaj alternatywną funkcję MacrobenchmarkRule.measureRepeated, która korzysta z parametru Consumer<MacrobenchmarkScope> do idiomatycznego użycia w języku Java. (If74ab, b/184546459)

Poprawki błędów

  • Rozwiązanie problemu, który dotyczy sytuacji, gdy ślady nie zaczynają się wystarczająco wcześnie i brakuje w nich danych wskaźników. Ma to za zadanie rozwiązać wyjątki „Nie można odczytać żadnych danych podczas testu porównawczego”, które zostały spowodowane przez samą bibliotekę. (I6dfcb, b/193827052, b/200302931)
  • Nazwa elementu Frame negativeSlack została zmieniona na FrameOverrun, aby doprecyzować jej znaczenie – czyli jak bardzo dana klatka przekroczyła budżet czasowy. (I6c2aa, b/203008701)

Wersja 1.1.0-alpha09

13 października 2021 r.

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

Poprawki błędów

  • Obsługa usuwania pamięci podręcznej strony jądra bez dostępu do roota w interfejsie API 31/S+, co zwiększy dokładność uruchamiania StartupMode.COLD. (Iecfdb, b/200160030)

Wersja 1.1.0-alpha08

29 września 2021 r.

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

Zmiany interfejsu API

  • Włącz testy porównawcze makr przewijania, aby uruchamiać z powrotem do interfejsu API 23 (If39c2, b/183129298)
  • Dodaj do interfejsu użytkownika i danych wyjściowych JSON nowy typ próbkowanych wskaźników, który skupia się na centylu wielu próbek w każdej iteracji. (I56247, b/199940612)
  • Przełącz się na wskaźniki zmiennoprzecinkowe w bibliotekach testów porównawczych (skrócone w interfejsie Studio). (I69249, b/197008210)

Wersja 1.1.0-alpha07

1 września 2021 roku

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

Zmiany interfejsu API

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

Poprawki błędów

  • Naprawiono ProfileInstaller, aby ułatwić aplikacjom korzystającym z profili podstawowych przeprowadzanie testów porównawczych z uż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 lub nowszej (Ic4b34, b/158303822).

Znane problemy

  • CompilationMode.BaselineProfile jest w trakcie opracowywania. Unikaj używania go do określania jakości profilu na razie.

Wersja 1.1.0-alpha05

4 sierpnia 2021 r.

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

Pakiet 1.1.0-alpha04 został anulowany przed premierą z powodu sporatycznej awarii. b/193827052

Zmiany interfejsu API

  • Przełączono metodę startActivityAndWait, aby wywoływał uruchomienie za pomocą metody am start, co skraca czas każdej iteracji pomiaru o około 5 sekund i rezygnuje z obsługi elementów właściwości planowanych. (I5a6f5, b/192009149

Poprawki błędów

  • Zmniejsza agresywność wykrywania dławienia termicznego i oblicz ponownie wartość bazową w przypadku częstego wykrywania ograniczeń. (I7327b)
  • Poprawia działanie FrameTimingMetric, by działało na Androidzie S w wersji beta (Ib60cc, b/193260119).
  • Użyj narzędzia EmptyActivity, aby przywrócić aplikację docelową ze stanu wymuszonego zatrzymania, aby zapewnić lepsze 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 wskaźnik „fullDrawnMs”, aby zmierzyć czas do ukończenia renderowania przez aplikację. Aby zdefiniować te dane dla aplikacji, wywołaj Activity.reportFullyDrawn, gdy początkowe treści będą gotowe, np. gdy początkowe elementy listy zostaną wczytane z bazy danych lub sieci. (metoda reportFullyDrawn jest dostępna bez sprawdzania wersji kompilacji w komponencie KomponentActivity). Pamiętaj, że test musi trwać wystarczająco długo, aby można było zarejestrować wskaźnik (startActivityAndWaitn nie czeka na zakończenie raportu reportFullyDrawn). (If1141, b/179176560)
  • Zmniejsz koszty dołączania metadanych Ui do logów czasu o ponad 50 ms (Ic8390, b/193923003)
  • Znacznie zwiększona częstotliwość odpytywania podczas zatrzymywania śledzenia, co może np. skrócić czas działania testu porównawczego uruchamiania o ponad 30% (Idfbc1, b/193723768)

Wersja 1.1.0-alfa03

16 czerwca 2021 r.

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

Nowe funkcje

Poprawki błędów

  • Przykładowy kod Gradle do pomijania błędów analizy porównawczej został zaktualizowany, aby używał niewycofanego interfejsu API ze składnią obsługującą także użytkowników korzystających z pliku .gradle.kts.

    Np.

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

Wersja 1.1.0-alfa02

18 maja 2021 r.

Test porównawczy w wersji 1.1.0-alfa02 wnosi duży element do testów porównawczych – Macrobenchmark. Oprócz testu porównawczego umożliwiającego mierzenie pętli procesora macrobenchmark umożliwia także pomiar interakcji z całą aplikacją, np. uruchamiania i przewijania, oraz rejestrowania logów czasu. Więcej informacji znajdziesz w dokumentacji biblioteki.

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

Nowe funkcje

Dodane artefakty analizy porównawczej (androidx.benchmark:benchmark-macro-junit4 i androidx.benchmark:benchmark-macro)

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

Poprawki błędów

  • Obejście problemu z uprawnieniami powłoki w katalogu wyjściowym w Androidzie 12 (uwaga: może być konieczne zaktualizowanie wtyczki Android Gradle do wersji 7.0.0 Canary, a Android Studio do wersji Arctic Fox (2020.3.1), aby nadal zapisywać pliki wyjściowe na urządzeniach, których dotyczy problem). (Icb039)
  • Obsługa buforowania konfiguracji w narzędziu BenchmarkPlugin (6be1c1, b/159804788)
  • Uproszczone wyjście pliku – domyślnie włączone w katalogu, który nie wymaga requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Naprawiono ostrzeżenia logcat dotyczące drukowania w bibliotece, które nie znalazły wątku JIT w wersjach platformy, w których go nie ma. (I9cc63, b/161847393)
  • Naprawiono odczytywanie maksymalnej częstotliwości na urządzeniu. (I55c7A)

Wersja 1.1.0-alpha01

10 czerwca 2020 r.

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 i androidx.benchmark:benchmark-junit4:1.1.0-alpha01 zostały udostępnione. Wersja 1.1.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje w wersji 1.1

  • Wskaźnik alokacji – testy porównawcze uruchamiają teraz dodatkową fazę po przygotowaniu i czasie, w którym rejestrowana jest liczba alokacji. Przydział może powodować problemy z wydajnością w starszych wersjach platformy (140 ns w O zamieniło się w 8 ns w M – mierzone na Nexusie5X przy zablokowanych zegarach). Te dane są widoczne w danych wyjściowych konsoli Android Studio, a także w tabeli
  • Obsługa profilowania – teraz możesz przechwytywać dane profilowania na potrzeby testu porównawczego, aby sprawdzić, dlaczego Twój kod działa wolno. Test porównawczy obsługuje śledzenie jednej z metod lub dobór metod z ART. Pliki można sprawdzić za pomocą programu Profiler w Android Studio, klikając kolejno Plik > Otwórz.
  • Wtyczka Benchmark Gradle udostępnia teraz ustawienia domyślne, aby uprościć konfigurację:
    • Aby uniknąć używania zależności z wbudowanym zasięgiem kodu, zasada testBuildType jest domyślnie ustawiona na zwalnianie. Obiekt buildType wersji jest też skonfigurowany jako domyślny obiekt BuildType, dzięki czemu Android Studio może automatycznie wybrać prawidłowy wariant kompilacji przy pierwszym otwarciu projektu. (b/138808399)
    • signingConfig.debug jest używany jako domyślna konfiguracja podpisywania (b/153583269)

** Poprawki błędów **

  • Znacznie zmniejszyły się koszty związane z przejściem w ramach rozgrzewki, ponieważ pierwszy pomiar dla każdego testu porównawczego był sztucznie wyższy niż w innych testach. Ten problem był wyraźniejszy w bardzo niewielkich testach porównawczych (do 1 mikrosekundy). (b/142058671)
  • Naprawiliśmy InstrumentationResultParser błąd drukowany w każdej analizie porównawczej podczas uruchamiania z wiersza poleceń. (I64988, b/154248456)

Znane problemy

  • Wiersz poleceń, wywołania narzędzia Gradle analizy porównawczej nie wydrukują wyników bezpośrednio. Możesz obejść ten problem, uruchamiając Studio lub analizując wyjściowy plik JSON, aby uzyskać wyniki.
  • Raportowanie porównawcze nie pobiera raportu z urządzeń, na których zainstalowano aplikację o identyfikatorze aplikacji z identyfikatorem „applicationId” kończącym się ciągiem „android” lub „download” (wielkość liter nie jest rozróżniana). Użytkownicy, którzy napotkają ten problem, powinni uaktualnić wtyczkę Androida do obsługi Gradle do wersji 4.2-alfa01 lub nowszej.

Wersja 1.0.0

Wersja testu porównawczego 1.0.0

20 listopada 2019 r.

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

Główne funkcje 1.0.0

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

Zapobiega problemom z konfiguracją kompilacji i czasu działania oraz stabilizuje wydajność urządzenia, zapewniając dokładność i spójność pomiarów. Przeprowadzaj testy porównawcze bezpośrednio w Android Studio lub w ciągłej integracji, aby obserwować wydajność kodu w czasie i zapobiegać regresjom.

Najważniejsze funkcje:

  • Stabilizacja zegara
  • Automatyczne nadawanie priorytetów wątkom
  • Obsługa testowania wydajności interfejsu, np. RecyclerView Sample
  • Rozgrzewka z uwzględnieniem JIT i pętla
  • Test porównawczy JSON na potrzeby przetwarzania końcowego

Wersja 1.0.0-rc01

23 października 2019 r.

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 i androidx.benchmark:benchmark-junit4:1.0.0-rc01 zostały udostępnione. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano śledzenie systrace do testów porównawczych

Poprawki błędów.

  • Rozwiązaliśmy problem z niestabilnością danych, który powodował, że JIT nie kończył się przed rozgrzewką z powodu obniżenia priorytetu danych (b/140773023).
  • Ujednolicony katalog wyjściowy JSON we wtyczce Androida do obsługi Gradle w wersjach 3.5 i 3.6

Wersja 1.0.0-beta01

9 października 2019 r.

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 i androidx.benchmark:benchmark-junit4:1.0.0-beta01 zostały udostępnione. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • Uruchamiaj czyszczenie pamięci przed każdym rozgrzewką, aby zmniejszyć wykorzystanie pamięci z jednego testu porównawczego do wycieku do kolejnej (b/140895105)

Poprawki błędów.

  • Dodano zależność androidx.annotation:android-experimental-lint, aby kod w Javie prawidłowo zwracał błędy lintowania, gdy nie jest używany eksperymentalny interfejs API, podobnie jak w przypadku eksperymentalnej adnotacji Kotlin w przypadku wywołań Kotlin.
  • Teraz poprawnie wykrywa użycie argumentu instrumentacji additionalTestOutputDir na potrzeby danych wyjściowych we wtyczce Androida do obsługi Gradle w wersji 3.6, aby określić, kiedy AGP obsługuje kopiowanie danych.
  • Napraw niewykrytą częstotliwość zegara w formacie JSON, aby poprawnie wydrukować -1 (b/141945670).

Wersja 1.0.0-alpha06

18 września 2019 r.

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 i androidx.benchmark:benchmark-junit4:1.0.0-alpha06 zostały udostępnione. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy sprawdzanie nieprawidłowego użycia starego pakietu w procesie uruchamiania testów. Teraz wyświetla się przydatniejszy komunikat o błędzie.

Zmiany interfejsu API

  • Eksperymentalna adnotacja ExperimentalAnnotationReport jest teraz poprawnie publiczna. Użycie tej adnotacji wymaga teraz użycia eksperymentalnego interfejsu API BenchmarkState#report

Wersja 1.0.0-alpha05

5 września 2019 r.

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 i androidx.benchmark:benchmark-junit4:1.0.0-alpha05 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

  • Interfejs API BenchmarkState.reportData jest teraz oznaczony jako eksperymentalny

Poprawki błędów.

  • Poprawiliśmy skrypt blokujący zegar, który powodował awarię na urządzeniach bez narzędzi powłoki cut 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 do formatu JSON:
    • Łączny czas trwania testu wyjściowego testu porównawczego (b/133147694)
    • Testy porównawcze @Parameterized, które korzystają z ciągu nazwy (np. @Parameters(name = "size={0},depth={1}")), wyświetlają teraz w danych wyjściowych JSON nazwy i wartości parametrów dla punktu odniesienia (b/132578772)
  • Tryb uruchomienia próbnego (b/138785848)
    • Dodaliśmy tryb próbny, dzięki któremu każdą pętlę testu porównawczego wykonujemy tylko raz, aby sprawdzać występowanie błędów/awarii bez rejestrowania pomiarów. Może to być przydatne, np. do szybkiego przeprowadzania testów porównawczych podczas przesyłania przed przesłaniem, aby sprawdzić, czy nie występują błędy.

Zmiany interfejsu API

  • Zmieniła się struktura modułu, co powoduje podział biblioteki (b/138451391)
    • benchmark:benchmark-junit4 zawiera klasy z zależnością JUnit: AndroidBenchmarkRunner 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. Przykład: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Poprawki błędów.

  • Błędy podczas zapisywania w pamięci zewnętrznej na urządzeniach Q zapewniają bardziej opisowe wiadomości wraz z sugestiami rozwiązania problemu
  • Ekrany włączają się automatycznie podczas testów porównawczych, a nie wyłączają się, gdy ekran jest wyłączony

Treści publikowane przez użytkowników zewnętrznych

  • Dziękujemy Siergiejowi Zacharowaowi za wkład w ulepszenia danych wyjściowych JSON i rozwiązanie problemów z wyłączeniem ekranu.

Wersja 1.0.0-alpha03

2 lipca 2019 r.

androidx.benchmark:benchmark:1.0.0-alpha03 i androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Pokaż czas trwania snu z powodu ograniczenia dotyczącego temperatury na podstawie testu porównawczego w pełnym raporcie JSON

Poprawki błędów.

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

Wersja 1.0.0-alpha02

6 czerwca 2019 r.

androidx.benchmark:1.0.0-alpha02 i androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 zostały zwolnione. Zobowiązania zawarte w tej wersji znajdziesz tutaj.

Pamiętaj, że schemat JSON traktujemy jako interfejs API. Planujemy stosować te same ograniczenia w zakresie stabilności co w przypadku innych interfejsów API: stabilne (z bardzo rzadkimi wyjątkami) w wersji beta i poprawione w wersji ostatecznej, z dodatkami tylko w przypadku niewielkich wersji oraz zmianami/usunięciami w dużych wersjach.

Zmiany interfejsu API

  • Przebudowany schemat JSON. Dalsze zmiany w schemacie JSON prawdopodobnie będą ograniczone do dodatków:

    • Zreorganizowaliśmy strukturę obiektów wyników, aby w przyszłości obsługiwać dodatkowe grupy danych (b/132713021)
    • Do obiektu najwyższego poziomu (b/132711920) dodano informacje kontekstowe uruchomienia testu, takie jak informacje o urządzeniu i kompilacji oraz o tym, czy zegary są zablokowane
    • Nazwy danych dotyczących czasu mają teraz w nazwie „ns” (b/132714527)
    • Dodano dodatkowe statystyki dla poszczególnych raportowanych danych (maksymalne, mediana, minimum) oraz usunięto uproszczone statystyki „nanos” (b/132713851)
  • Usunięto dane wyjściowe XML (b/132714414)

  • Usunięto wykrywanie ograniczania temperatury z interfejsu API BenchmarkState.reportData (b/132887006)

Poprawki błędów.

  • Rozwiązaliśmy problem z zapisywaniem treści ./gradlew lockClocks na niektórych najnowszych urządzeniach z systemem operacyjnym (b/133424037)
  • Wykrywanie ograniczania zostało wyłączone w emulatorze (b/132880807)

Wersja 1.0.0-alpha01

7 maja 2019 r.

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