Test porównawczy
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
30 lipca 2025 r. | 1.4.0 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od Benchmark, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w artykule Repozytorium Maven Google.
Test porównawczy
Aby używać Macrobenchmark w projekcie, dodaj te zależności do pliku build.gradle
w module testów porównawczych:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.0") }
Mikrotest
Aby używać mikrotestów porównawczych w projekcie, dodaj te zależności do pliku build.gradle
w module mikrotestów porównawczych:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Biblioteka Microbenchmark zawiera też wtyczkę Gradle do użycia z modułem mikrobenchmarków.
Ten wtyczek ustawia domyślne konfiguracje kompilacji dla modułu, konfiguruje kopię danych wyjściowych testu porównawczego na hoście i zapewnia zadanie
./gradlew lockClocks
.
Aby użyć tego wtyczki, umieść ten wiersz w bloku „plugins” w pliku najwyższego poziomu build.gradle
:
Groovy
plugins { id 'androidx.benchmark' version '1.4.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.4.0" apply false }
Następnie zastosuj wtyczkę do pliku build.gradle
modułu testów porównawczych.
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.4
Wersja 1.4.0
30 lipca 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0
Wersja 1.4.0 zawiera te zmiany.
Ważne zmiany od wersji 1.3.0
Mikrotest
- Przeniesiono zadania Gradle
lockClocks
iunlockClocks
do projektów testów porównawczych zamiast na najwyższy poziom, aby zachować izolację projektu Gradle. - Przebudowaliśmy
BenchmarkRule
, aby korzystać z korutyn i lepiej obsługiwaćyield()
. Powinno to znacznie zmniejszyć ryzyko wystąpienia błędów ANR podczas testów porównawczych, zwłaszcza długich testów CI. Uwaga: testy porównawcze interfejsu powinny być przeprowadzane z użyciemmeasureRepeatedOnMainThread
.
Macrobenchmark
- Dodano obejście problemu na interfejsie API w wersji 34 lub nowszej, który powodował, że funkcja
CompilationMode.None()
działała w sposób niejednolity, ponieważ środowisko ART częściowo kompilowało aplikacje po pierwszym uruchomieniu. - Funkcja eksperymentalna – Startup Insights może wyróżniać niektóre typowe problemy w mikrobenchmarku uruchamiania, przekazując wartość
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))
. - Dodano ArtMetric, którego można używać do wykrywania kompilacji JIT i niezoptymalizowanego wczytywania klas – oba te elementy są przydatne do weryfikowania optymalizacji profilu podstawowego.
Profile podstawowe
BaselineProfileRule
zbiera teraz profile aplikacji wieloprocesowych.
Inne zmiany
- TraceProcessor został wyodrębniony do osobnej biblioteki (
androidx.benchmark:benchmark-traceprocessor
), aby można go było używać poza danymiMacrobenchmark
w innych przypadkach. Można go też uruchomić na komputerowej maszynie JVM, definiując własny ServerLifecycleManager.
Wersja 1.4.0-rc01
18 czerwca 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-rc01
Wersja 1.4.0-rc01 zawiera te zmiany.
Poprawki błędów
- Dodaliśmy obejście problemu z obrazami środowiska wykonawczego, które powodują, że
CompilationMode.None()
nie mierzy wydajności w najgorszym przypadku po pierwszej iteracji. Niestety to obejście wymaga 5-sekundowego opóźnienia, aby celowo uszkodzić obraz środowiska wykonawczego na początku każdego zestawu testów makro (I4a4f1).
Wersja 1.4.0-beta02
4 czerwca 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-beta02
Wersja 1.4.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy
BaselineProfileConfig.Builder
, aby ułatwić wywoływanieBaselineProfileRule.collectWithResults()
przez programistów Java. (I94905)
Wersja 1.4.0-beta01
7 maja 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-beta01
Wersja 1.4.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano wariant konstruktora
PerfettoTraceRule
, który akceptujePerfettoConfig
(Ie53ba)
Poprawki błędów
- Zaktualizowano format linku do statystyk dotyczących startupów, aby używać prawidłowej wtyczki i bardziej przejrzystego separatora (
:
jest krótszy niż%3A
, ale oba są obsługiwane) (Ie18ef).TraceProcessor
- Zawsze używaj wymuszonego zatrzymywania do zamykania procesów, nawet w przypadku zrootowanych urządzeń i zamykania aplikacji systemowych. Poprawia wyjątki w formularzu:
Expected no stdout/stderr from killall ... No such process
. (Idca2c)
Wkład zewnętrzny
- Dodano moduł obsługi wyjątku serwera proxy dla
TraceProcessorHttpServer
(I480f5)
Wersja 1.4.0-alpha11
9 kwietnia 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha11
Wersja 1.4.0-alpha11 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniono argument
TraceProcessor
's timeout: Duration na timeoutMs, aby zwiększyć użyteczność dla wywołującego w Javie. (I9fbb5) - Oznacz konstruktor
TraceProcessor
jako wewnętrzny. Dzwoniący powinni używaćTraceProcessor.startServer
lubTraceProcessor.runServer
. (Ia8c5b)
Poprawki błędów
- Podczas zamykania aplikacji za pomocą polecenia
MacrobenchmarkScope.killProcess
sprawdzaj wyniki polecenia zamykania, aby zapobiec cichemu niepowodzeniu i błędom związanym z przekroczeniem limitu czasu. (I84555)
Aktualizacje zależności
- Ta biblioteka jest teraz kierowana na poziom języka Kotlin 2.0 i wymaga KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
Wersja 1.4.0-alpha10
26 marca 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha10
Wersja 1.4.0-alpha10 zawiera te zmiany.
Zmiany w interfejsie API
- Zwiększyliśmy domyślny limit czasu oczekiwania na
TraceProcessor
obciążenie serwera i zapytania do 120 sekund (wcześniej 60/30) i umożliwiliśmy konfigurowanie obu tych wartości za pomocą jednego parametru limitu czasu. (Ifec87)
Poprawki błędów
- Rozwiązaliśmy kilka problemów, które występowały podczas testowania porównawczego lub rejestrowania profili aplikacji bez
profileinstaller
, a które zawierałyBroadcastReciever
. Dotyczy to tylko uruchamiania na zrootowanych urządzeniach. (Ied308)
Wersja 1.4.0-alpha09
12 marca 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha09
Wersja 1.4.0-alpha09 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano
TraceProcessor
i Session API z uchwytami, które można zamknąć, co ułatwia korzystanie z niestandardowych cykli życia. Jest to też krok w kierunku ułatwienia korzystania z interfejsów Coroutine i Java API. Funkcje rozszerzeniaTraceProcessor.runServer {}
są teraz oznaczone jako eksperymentalne, ponieważ prawdopodobnie zostaną przeniesione i w przyszłości przestaną być eksperymentalne. (I358b4)
Poprawki błędów
- Naprawiono problem z nieprawidłowym działaniem funkcji Fixed Benchmark i Baseline Profile w przypadku interfejsu API 36 z powodu zmiany w
pgrep
toybox, która wymaga teraz-a
do drukowania pełnego wiersza poleceń. (Idc991) - Filtruj domyślną konfigurację śledzenia, aby zmniejszyć ryzyko utraty danych w przypadku śladów na nowszych poziomach interfejsu API. (I54e8a)
- Dodano eksperymentalny argument
androidx.benchmark.killExistingPerfettoRecordings
instrumentation, który można ustawić nafalse
, aby umożliwić dalsze przechwytywanie śladów Perfetto. Domyślnie istniejące ślady perfetto na urządzeniu są usuwane, aby zapobiec zakłóceniom. (I02a3c) - W przypadku opublikowanych wersji systemu operacyjnego na poziomie interfejsu API 35 i wyższym pole JSON
context.osCodenameAbbreviated
będzie teraz miało wartośćREL
, ponieważ nazwy kodowe inne niż numeryczne nie są już obsługiwane przez platformę bazową. (Ib17fd) - Naprawiono awarię w
FrameTimingMetric
, która występowała w przypadku ponownej synchronizacji klatek. (I7c6f4, b/394610806) - Nie zakładaj już, że
Choreographer#doFrame
jest górną częścią ramki stosu w głównym wątku dlaFrameTimingQuery
. (Iee0e0, b/340206285)
Wersja 1.4.0-alpha08
12 lutego 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha08
Wersja 1.4.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Przeniesiono interfejsy API rozszerzeń
TraceProcessor.runSession()
do wersji eksperymentalnej, ponieważ prawdopodobnie w przyszłości staną się one konkretnymi konstruktorami na Androidzie. (Ib0528, b/393640753) - Większość implementacji Startup Insights jest obecnie publiczna lub eksperymentalna i została przeniesiona do artefaktu
TraceProcessor
. Więcej informacji znajdziesz wStartupInsights
. (I0aa00) - Zastąpienie wartości
BenchmarkRule.runWithTimingDisabled {}
wartościąBenchmarkRule.runWithMeasurementDisabled {}
, która lepiej opisuje zachowanie – wszystkie dane są wstrzymane. Dodatkowo udostępnij superklasęMicrobenchmarkScope
, ponieważ ponowne zadeklarowanie funkcjirunWithMeasurementDisabled
w celu otwarcia dostępu nie jest możliwe, ponieważ jest ona wstawiana w kodzie. (I9e23b, b/389149423, b/149979716) - Biblioteki testów porównawczych zostały przeniesione do Kotlin 2.0. (I9d1e0)
- Usunięto argument
androidx.benchmark.startupProfiles.enable
instrumentacji. Nie jest już przydatna, ponieważ można nią sterować za pomocą argumentuincludeInStartupProfile
wBaselineProfileRule.collect()
. (I39eb4)
Poprawki błędów
- Zmniejszono liczbę wewnętrznych funkcji mikrobenczmarku wywoływanych podczas profilowania, aby np.ślady metod były bardziej czytelne (Ifaed8).
- Spekulatywna poprawka dotycząca awarii: „Nie udało się zatrzymać [
ProcessPid(processName=perfetto, pid=...)
]”. Teraz Test porównawczy będzie rejestrować komunikat zamiast ulegać awarii, gdy nie będzie można zatrzymać procesu Perfetto w tle przed uruchomieniem testu porównawczego. (I37d3e, b/323601788) - Naprawiono błędy
IllegalStateExceptions
z etykietą „Expectedpm dump-profiles
stdout”, które były spowodowane zbyt rygorystycznym sprawdzaniem formatu danych wyjściowych. (I358dc)
Wersja 1.4.0-alpha07
29 stycznia 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha07
Wersja 1.4.0-alpha07 zawiera te zmiany.
Nowe funkcje
BaselineProfileRule
udostępnia teraz interfejscollectWithResults(...)
API, który zawiera listę ścieżek do obliczonych profili. (I056f8)- Dodano argument
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline
, który można ustawić na wartość false, aby wyłączyć zachowaniemeasureRepeatedOnMainThread
polegające na zgłaszaniu wyjątku po upływie terminu w przypadku testów lokalnych. Nie jest to zalecane, ponieważ zwiększa prawdopodobieństwo wystąpienia błędów ANR podczas testów. (Idbeec, b/353226476)
Zmiany w interfejsie API
- Dodano
@JvmOverloads
do konstruktoraMicrobenchmarkConfig
. (I13fd3) - Przebudowaliśmy
BenchmarkRule
, aby korzysta�� z korutyn i lepiej obsługiwaćyield()
. W ramach tej zmiany usunęliśmy kilka eksperymentalnych interfejsów APIBenchmarkState
, ale w razie potrzeby zastąpimy je innymi. Dodaliśmy też symbolrunWithMeasurementDisabled
, aby wyjaśnić działanie (wszystkie pomiary są wstrzymane). W przyszłościrunWithTimingDisabled
zostanie wycofana. (I19837, b/389149423, b/311242861) - Przenieś
PerfettoTraceProcessor
doTraceProcessor
w nowym artefakcieandroidx.benchmark:benchmark-traceprocessor
i spraw, aby większość jego interfejsów API nie była eksperymentalna. Wszystkie niestandardoweTraceMetric
lub elementy odczytujące dane ze śladów będą musiały zostać zaktualizowane do nowego importuTraceProcessor
. Nowy interfejsTraceProcessor
API działa dokładnie tak samo jak stary, ale jest samodzielną biblioteką interfejsu (podobną do warstwyandroidx.sqlite
z Room) z implementacją na Androida wbudowaną w makrobenchmark. Nowy artefakt można też używać na JVM, ale obecnie musisz uruchomić własną kopię pliku binarnegoTraceProcessor
i udostępnić port, z którym można się połączyć. (I3a767, I62563, b/381134564)
Poprawki błędów
- Wyświetlanie bardziej szczegółowego komunikatu o błędzie, gdy
MacrobenchmarkScope.startActivityAndWait
nie może uruchomić procesu docelowego (prawdopodobnie z powodu awarii w tym procesie), zamiast bardziej niejednoznacznego komunikatu „Nie można potwierdzić zakończenia uruchamiania działania” (I3539b). - Naprawiono kilka błędów składni w przykładach w języku Kotlin oraz podświetlanie składni w kilku przykładach w języku Java i w plikach build.gradle. (Ib3808)
- Doprecyzowana dokumentacja parametrów
ArtMetric
iCaptureInfo
. (I96e60)
Wersja 1.4.0-alpha06
11 grudnia 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha06
Wersja 1.4.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto użycie znaku
@Language("sql")
wPerfettoTraceProcessor.Session.query()
, ponieważ wyróżnianie i analizowanie w Studio nie działa. (Idc2fa, b/377733398)
Poprawki błędów
- Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typach. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie:
-Xjspecify-annotations=strict
(jest to domyślne ustawienie od wersji 2.1.0 kompilatora Kotlin). (I46810, b/326456246) - Poprawiono
ArtMetric
, aby zgłaszać wczytywanie klasy (nie inicjowanie), i ulepszono dokumentację, aby wyjaśnić działanie w czasie działania programu. (I9915c) - W przypadku Androida Multiuser polecenia są wykonywane jako root tylko na urządzeniach z odblokowanym dostępem do roota. (I88b44)
Wersja 1.4.0-alpha05
13 listopada 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha05
Wersja 1.4.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem w przypadku interfejsu API w wersji 34 lub nowszej, który powodował, że funkcja
CompilationMode.None()
działała w sposób niespójny i nieodzwierciedlający początkowej wydajności w najgorszym przypadku. Jest to obejście zmiany platformy, która umożliwia częściową kompilację aplikacji przez stan kompilacji ARTverify
(wpływa tylko na wczytywanie klas) krótko po pierwszym uruchomieniu. (Ie48d0) - Rozwiązano problem, który powodował, że można było rejestrować (zwłaszcza krótkie) ślady, które nie raportowały pomiarów z wbudowanych danych Macrobenchmark Metrics, ponieważ nazwa procesu była obcinana w śladzie Perfetto. Obecnie makrobenchmark radzi sobie z tym problemem, wyszukując skróconą nazwę pakietu we wszystkich wbudowanych zapytaniach, a nie tylko w oczekiwanej nazwie pakietu. Pamiętaj, że niestandardowe implementacje
TraceMetric
lub inne bezpośrednie wywołaniaPerfettoSession.query
mogą zaimplementować to samo zachowanie, zmieniającprocess.name LIKE "$packageName"
w zapytaniu Perfetto na(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. (I5bf01, b/377565760)
Wersja 1.4.0-alpha04
30 października 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha04
Wersja 1.4.0-alpha04 zawiera te zmiany.
Nowe funkcje
- (Eksperymentalne) Włącz generowanie profilu podstawowego i testowanie porównawcze w przypadku aplikacji zainstalowanych na koncie dodatkowego użytkownika, np. dowolnej aplikacji na urządzeniach z Androidem Auto bez ekranu. Ta funkcja została przetestowana w kilku scenariuszach, ale jeśli nie działa u Ciebie, zgłoś błąd. (I9fcbe, b/356684617, b/373641155)
Poprawki błędów
- W przypadku kompilacji referencyjnych wartość
isProfileable
jest teraz zawsze zastępowana, a w przypadku kompilacji referencyjnych inonMinified
(podstawowe przechwytywanie profilu) wartośćisDebuggable
jest teraz również zawsze zastępowana. (I487fa, b/369213505) - Poprawiono wykrywanie kompilacji na niektórych urządzeniach fizycznych przed API 28 – dotyczy to pliku JSON
context.compilationMode
oraz działania funkcjiandroidx.benchmark.requireAot=true
(która nie zgłasza już nieprawidłowo wyjątku) (Ic3e08, b/374362482). - W przypadku danych
CpuEventCounter
zgłaszaj wyjątek, jeśli wystąpią nieprawidłowe pomiary (np.instrukcje/cykle_procesora==0) (I8c503).
Wersja 1.4.0-alpha03
16 października 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha03
Wersja 1.4.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Macrobenchmark: dodaje
ArtMetric
, którego można używać do sprawdzania pokrycia profilu lub ogólnej wydajności środowiska wykonawczego Androida. Rejestruje liczbę i łączny czas trwania kompilacji JIT, inicjowania klasy (jeśli jest dostępne) i weryfikacji klasy. Dodatkowo zmienionoCaptureInfo
, aby uwzględnić opcjonalną wersję główną ART z wartością domyślną. (I930f7) - Dodaj
coefficientOfVariation
do danych wyjściowych JSON testu porównawczego, aby wyświetlić stabilność w ramach danego testu. (Ib14ea)
Poprawki błędów
- Naprawiono
CollectBaselineProfileTask
, gdy nazwa urządzenia AVD zawierała spacje. (Ia0225, b/371642809) - Spekulatywna poprawka błędów wynikających z wyjątków
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
. Teraz funkcjaMacrobenchmarkScope.killProcess()
(w tym ta uruchamiana przed każdą iteracją, używana do implementowania działaniaStartupMode.COLD
) będzie czekać na potwierdzenie, że wszystkie procesy aplikacji zostały zatrzymane. (I60aa6, b/351582215) - Rozwiązaliśmy problem, który powodował, że na niektórych emulatorach z dostępem do roota pojawiał się błąd UNLOCKED_. (Ic5117)
- Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typach. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie:
-Xjspecify-annotations=strict
(jest to domyślne ustawienie od wersji 2.1.0 kompilatora Kotlin). (I7104f, b/326456246)
Wersja 1.4.0-alpha02
2 października 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha02
Wersja 1.4.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Przeniesiono zadania Gradle
lockClocks
iunlockClocks
do projektów testów porównawczych zamiast udostępniać je na najwyższym poziomie. Ta zmiana była konieczna, ponieważ nie ma możliwości zarejestrowania tych działań jako działań najwyższego poziomu bez naruszania izolacji projektu. (I02b8f, b/363325823)
Poprawki błędów
BaselineProfileRule
zbiera teraz profile aplikacji wieloprocesowych, sygnalizując każdy uruchomiony proces na końcu bloku, aby zrzucać profile. Jeśli kompilacja oparta na profilu nigdy nie znajdzie procesu, do którego można by wysłać transmisję, zakończy się niepowodzeniem, ponieważ dane profilu nie powinny się w niej znajdować. Dodaliśmy też argument instrumentacji, który pozwala kontrolować czas oczekiwania na zrzut:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469)- Z Benchmark
1.3.2
: naprawiono problem z Laboratorium Firebase (FTL), które nie mogło pobrać plików wyników profilu podstawowego ani makrobenchmarku z wtyczki Gradle profilu podstawowego. (I2f678, b/285187547)
Aby użyć FTL, zastosuj wtyczkę do modułu profilu podstawowego w bloku wtyczek, używając:
plugins {
...
id("com.google.firebase.testlab")
}
a następnie skonfiguruj Laboratorium Firebase w ten sposób:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Utworzone urządzenie FTL należy też dodać do rozszerzenia profilu podstawowego:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Wersja 1.4.0-alpha01
18 września 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.4.0-alpha01
Wersja 1.4.0-alpha01 zawiera te zmiany.
Nowa funkcja – statystyki uruchamiania aplikacji
- Wstępną wersję statystyk uruchamiania aplikacji można włączyć w bibliotece Macrobenchmark. (09fae38)
Aby włączyć test porównawczy dotyczący startupów:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Następnie uruchomienie testu porównawczego uruchamiania przeanalizuje ślad w poszukiwaniu typowych problemów i wyświetli je po danych w danych wyjściowych testu Studio na karcie testu porównawczego, np.:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Ta funkcja jest wciąż w fazie rozwoju, a w przyszłości planujemy ulepszyć dokumentację i rozszerzalność. Chętnie poznamy Twoją opinię.
Nowe funkcje
- Dodano właściwość Gradle
androidx.baselineprofile.suppressWarnings
, aby wyciszyć wszystkie ostrzeżenia dotyczące profilu podstawowego. (314153a) - Dane mikropomiarów są teraz wyświetlane w śladach Perfetto jako liczniki. (3214854)
- Dodano eksperymentalne skrypty do wyłączania kompilacji JIT (wymaga roota lub ponownego uruchomienia środowiska wykonawczego) i resetowania stanu wydajności/testu urządzenia. Nie są one obecnie publikowane jako zadania Gradle. (7c3732b)
- Dodaliśmy argument testu porównawczego, aby pomijać testy podczas uruchamiania na emulatorze. Gdy włączona jest kompilacja
automaticGenerationDuring
, testy porównawcze również uruchamiają generowanie profilu podstawowego. Jeśli używane są emulatory, ta czynność się nie powiedzie. Dzięki nowemu argumentowiskipBenchmarksOnEmulator
możemy pominąć test. (0c2ddcd) - Zmiana logiki włączania zdarzeń dotyczących wydajności, aby działała w przypadku interfejsu API w wersji 23 lub nowszej (2550048)
Zmiany w interfejsie API
- Istniejący eksperymentalny argument
PerfettoConfig
doMacrobenchmarkRule.measureRepeated()
został przeniesiony do nowego obiektuExperimentalConfig
.
Poprawki błędów
- Zwiększ liczbę ponownych prób
lockClocks.sh
(99e9dac) - Nie twórz typów kompilacji
nonMinified
i testów porównawczych, jeśli już istnieją. Z powodu błędu nawet jeśli istniały typy kompilacjinonMinified
i testu porównawczego, zostaną one utworzone ponownie. (e75f0a5) - Ignoruj niekończące się wycinki z
TraceSectionMetric
wyników. (a927d20) - Ulepszone sprawdzanie emulatora, które uwzględnia prefiks
sdk_
. (1587de8) - Traktuj nieuruchomione pakiety jako wyczyszczone w
FrameTimingGfxInfoMetric
. (35cc79c) - Poprawiono
androidx.benchmark.cpuEventCounter
, które generowało uszkodzone wartości w przypadku zdarzeń innych niż instrukcje. (06edd59) - Poprawka
resumeTiming/runWithTimingDisabled
, aby uwzględniać kolejność priorytetów danych i znacznie ograniczyć wpływ wstrzymywania/wznawiania danych o niższym priorytecie na wyniki danych o wyższym priorytecie. Na przykład jeśli używasz liczników wydajności procesora za pomocą argumentu instrumentacjicpuEventCounter.enable
, czas w nanosekundach nie jest już znacznie skracany w przypadku wstrzymania lub wznowienia. (5de0968)
Wersja 1.3
Wersja 1.3.4
26 marca 2025 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.4
Wersja 1.3.4 zawiera te zmiany.
Poprawki błędów
- Rozwiązanie problemów z niezgodnością izolacji projektu Gradle we wtyczce Gradle Benchmark Baseline. (b/404523257)
Wersja 1.3.3
16 października 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.3
Wersja 1.3.3 zawiera te zmiany.
Poprawki błędów
- Naprawiono
CollectBaselineProfileTask
, gdy urządzenie AVD zawierało spacje (Ia0225, b/371642809)
Wersja 1.3.2
2 października 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.2
Wersja 1.3.2 zawiera te zmiany.
Poprawki błędów
- Naprawiono problem z Laboratorium testów Firebase (FTL), które nie mogło pobierać plików wyników profilu podstawowego ani testu porównawczego makro z wtyczki Gradle profilu podstawowego. (I2f678, b/285187547)
Aby użyć FTL, zastosuj wtyczkę do modułu profilu podstawowego w bloku wtyczek, używając:
plugins {
...
id("com.google.firebase.testlab")
}
a następnie skonfiguruj Laboratorium Firebase w ten sposób:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Utworzone urządzenie FTL należy też dodać do rozszerzenia profilu podstawowego:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Wersja 1.3.1
18 września 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.1
Wersja 1.3.1 zawiera te zmiany.
Poprawki błędów
- Dodano właściwość Gradle
androidx.baselineprofile.suppressWarnings
, aby wyciszyć wszystkie ostrzeżenia dotyczące profili bazowych (I7c36e, b/349646646). - Poprawiliśmy wtyczkę Gradle profilu podstawowego, aby używała wcześniej utworzonych plików
nonMinified…
ibenchmark…
, jeśli zostały utworzone przez aplikację, zamiast tworzyć otoczki. (Ia8934, b/361370179) - Naprawiono
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
, gdy na emulatorach włączona jest funkcjaautomaticGenerationDuringBuild
. Nowy argument służy do pomijania testu. (If3f51, b/355515798) - Minimalizacja mikropomiarów – zachowaj podklasy
org.junit.runner.notification.RunListener
w bibliotece pomiarowej ProGuard (Ic8ed5, b/354264743) - Poprawiono
TraceSectionMetric
, aby ignorować niekończące się wycinki. Wcześniej uznawano, że mają one czas trwania –1, np. podczas sumowania lub znajdowania minimalnego czasu trwania. (If74b7) - Rozwiązaliśmy problem w
FrameTimingGfxInfoMetric
, który powodował, że rozpoczęcie pomiaru kończyło się awarią, jeśli proces nie był jeszcze uruchomiony. (I6e412)
Wersja 1.3.0
21 sierpnia 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0
Wersja 1.3.0 zawiera te zmiany.
Zmiany w mikrotestach porównawczych od wersji 1.2.0
- W przypadku mikropomiarów na większości urządzeń śledzenie metod jest domyślnie włączone.
- Śledzenie metod jest wykonywane w osobnej fazie po pomiarach. Dzięki temu można uzyskać dokładne pomiary i ślady metod z jednego uruchomienia testu porównawczego.
- Śledzenie metod w niektórych wersjach systemu Android i ART będzie miało wpływ na późniejsze fazy pomiaru – w tych wersjach śledzenie metod jest domyślnie wyłączone, a w danych wyjściowych Studio wyświetla się ostrzeżenie.
- Testy porównawcze wątku głównego i błędy ANR
- Dodaliśmy
measureRepeatedOnMainThread
do testów porównawczych wątku interfejsu (np. tych, które wchodzą w interakcję z interfejsami Compose/View), aby uniknąć błędów ANR podczas wykonywania przez wiele sekund. - Ślady metod są pomijane, jeśli oczekuje się, że przekroczą termin unikania ANR. Ustaw wartość
androidx.benchmark.profiling.skipWhenDurationRisksAnr
na false, aby wyłączyć to działanie (nie jest to zalecane w przypadku długotrwałych testów CI, ponieważ błędy ANR mogą powodować problemy).
- Dodaliśmy
- Minifikacja
- Osadzone reguły ProGuard, które poprawiają mikropomiary z włączoną minimalizacją
- Zmniejszanie rozmiaru/R8 w module biblioteki wymaga AGP 8.3 i można je włączyć za pomocą
android.buildTypes.release.androidTest.enableMinification
wbuild.gradle
. - Dodano eksperymentalny interfejs API
BlackHole.consume()
, aby zapobiec usuwaniu martwego kodu (If6812, b/286091643)
- Dane
- Eksperymentalna funkcja licznika zdarzeń procesora (dane z
perf_event_open
, która w większości wersji platformy wymaga dostępu do roota), dostępna za pomocąInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(można ustawić wartośćtrue
) iandroidx.benchmark.cpuEventCounter.events
, np. (Instructions,CpuCycles
). Ta funkcja powinna być obsługiwana na niektórych emulatorach userdebug, ale nie została przetestowana na wszystkich dostępnych emulatorach.
- Eksperymentalna funkcja licznika zdarzeń procesora (dane z
Zmiany w MACRObenchmark od wersji 1.2.0
- Ulepszone śledzenie metod w przypadku testów porównawczych na dużą skalę.
- Ślady metod są teraz ograniczone do czasu trwania
measureBlock
i mogą rejestrować wiele sesji, jeśli proces zostanie uruchomiony wiele razy. - Wcześniej śledzenie metod działało tylko w przypadku testów porównawczych
StartupMode.COLD
i nie rejestrowało niczego w przypadku testówmeasureBlocks
, które nie powodowały ponownego uruchomienia procesu docelowego. - Ślady stałej metody są opróżniane w makrobenchmarku, dzięki czemu powinny być w pełni rejestrowane i prawidłowe nawet na wolniejszych urządzeniach. (I6349a, b/329904950)
- Ślady metod są teraz ograniczone do czasu trwania
- Prawidłowe zrzucanie profilu ART podczas poszczególnych iteracji
warmUp
, gdy proces jest przerywany, dzięki czemu pomiaryCompilationMode.Partial(warmup=N)
są dokładniejsze. (I17923) - Komunikat o błędzie transmisji Drop Shader
- Dodaliśmy sugestie dotyczące debugowania do komunikatu o błędzie dotyczącym nieudanej transmisji cieniowania
- Dodaj 2 argumenty instrumentacji, aby zastąpić zachowanie związane z usuwaniem cieniowania i obejść awarie podczas testowania aplikacji bez
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: można go używać do pomijania wszystkich operacji usuwania shaderów (w tym tych wykonywanych podczas uruchamianiaStartupMode.Cold
), zwłaszcza podczas testowania aplikacji, które nie korzystają jeszcze z profileinstaller w wersji 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: może być używana do tolerowania błędów podczas próby usunięcia shaderów, na przykład podczas testowania porównawczego aplikacji bez profileinstaller w wersji 1.3 (I4f573).
- Dodano eksperymentalny wariant
MacrobenchmarkRule#measureRepeated
, który przyjmuje niestandardowy parametrPerfettoConfig
, aby w pełni dostosować nagrywanie śladu Perfetto. Pamiętaj, że nieprawidłowo skonfigurowane konfiguracje mogą powodować błędy wbudowanych klas wskaźników. (Idfd3d, b/309841164, b/304038384) - Przed uruchomieniem testu Macrobenchmark anuluj zadania dexopt w tle, aby zmniejszyć zakłócenia. (I989ed)
- Makrobenchmark czeka teraz 1 sekundę na opróżnienie profilu ART przez aplikację docelową (wcześniej czekał 500 ms). (I85a50, b/316082056)
- Zmiany w TraceSectionMetric
- Uwaga: poniższe zmiany
TraceSectionMetric
mogą mieć wpływ na wyniki w przypadku użycia CI i spowodować nieciągłości lub przerwanie analizowania. - Suma jest teraz wartością domyślną, ponieważ w większości przypadków te dane są używane w przypadku powtarzających się zdarzeń, a wartość „Pierwsze” odrzucałaby dane w takich sytuacjach.
- Zmieniono, aby można było je bardziej dostosowywać i aby miały więcej dostępnych trybów.
- Nazwy trybów są teraz osadzone w nazwie danych wyjściowych dotyczących danych (w Studio i JSON).
- Obsługuje teraz wycinki utworzone za pomocą
Trace.{begin|end}AsyncSection
.
- Uwaga: poniższe zmiany
- Dane
- Zasilanie – dodano
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
iPowerMetric.deviceSupportsPowerEnergy()
- Zmieniono nazwę
Metric.getResult
nagetMeasurements
, aby była zgodna z typem zwracanej wartości - Dodano etykiety log.w / exception do wszystkich błędów wykrywania uruchamiania. Nie zmienia to obecnego zachowania (niektóre błędy są zgłaszane, a inne nie są wykrywane podczas uruchamiania), tylko sprawia, że jest ono bardziej zrozumiałe. Zwykle są to te, które
Log.w()
i nie zgłaszają danych o uruchomieniu. W takich przypadkach brakuje zdarzeń innych niż klatki, a po wykryciu uruchomienia zgłaszane są wyjątki, z wyjątkiem informacji o czasie klatki (z wycinków interfejsu/RT). (Id240f, b/329145809) - Dodaliśmy pomiar
frameCount
doFrameTimingMetric
, aby ułatwić wykrywanie sytuacji, w których pomiary zmieniają się z powodu zmiany liczby wygenerowanych klatek (dodano nowe animacje, naprawiono problemy z unieważnianiem). (I1e5aa) - Wyjaśniliś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 nieukończone ramki na początku i na końcu śladu mogły być ze sobą łączone, co powodowało nieprawidłowe raportowanie jako pojedynczej, bardzo długiej ramki. (I39353, b/322232828)
- Ulepszyliśmy błąd
FrameTimingMetric
, gdy nie są generowane klatki, i zawsze wyświetlamy link do śledzenia, gdy nie uda się przeanalizować danych, aby ułatwić diagnozowanie problemu. (I956b9) - Naprawiliśmy awarię w
FrameTimingMetric
, która powodowała nieprawidłową analizę identyfikatora ramki, zwłaszcza na niektórych urządzeniach OEM. (Ia24bc, b/303823815, b/306235276) - Zmniejszyliśmy rygorystyczność sprawdzania w
FrameMetrics
i dodaliśmy więcej szczegółów do komunikatów o błędach. (Iadede)
- Zasilanie – dodano
Zmiany w przechwytywaniu profilu podstawowego i wtyczce Gradle od wersji 1.2.0
- Zwiększono maksymalną zalecaną wersję AGP do 9.0.0-alpha01.
- Upewnij się, że zadania
mergeArtProfile
imergeStartupProfile
zawsze czekają na wygenerowanie profilu podstawowego. (I623d6, b/343086054) - Wygenerowanie profilu bazowego zakończy się sukcesem i wyświetli podsumowanie zmian (I824c8, b/269484510).
- Dodano DSL, aby wyłączyć ostrzeżenia (Ic4deb, b/331237001)
- Rozwiązanie problemu, aby zapewnić, że testy porównawcze będą korzystać z wygenerowanych profili bazowych, gdy opcja
automaticGenerationDuringBuild
jest wyłączona (Ic144f, b/333024280) - Naprawiono
BaselineProfile
zastępowanie właściwości wtyczki Gradle, aby umożliwić generowanie profilu podstawowego i testowanie porównawcze podczas dostosowywanianonMinified
lub typu kompilacji testu porównawczego. (Ib8f05, b/324837887) - Poprawka dotycząca uwzględniania profili bazowych biblioteki w pliku AAR przed AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- Stały adres URL danych bazowych i profilu uruchamiania na końcu zadania generowania. (I802e5, b/313976958)
Inne istotne zmiany od wersji 1.2.0
- Przechwytywanie śladu
- Zmniejszenie liczby błędów EXITCODE 2 podczas uruchamiania narzędzia perfetto z błędu do ostrzeżenia w dzienniku
- Domyślne włączanie śledzenia AIDL w testach porównawczych(wymaga interfejsu API w wersji 28) (Ia0af2, b/341852305)
- Domyślne włączanie śledzenia tagów porterów w testach porównawczych. Obejmuje to na przykład punkty śledzenia blokady wybudzania. (Icfe44, b/286551983)
- Zwiększono limit czasu rozpoczęcia rejestrowania śladów, aby uniknąć awarii podczas rozpoczynania śledzenia na wolniejszych urządzeniach (I98841, b/329145808).
- Dodano publiczny interfejs API
PerfettoTraceProcessor.Session.queryMetrics
API w wersjach JSON, textproto i proto binary (niezdekodowanej). Umożliwiają one wysyłanie zapytań dotyczących danych wbudowanych wTraceProcessor
(I54d7f, b/304038382). - Włącz blokowanie rozpoczęcia w rekordzie śladu Perfetto, aby zmniejszyć ryzyko utraty danych na początku śladu. Obsługiwane tylko w przypadku interfejsu API na poziomie 33 lub wyższym. (Ie6e41, b/310760059)
- Dane wyjściowe JSON
- Dodano dodatkowe informacje w kontekście wartości referencyjnych w danych wyjściowych JSON:
context.artMainlineVersion
– wersja modułu magistrali ART (jeśli jest obecny na urządzeniu, w przeciwnym razie-1
)context.build.id
- Equals android.os.Build.IDcontext.build.version.codename
– Równa się android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
– odpowiada pierwszej literze nazwy kodowej wersji przedpremierowej (w tym w wersjach produkcyjnych) (Ie5020).
- Dodano listę
profilerOutput
do danych wyjściowych JSON, aby ułatwić korzystanie z narzędzi do profilowania śladów (np. Perfetto, ślady metod) (I05ddd, b/332604449) - Dodaliśmy ostrzeżenie, gdy w modułach testów porównawczych używany jest Android Test Orchestrator, ponieważ powoduje to wielokrotne zastępowanie plików JSON z wynikami poszczególnych modułów. (Ia1af6, b/286899049)
- Wywołuje wyjątek, gdy nazwy plików są dłuższe niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab)
- Dodano dodatkowe informacje w kontekście wartości referencyjnych w danych wyjściowych JSON:
Wersja 1.3.0-rc01
7 sierpnia 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-rc01
Wersja 1.3.0-rc01 zawiera te commity.
Poprawki błędów
- Poprawka problemu z funkcją
androidx.benchmark.cpuEventCounter
, która generuje uszkodzone wartości w przypadku zdarzeń innych niż instrukcje (I7386a, b/286306579) - Poprawka
resumeTiming
/runWithTimingDisabled
, która uwzględnia kolejność priorytetów danych i znacznie zmniejsza wpływ wstrzymania lub wznowienia danych o niższym priorytecie na wyniki danych o wyższym priorytecie. Na przykład jeśli używasz liczników wydajności procesora za pomocą argumentu instrumentacjicpuEventCounter.enable
, czas w nanosekundach nie jest już znacznie skracany w przypadku wstrzymania lub wznowienia. (I39c2e, b/286306579, b/307445225) - Zmniejszono prawdopodobieństwo, że próbkowanie stosu spowoduje przekroczenie przez
measureRepeatedOnMainThread
limitu czasu głównego wątku, przenosząc konwersję próbkowania stosu poza główny wątek. (I487a8, b/342237318) - Usunęliśmy ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszym (np. R8 w wersji 3.3) oraz w przypadku wszystkich kompilacji podczas korzystania z AGP 8.1 lub nowszego (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z AGP, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (I9496c, b/345472586)
- Dodano sprawdzanie wersji AGP, aby wysyłać nazwę pakietu jako argument instrukcji. W wersjach AGP starszych niż 8.4.0 nie można wysyłać nazwy pakietu aplikacji docelowej do aplikacji do instrumentacji za pomocą argumentów instrumentacji. (0c72a3f)
Wersja 1.3.0-beta02
10 lipca 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-beta02
Wersja 1.3.0-beta02 zawiera te zmiany.
Poprawki błędów
- W przypadku kodu EXITCODE
2
podczas uruchamiania Perfetto należy zarejestrować ostrzeżenie, ale kontynuować działanie.
Wersja 1.3.0-beta01
12 czerwca 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-beta01
Wersja 1.3.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniono nazwę
MethodTracing.affectsMeasurementOnThisDevice
naAFFECTS_MEASUREMENT_ON_THIS_DEVICE
, aby zachować spójność. (I1bdfa) - Dodano eksperymentalny interfejs API
BlackHole.consume()
, który zapobiega usuwaniu martwego kodu w mikrotestach. (If6812, b/286091643) - Mikrotest będzie teraz prawidłowo zgłaszać wyjątki, aby śledzenie metod nie zakłócało pomiarów. Dzieje się tak na niektórych urządzeniach, gdy śledzenie metod jest wymuszane (za pomocą argumentów instrumentacji lub
MicrobenchmarkConfig
) i gdy po śledzeniu metod następuje próba pomiaru. Problem dotyczy urządzeń z interfejsem API w wersji 26–30 lub niektórych wersji głównego modułu ART, na które wpływa ta interferencja. Można go wykryć w czasie działania aplikacji za pomocąProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864)
Poprawki błędów
- Zwiększono zalecaną maksymalną wersję AGP do 9.0.0-alpha01. (I5bbb0)
- Dodano tryb kompilacji do kontekstu porównawczego (If5612, b/325512900)
- Domyślne włączanie śledzenia AIDL (wymaga interfejsu API w wersji 28) (Ia0af2, b/341852305)
- Dodano dodatkowe informacje w kontekście wartości referencyjnych w danych wyjściowych JSON:
context.artMainlineVersion
– wersja modułu głównego Art (liczba całkowita, jeśli jest na urządzeniu, w przeciwnym razie –1)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 nazwy kodowej wersji przedpremierowej (nawet w przypadku wersji produkcyjnych) (Ie5020).
- Poprawka
StackSampling
, aby uwzględniaćandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - Zmień zależność makra od wspólnej na
api()
, aby łatwiej było używać np.PerfettoTrace
iPerfettoConfig
. (Icdae3, b/341851833) - Upewnij się, że zadania
mergeArtProfile
imergeStartupProfile
zawsze czekają na wygenerowanie profilu podstawowego. (I623d6, b/343086054) - Przy podejmowaniu decyzji o włączeniu wariantu weź pod uwagę jego stan. (I5d19e, b/343249144)
- Zwiększono domyślny limit czasu rozpoczęcia procesora śladów Perfetto. (I87e8c, b/329145808)
Wersja 1.3.0-alpha05
14 maja 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-alpha05
Wersja 1.3.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Wyświetlanie bardziej przejrzystego wyjątku, gdy wskaźnik testu porównawczego makro zwraca wartości zerowe dla wszystkich iteracji (Iab58f, b/314931695)
- Dodano dodatkowe reguły obejścia do reguł ProGuard mikrobenczmarków, w tym obsługę reguł odbiornika i innych zaobserwowanych ostrzeżeń lub błędów. (I14d8f, b/329126308, b/339085669)
- Śledzenie metod jest uruchamiane jako osobna faza podczas testu porównawczego makro i nie ma już wpływu na pomiary. (If9a50, b/285912360, b/336588271)
- Dodaliśmy dodatkowe sugestie dotyczące debugowania do komunikatu o błędzie dotyczącym odrzucenia transmisji shadera. (I5efa6, b/325502725)
Wersja 1.3.0-alpha04
1 maja 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-alpha04
Wersja 1.3.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Dodano eksperymentalny wariant
MacrobenchmarkRule#measureRepeated
, który przyjmuje niestandardowy parametrPerfettoConfig
, aby w pełni dostosować nagrywanie śladu Perfetto. Pamiętaj, że nieprawidłowo skonfigurowane konfiguracje mogą powodować błędy wbudowanych klas wskaźników. (Idfd3d, b/309841164, b/304038384) - Zmieniono nazwę
PowerMetric.deviceSupportsPowerEnergy
naPowerMetric.deviceSupportsHighPrecisionTracking
, aby zwiększyć przejrzystość (I5b82f) - Dodano zasady
PowerMetric.deviceBatteryHasMinimumCharge()
iPowerMetric.deviceSupportsPowerEnergy()
, które umożliwiają zmianę lub pomijanie testów porównawczych na podstawie możliwości pomiaru mocy urządzenia. (I6a591, b/322121218)
Poprawki błędów
- Dodaliśmy porównanie z poprzednim profilem bazowym (I824c8, b/269484510)
- Dodano DSL, aby wyłączyć ostrzeżenia (Ic4deb, b/331237001)
- Zmiana wyjątku na log informacyjny, gdy warianty porównawcze są wyłączone (I8a517, b/332772491)
- Ułatwienie rejestrowania śladów metod w przypadku testu Macrobenchmark, który jest ograniczony do czasu trwania rzeczywistego
measureBlock()
. Wcześniej rozpoczynał się on w momencie uruchomienia procesu docelowego i obsługiwał tylko zimne starty (Iee85a, b/300651094). - Zapobieganie awariom, gdy procesor śledzenia Perfetto uruchamia się powoli (I98841, b/329145808)
Wersja 1.3.0-alpha03
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-alpha03
Wersja 1.3.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Dodaje publiczne interfejsy API
PerfettoTraceProcessor.Session.queryMetrics
w wersjach JSON, textproto i proto binary (niezdekodowanej). Umożliwiają one wysyłanie zapytań dotyczących wbudowanych w TraceProcessor wskaźników (I54d7f, b/304038382). - Dodano
profilerOutput
do danych wyjściowych JSON, aby ułatwić korzystanie z narzędzi do śledzenia profili (np. perfetto, śledzenie metod). (I05ddd, b/332604449) - Dodano tag zasilania do testu porównawczego konfiguracji Perfetto. Obejmuje to na przykład punkty śledzenia blokady wybudzania. (Icfe44, b/286551983)
- Dodano argument inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, który można ustawić na wartość false, aby uniknąć pomijania śladów metod, gdy oczekiwany czas trwania może spowodować błąd ANR. Zdecydowanie zalecamy, aby unikać tego w przypadku uruchamiania CI. - Dodano eksperymentalny argument inst
androidx.benchmark.profiling.perfCompare.enable
. Ustaw wartość „true”, aby uruchomić porównanie czasu między fazami pomiaru i profilowania. Przydatne np. do oceny narzutu związanego ze śledzeniem metod. (I61fb4, b/329146942)
Zmiany w interfejsie API
- Zmiana
TraceSectionMetric.Mode
na klasę zamkniętą, aby umożliwić przyszłe rozszerzenie bez przerywania wyczerpujących instrukcji when (I71f7b) - Dodano
TraceSectionMetric.Mode.Average
i.Count
oraz zmieniono kolejność argumentów, aby częściej używany argument (tryb) znajdował się wcześniej na liście argumentów, co zmniejsza potrzebę określania nazw parametrów. (Ibf0b0, b/315830077, b/322167531) - Zmieniono nazwę
Metric.getResult
nagetMeasurements
, aby dopasować ją do typu zwrotu (I42595)
Poprawki błędów
- Rozwiązanie problemu, aby zapewnić, że testy porównawcze będą korzystać z wygenerowanych profili bazowych, gdy opcja
automaticGenerationDuringBuild
jest wyłączona (Ic144f, b/333024280) - Naprawiono
BaselineProfile
zastępowanie właściwości wtyczki Gradle, aby umożliwić generowanie profilu podstawowego i testowanie porównawcze podczas dostosowywanianonMinified
lub typu kompilacji testu porównawczego. (Ib8f05, b/324837887) - Ślady stałej metody są opróżniane w makrobenchmarku, dzięki czemu powinny być w pełni rejestrowane i prawidłowe nawet na wolniejszych urządzeniach. (I6349a, b/329904950)
- Włącz blokowanie rozpoczęcia w rekordzie śladu Perfetto, aby zmniejszyć ryzyko utraty danych na początku śladu. Obsługiwane tylko w przypadku interfejsu API na poziomie 33 lub wyższym. (Ie6e41, b/310760059)
- Dodaliśmy ostrzeżenie, gdy w modułach testów porównawczych używany jest Android Test Orchestrator, ponieważ powoduje to wielokrotne zastępowanie plików JSON z wynikami poszczególnych modułów. (Ia1af6, b/286899049)
- Wymuszanie separatorów tysięcy w postaci przecinka w celu zapewnienia spójności danych wyjściowych w Studio, z pominięciem ustawień regionalnych urządzenia (I3e921, b/313496656)
TraceSectionMetric
obsługuje teraz wycinki utworzone za pomocąTrace.{begin|end}AsyncSection
. (I91b32, b/300434906)- Dodano etykiety log.w / exception do wszystkich błędów wykrywania uruchamiania. Nie zmienia to obecnego zachowania (niektóre błędy są zgłaszane, a inne nie są wykrywane podczas uruchamiania), tylko sprawia, że jest ono bardziej zrozumiałe. Zwykle są to te, które
Log.w()
i nie zgłaszają danych o uruchomieniu. W takich przypadkach brakuje zdarzeń innych niż klatki, a po wykryciu uruchomienia zgłaszane są wyjątki, z wyjątkiem informacji o czasie klatki (z wycinków interfejsu/RT). (Id240f, b/329145809) - Przed uruchomieniem testu Macrobenchmark anuluj zadania dexopt w tle, aby zmniejszyć zakłócenia. (I989ed)
- Dodaliśmy pomiar
frameCount
doFrameTimingMetric
, aby ułatwić wykrywanie sytuacji, w których pomiary zmieniają się z powodu zmiany liczby wygenerowanych klatek (dodano nowe animacje, naprawiono problemy z unieważnianiem). (I1e5aa) - Wyjaśniliśmy, że
frameOverrunMs
to preferowane dane do śledzenia, gdy są dostępne w dokumentach, i dlaczego. (I18749, b/329478323)
Wersja 1.3.0-alpha02
20 marca 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-alpha02
Wersja 1.3.0-alpha02 zawiera te zmiany.
Nowe funkcje
Eksperymentalna obsługa R8 w mikrotestach za pomocą wbudowanych reguł ProGuard. Pamiętaj, że ta funkcja jest eksperymentalna i wymaga AGP 8.3 do minimalizacji testów modułu biblioteki. Aby włączyć w module testu porównawczego
build.gradle
minimalizację/optymalizację R8, co powinno znacznie zwiększyć wydajność w zależności od obciążenia, użyj tych informacji. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Poprawki błędów
- Poprawiono ostrzeżenie dotyczące śledzenia metod, aby znajdowało się w osobnym wierszu od danych wyjściowych mikrobenczmarku. (I0455c, b/328308833)
Wersja 1.3.0-alpha01
21 lutego 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.3.0-alpha01
Wersja 1.3.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Zmiana nazw
MicrobenchmarkConfig
parametrów logicznych, aby uniknąć niepotrzebnego słowa „should” (Ia8f00, b/303387299) - Dodano
BenchmarkRule.measureRepeatedOnMainThread
, aby testy porównawcze wątku głównego (np. te, które dotyczą interfejsów View lub Compose) nie powodowały błędów ANR, zwłaszcza w przypadku dużych zestawów w CI. (I5c86d) - Dodano
FrameTimingGfxInfoMetric
, eksperymentalną alternatywną implementacjęFrameTimingMetric
, w której pomiary pochodzą bezpośrednio z platformy, a nie są wyodrębniane ze śladu Perfetto. (I457cb, b/322232828) - Dodanie możliwości zrzucania profilu ART podczas poszczególnych iteracji
warmUp
. (I17923) - Kilka zmian w interfejsie
TraceSectionMetric
API:- Dodaj
Mode.Min
,Mode.Max
- Dodawanie argumentu etykiety w celu zastąpienia nazwy sekcji etykietą wskaźnika
- Dodano nazwę trybu do danych wyjściowych, aby wyjaśnić znaczenie wskaźnika
- Zmieniliśmy domyślne ustawienie na sumę, ponieważ ten wskaźnik jest najczęściej używany w przypadku powtarzających się zdarzeń. Pamiętaj o tych zmianach w użyciu CI, ponieważ mogą one powodować nieciągłości lub przerwy w analizowaniu. (Ic1e82, b/301892382, b/301955938)
- Dodaj
Poprawki błędów
- Ulepszony komunikat o błędzie w podstawowym profilu wtyczki Gradle, gdy określone zarządzane urządzenie nie istnieje (Idea2b, b/313803289)
- Poprawka dotycząca uwzględniania profili bazowych biblioteki w pliku AAR przed AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- Stały adres URL danych wyjściowych profilu podstawowego i profilu uruchamiania na końcu zadania generowania (I802e5, b/313976958)
- Dostosowaliśmy limity czasu źródła danych, aby spróbować rozwiązać problem
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) - Dodaj 2 argumenty instrumentacji, aby zastąpić zachowanie związane z usuwaniem cieniowania i obejść awarie podczas testowania aplikacji bez
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: można go używać do pomijania wszystkich operacji usuwania shaderów (w tym tych wykonywanych podczas uruchamianiaStartupMode.Cold
), zwłaszcza podczas testowania aplikacji, które nie korzystają jeszcze z profileinstaller w wersji 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: może być używana do tolerowania błędów podczas próby usunięcia shaderów, na przykład podczas testowania porównawczego aplikacji bez profileinstaller w wersji 1.3 (I4f573).
- Pomiń śledzenie metod w wątku interfejsu, gdy ma ono trwać dłużej niż kilka sekund, i wyczyść ślady metod podczas zgłaszania wyjątku. (I6e768)
- Wywołuje wyjątek, gdy nazwy plików są dłuższe niż 200 znaków, aby uniknąć niejasnych awarii podczas zapisywania lub przetwarzania plików. (I4a5ab)
- Rozwiązaliśmy problem polegający na tym, że nieukończone ramki na początku i na końcu śladu mogły być ze sobą łączone, co powodowało nieprawidłowe raportowanie jako pojedynczej, bardzo długiej ramki. (I39353, b/322232828)
- Używaj
--skip verification
w przypadku interfejsu API na poziomie 30 lub wyższym podczas ponownej instalacji pakietu na interfejsie API na poziomie 30–33, aby wyczyścić profile ART w kompilacjach użytkownika. Pomaga to ominąć ostrzeżenia Play Protect, które powodują błędy na niektórych urządzeniach. (Ic9e36) - Używaj
am force-stop
, aby zamykać aplikacje, które nie są aplikacjami systemowymi, takimi jak interfejs systemu czy program uruchamiający. (I5e028) - Test porównawczy Macrobenchmark czeka teraz na
1 second
, aż aplikacja docelowa wyczyści profil ART (wcześniej czekał na500 ms
). (I85a50, b/316082056) - Ulepszyliśmy błąd
FrameTimingMetric
, gdy nie są generowane klatki, i zawsze wyświetlamy link do śledzenia, gdy nie uda się przeanalizować danych, aby ułatwić diagnozowanie problemu. (I956b9) - Naprawiliśmy awarię w
FrameTimingMetric
, która powodowała nieprawidłową analizę identyfikatora ramki, zwłaszcza na niektórych urządzeniach OEM. (Ia24bc, b/303823815, b/306235276) - Zmniejszyliśmy rygorystyczność sprawdzania w
FrameMetrics
i dodaliśmy więcej szczegółów do komunikatów o błędach. (Iadede)
Wersja 1.2
Wersja 1.2.4
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.4
Wersja 1.2.4 zawiera te zmiany.
Poprawki błędów
- Rozwiązuje problem z brakiem konfiguracji profilu podstawowego srcset w wariantach testu porównawczego. Rozwiązuje też problem z
automaticGenerationDuringBuild
w bibliotekach, który powodował zależność zapętloną. (I28ab7, b/333024280) - Używaj
am force-stop
, aby zamykać aplikacje, które nie są aplikacjami systemowymi, takimi jak interfejs systemu czy program uruchamiający. Rozwiązuje to problem z awariąStartupMode.COLD
benchmarków z powodu komunikatu „Package $package must not be running prior to cold start!” (Pakiet $package nie może być uruchomiony przed uruchomieniem „na zimno”), ponieważ zabijanie procesu nie powiodło się w pełni. (I5e028)
Wersja 1.2.3
24 stycznia 2024 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.3
Wersja 1.2.3 zawiera te zmiany.
Poprawki błędów
- Usunięto wyjątek z wtyczki Gradle Baseline Profile, gdy wersja AGP to 8.3.0 lub nowsza.
- Poprawka dotycząca uwzględniania profili bazowych biblioteki w pliku AAR przed AGP 8.3.0-alpha15.
Wersja 1.2.2
1 grudnia 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.2
Wersja 1.2.2 zawiera te zmiany.
Profile podstawowe
- W logach wykonania ścieżka pliku wyjściowego profilu podstawowego będzie widoczna jako lokalny identyfikator URI pliku (aosp/2843918, aosp/2853665, b/313976958).
Wersja 1.2.1
15 listopada 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.1
Wersja 1.2.1 zawiera te zmiany.
Nowe funkcje
- Ulepszony komunikat o błędzie, gdy użytkownik wyłączy warianty testowe (b/307478189)
- Dodano właściwości obsługujące integrację przebiegu testu AS (b/309805233), (b/309116324)
Wersja 1.2.0
18 października 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0
Wersja 1.2.0 zawiera te zmiany.
Ważne zmiany od wersji 1.1.0
Profile podstawowe
- Nowa wtyczka Gradle Baseline Profile automatyzuje przechwytywanie i uwzględnianie profili bazowych w procesie testowania i kompilacji.
BaselineProfileRule.collect
jest już stabilny i stanowi uproszczoną wersję poprzedniego eksperymentalnego interfejsu APIBaselineProfileRule.collectBaselineProfile
.- Wystarczy, że określisz
packageName
i zaczniesz korzystać z aplikacji.
- Wystarczy, że określisz
- W przypadku bibliotek generujących profile podstawowe możesz teraz filtrować wygenerowane reguły w kodzie (argument
BaselineProfileRule.collect
) lub jeszcze prościej – w pluginie Gradle. - Poprawki
- Poprawiono zbieranie profili podstawowych na Androidzie U+ (Id1392, b/277645214)
Macrobenchmark
- Kompilacja
- Makrobenchmark prawidłowo resetuje teraz stan kompilacji dla każdej kompilacji. Wymaga to ponownej instalacji pliku APK przed Androidem 14, więc jeśli chcesz zachować stan (np. logowanie użytkownika) w mierzonych danych, zdecydowanie zalecamy przeprowadzanie testów porównawczych na Androidzie 14 lub nowszym.
- Możesz też obejść to ograniczenie, kontrolując kompilację aplikacji oddzielnie i pomijając kompilację za pomocą argumentu
CompilationMode.Ignore()
lub instrumentation argument.
Argumenty narzędzi
- Obsługa argumentu instrumentacji
androidx.benchmark.dryRunMode.enable
(dostępnego już w mikrobenchmarku) umożliwiającego szybsze uruchamianie weryfikacji (np.podczas tworzenia benchmarku lub przed przesłaniem). - Obsługa
androidx.benchmark.profiling.mode=StackSampling
iMethodTracing
. - Dodano
androidx.benchmark.enabledRules
, aby umożliwić filtrowanie w czasie działania testów profilu podstawowego i reguł makrobenchmarku. - Dodano argument
androidx.benchmark.perfettoSdkTracing.enable
, aby włączyć śledzenie za pomocą narzędzia tracing-perfetto, np. śledzenie ponownego komponowania. Pamiętaj, że w przypadku użycia zStartupMode.COLD
czas będzie znacznie dłuższy, ponieważ biblioteka śledzenia jest wczytywana i włączana podczas uruchamiania aplikacji.
- Obsługa argumentu instrumentacji
Wymagania
- Biblioteka Macrobenchmark wymaga teraz w aplikacji docelowej wersji
ProfileInstaller
1.3.0 lub nowszej, aby włączyć przechwytywanie i resetowanie profilu oraz czyszczenie pamięci podręcznej shaderów.
- Biblioteka Macrobenchmark wymaga teraz w aplikacji docelowej wersji
Nowe eksperymentalne interfejsy API wskaźników
- Dodano eksperymentalną funkcję
TraceSectionMetric
, która umożliwia wyodrębnianie prostych danych o czasie z blokówtrace("") {}
w aplikacji lub TraceMetric, aby w pełni wykorzystać możliwości zapytań PerfettoTraceProcessor
. - Dodano eksperymentalną funkcję
PowerMetric
do rejestrowania informacji o zużyciu energii - Dodano eksperymentalną funkcję
MemoryCountersMetric
do zliczania błędów strony. - Dodano eksperymentalny interfejs
PerfettoTraceProcessor
API, który jest używany wewnętrznie do wyodrębniania danych z logów systemowych (czyli logów Perfetto).
- Dodano eksperymentalną funkcję
Poprawki
- Naprawiono awarie 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 klatek podczas falowania na API 31+) (I747d2, b/279088460) - Naprawiono błędy analizowania śladów o rozmiarze powyżej 64 MB (Ief831, b/269949822).
- Wyjaśnienie błędów, które występują, gdy obraz systemu operacyjnego urządzenia (zwłaszcza emulatora) nie jest prawidłowo skonfigurowany do śledzenia lub kompilacji.
- Pomijanie sprawdzania poziomu baterii w przypadku urządzeń bez baterii (mikro i makro)
- Ulepszone dane wyjściowe plików, z bardziej przejrzystymi błędami dotyczącymi nieprawidłowych katalogów wyjściowych i bezpieczniejszymi ustawieniami domyślnymi.
- Zwiększona stabilność
StartupMode.COLD
dzięki konsekwentnemu usuwaniu pamięci podręcznej shaderów (dostępna też wMacrobenchmarkScope.dropShaderCache
). - Naprawiono zastępczy tryb leanback dla
startActivityAndWait
.
Mikrotest
- Funkcje
- Profilowanie zostało przeniesione do osobnej fazy, po innych danych, dzięki czemu jedno uruchomienie testu może wyświetlać zarówno dokładne wyniki pomiaru czasu, jak i profilowania.
- Eksperymentalne interfejsy API
- Dodano eksperymentalny interfejs API
MicrobenchmarkConfig
do definiowania niestandardowych danych i konfigurowania śledzenia oraz profilowania. Może służyć do rejestrowania śladów metod lub punktów śledzenia (pamiętaj jednak o obciążeniu związanym ze śledzeniem). - Dodano eksperymentalne interfejsy API do sterowania
BenchmarkState
oddzielnie odBenchmarkRule
bez JUnit. - Dodano eksperymentalny rekord
PerfettoTrace
, który umożliwia rejestrowanie śladów Perfetto z niestandardową konfiguracją, niezależnie od interfejsów API testów porównawczych.
- Dodano eksperymentalny interfejs API
- Poprawki
- Obejście problemu z brakiem początkowych białych znaków w danych wyjściowych testu porównawczego Androida Studio.
- Rozwiązaliśmy problem polegający na tym, że ostrzeżenia mogły nie być drukowane w wynikach testu porównawczego Android Studio.
- Naprawiono
SampledProfiling
awarię na Androidzie 13 (API 33) i nowszych wersjach. - Znacznie zwiększona wydajność
dryRunMode
dzięki pomijaniuIsolationActivity
i śledzenia Perfetto (nawet 10-krotnie szybszy tryb testowy w starszych wersjach systemu operacyjnego).
Wersja 1.2.0-rc02
6 października 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-rc02
Wersja 1.2.0-rc02 zawiera te zmiany.
Poprawki błędów
- Poprawiono dane wyjściowe pliku Benchmark, aby nie przerywać już
BaselineProfile
kopiowania pliku wtyczki. Pliki zostały wygenerowane i skopiowane z urządzenia, ale zmieniono ich nazwy, przez co wtyczka Gradle ich nie widziała. (I8dbcc, b/303034735, b/296453339) - Wyjaśniono komunikaty o błędach wczytywania
tracing-perfetto
podczas wstrzykiwania z modułu testu porównawczego do aplikacji docelowej.
Wersja 1.2.0-rc01
20 września 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-rc01
Wersja 1.2.0-rc01 zawiera te zmiany.
Poprawki błędów
- Gdy w teście porównawczym nie uda się zainicjować śledzenia za pomocą pakietu SDK Perfetto, zgłaszany jest wyjątek (z instrukcjami dotyczącymi rozwiązania problemu). (I6c878, b/286228781)
- Naprawiono błąd OOM podczas konwertowania śladu metody ART na format perfetto. (I106bd, b/296905344)
- (Macrobenchmark) Uściśliliśmy etykietę śledzenia metody, gdy jest ona połączona w wyniku testu w Studio, i poprawiliśmy nazwy plików śledzenia metody, aby były unikalne na urządzeniu lub hoście, dzięki czemu nie będą zastępowane, gdy uruchomionych jest więcej niż 1 test porównawczy. (I08e65, b/285912360)
- Zapewnia, że urządzenie jest aktywne podczas rejestrowania profilu bazowego. (I503fc)
Wersja 1.2.0-beta05
30 sierpnia 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-beta05
Wersja 1.2.0-beta05 zawiera te zmiany.
Nowe funkcje
- Wtyczka Gradle profilu podstawowego obsługuje teraz wtyczkę Androida do obsługi Gradle w wersji 8.3. (aosp/2715214)
Wersja 1.2.0-beta04
23 sierpnia 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-beta04
Wersja 1.2.0-beta04 zawiera te zmiany.
Nowe funkcje
- Wtyczka Gradle profili podstawowych obsługuje teraz wtyczkę Androida do obsługi Gradle w wersji 8.3. (aosp/2715214)
Poprawki błędów
- Naprawianie błędów zapisu, przenoszenia i pobierania plików (zwłaszcza z testów parametryzowanych) przez dalsze oczyszczanie nazw plików wyjściowych i unikanie znaków „=” i „:” w nazwach plików wyjściowych. (I759d8)
Wersja 1.2.0-beta03
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-beta03
Wersja 1.2.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano argument do filtrowania
TraceSectionMetric
tylko do pakietu docelowego, domyślnie włączony (Ia219b, b/292208786)
Poprawki błędów
- Zmieniliśmy nazwę argumentu instrumentacji
fullTracing.enable
naperfettoSdkTracing.enable
, aby zachować spójność z nazwą artefaktu i innymi odniesieniami.fullTracing.enable
będzie nadal działać jako opcja rezerwowa. (I7cc00) - Wewnętrzne punkty śledzenia biblioteki testów porównawczych (w tym śledzenie pętli i faz mikropomiarów) będą teraz widoczne w przeglądarce śladów systemowych w Studio i będą zagnieżdżone w odpowiednim procesie w Perfetto. (I6b2e7, b/293510459)
- Usunięto błąd makrobenchmarku NOT-PROFILEABLE na API w wersji 31 lub nowszej i pomijano sprawdzanie możliwości profilowania na urządzeniach z dostępem do roota w wersjach eng/userdebug. (I2abac, b/291722507)
- W przypadku optymalizacji układu Dex reguły profilu uruchamiania są teraz traktowane jako reguły profilu podstawowego. (aosp/2684246, b/293889189)
Wersja 1.2.0-beta02
26 lipca 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-beta02
Wersja 1.2.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano eksperymentalne interfejsy API do obsługi niestandardowych danych i konfiguracji mikropomiarów (np. profilera i śledzenia). (I86101, b/291820856)
Poprawki błędów
- Zgłaszanie błędu w makrotestach, gdy system operacyjny jest nieprawidłowo skonfigurowany do śledzenia, co zostało niedawno naprawione w emulatorach API 26/28 ARM64. (I0a328, b/282191686)
- Dodano szczegóły dotyczące błędu resetowania kompilacji, aby zasugerować aktualizację emulatora, ponieważ w niektórych emulatorach ten problem został niedawno rozwiązany. (I8c815, b/282191686)
- Ustaw
androidx.test.uiautomator:uiautomator:2.2.0
jako zależnośćapi
zamiastimplementation
. (I1981e)
Wersja 1.2.0-beta01
18 lipca 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-beta01
Wersja 1.2.0-beta01 zawiera te zmiany.
Poprawki błędów
- Naprawiono problem z czasowym pomijaniem ostrzeżeń w danych wyjściowych testu porównawczego w Studio oraz problem z niewyświetlaniem w Studio początkowych białych znaków w danych wyjściowych testu porównawczego (Ia61d0, b/227205461, b/286306579, b/285912360).
- Naprawiono komentarz do
FrameTimingMetric
. Rodzaj danych ma nazwęframeDurationCpuMs
. (Ib097f, b/288830934).
Wersja 1.2.0-alpha16
21 czerwca 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha16
Wersja 1.2.0-alpha16 zawiera te zmiany.
Zmiany w interfejsie API
- Interfejs API
BaselineProfileRule.collectBaselineProfile()
został zmieniony naBaselineProfileRule.collect()
. (I4b665)
Poprawki błędów
- Obsługa testów porównawczych makro dla
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360) - Profilowanie mikrobenczmarków zostało przeniesione do osobnej fazy, więc odbywa się sekwencyjnie po pomiarze, a nie zamiast niego. Jeśli są dostępne, w zarejestrowanym logu czasu Perfetto są teraz uwzględniane też sekcje
MethodTracing
. (I9f657, b/285014599) - Dodaj pomiar liczby do
TraceSectionMetric
za pomocąMode.Sum
. (Ic121a, b/264398606)
Wersja 1.2.0-alpha15
7 czerwca 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha15
Wersja 1.2.0-alpha15 zawiera te zmiany.
Nowe funkcje
- Dodano eksperymentalny element
MemoryUsageMetric
do śledzenia wykorzystania pamięci przez aplikację docelową. (I56453, b/133147125, b/281749311) - Dodanie obsługi w pełni niestandardowych konfiguracji Perfetto za pomocą
PerfettoTrace.record
(If9d75, b/280460183) - Dodano właściwość umożliwiającą pominięcie generowania profilu podstawowego. Użycie:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
Zmiany w interfejsie API
- Interfejs
collectBaselineProfile
API zawsze generuje stabilne profile podstawowe. Interfejs APIcollectStableBaselineProfile
został usunięty. Zamiast niego należy używać interfejsucollectBaselineProfile
. (I17262, b/281078707) - Zmieniliśmy argument
BaselineProfileRule
funkcjifilterPredicate
na wartość niezerową, z odpowiednią wartością domyślną, aby domyślne działanie filtra było lepiej widoczne w dokumentach. (I3816e)
Poprawki błędów
- Wyłącz śledzenie
IsolationActivity
i Perfetto wdryRunMode
, aby znacznie zwiększyć wydajność, ponieważ te funkcje zajmowały większość czasu działania. (Ie4f7d) - Obsługa próbkowania stosu wywołań w testach Macrobenchmark przy użyciu argumentów testu instrumentacji
androidx.benchmark.profiling.mode=StackSampling
iandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Naprawiono błąd powodujący awarię podczas upuszczania shaderów w Androidzie U (API 34) oraz w emulatorach. (I031ca, b/274314544)
Wersja 1.2.0-alpha14
3 maja 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha14
Wersja 1.2.0-alpha14 zawiera te zmiany.
Poprawki błędów
- Naprawiono
FrameTimingMetric
ignorowanie ramek z niespójnymi identyfikatorami ramek. Powodowało to, że niektóre animacje w najnowszych wersjach platformy (API 31+) ignorowały wiele klatek podczas animacjiRenderThread
(np. podczas efektu fali). (I747d2, b/279088460) - Poprawiliśmy analizowanie logów czasu większych niż 64 MB. (Ief831, b/269949822)
- Naprawiliśmy błąd generowania profilu podstawowego na Androidzie U, który występował z powodu innego wyniku polecenia
pm dump-profiles
. (Id1392, b/277645214) - Poprawiono skrypt blokowania zegara GPU, aby prawidłowo porównywał ciągi znaków (I53e54, b/213935715)
Wersja 1.2.0-alpha13
5 kwietnia 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha13
Wersja 1.2.0-alpha13 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano parametr typu profilu podczas generowania profili podstawowych, aby obsługiwać nadchodzącą funkcję profilu uruchamiania (Ie20d7, b/275093123)
- Dodano nowy eksperymentalny interfejs
TraceMetric
API do definiowania w pełni niestandardowych wskaźników na podstawie zawartości śladu Perfetto. (I4ce31, b/219851406) - Dodaj eksperymentalny rodzaj danych, aby określić liczbę błędów strony podczas testu porównawczego. (I48db0)
Wersja 1.2.0-alpha12
22 marca 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha12
Wersja 1.2.0-alpha12 zawiera te zmiany.
Nowe funkcje
- Nowa wtyczka Gradle profilu podstawowego została udostępniona w wersji alfa, co ułatwia generowanie profilu podstawowego i upraszcza przepływ pracy dewelopera.
Zmiany w interfejsie API
- Usunęliśmy obsługę śledzenia Perfetto w przypadku interfejsów API 21 i 22, co obejmuje zarówno mikrobenczmarki, jak i eksperymentalne interfejsy API
PerfettoTrace
. W poprzedniej wersji połączeniaUiAutomation
były na niektórych urządzeniach niestabilne. (I78e8c) - Dodaliśmy publiczny eksperymentalny interfejs API dla
PerfettoTraceProcessor
, który umożliwia analizowanie treści śladu. To krok w kierunku w pełni niestandardowych danych opartych na danych śledzenia Perfetto. (I2659e, b/219851406)
Wersja 1.2.0-alpha11
8 marca 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha11
Wersja 1.2.0-alpha11 zawiera te zmiany.
Poprawki błędów
- Naprawiono awarie w
MacrobenchmarkRule
iBaselineProfileRule
podczas ponownej instalacji lub wyodrębniania profili z pakietu aplikacji zawierającego wiele plików APK. (I0d8c8, b/270587281)
Wersja 1.2.0-alpha10
22 lutego 2023 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha10
Wersja 1.2.0-alpha10 zawiera te zmiany.
Nowe funkcje
- W przypadku Androida 14 i nowszych wersji Macrobenchmark nie instaluje już ponownie aplikacji docelowych, aby zresetować stan kompilacji, dzięki nowej funkcji platformy. Wcześniej konieczne było zrootowanie urządzenia lub usunięcie całego stanu aplikacji (np. loginu użytkownika) przed każdym uruchomieniem testu porównawczego. (I9b08c, b/249143766)
Poprawki błędów
- Naprawiono błąd
DryRunMode
, który powodował awarię przy pustym profilu z powodu pominięcia kompilacji. Zamiast tego wykonuje jedną iterację i wyodrębnia profil, aby mieć pewność, że coś zostało zarejestrowane. (I2f05d, b/266403227) - Naprawiono błąd
PowerMetric
występujący podczas sprawdzania obecności powerstats na starszych poziomach interfejsu API. (5faaf9, b/268253898)
Wersja 1.2.0-alpha09
11 stycznia 2023 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha09
Wersja 1.2.0-alpha09 zawiera te zmiany.
Poprawki błędów
- Włączono przekazywanie argumentu instrumentacji
None
doandroidx.benchmark.enabledRules
, aby wyłączyć wszystkie testy porównawcze i generowanie profilu podstawowego. (I3d7fd, b/258671856) - Poprawka przechwytywania
PerfettoTrace
w modułach aplikacji (np. w plikach APK testów, które nie instrumentują się samodzielnie) (I12cfc) - Poprawiono kolejność argumentów polecenia adb pull w przypadku stałego profilu podstawowego w danych wyjściowych Studio (I958d1, b/261781624)
- Emulator ARM API 33 jest teraz prawidłowo rozpoznawany podczas próby uruchomienia testu porównawczego makro i prawidłowo wyświetla ostrzeżenie. (69133b,b/262209591)
- Pomijanie sprawdzania poziomu baterii na urządzeniach bez baterii w teście Macrobenchmark (fe4114, b/232448937)
Wersja 1.2.0-alpha08
7 grudnia 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha08
Wersja 1.2.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy eksperymentalne nowe interfejsy API
PerfettoTrace.record {}
iPerfettoTraceRule
, które umożliwiają rejestrowanie śladów Perfetto (znanych też jako ślady systemowe) w ramach testu, aby sprawdzać zachowanie i wydajność testu. (I3ba16) BaselineProfileRule
akceptuje teraz predykat filtra zamiast listy prefiksów pakietów. Dzięki temu test ma pełną kontrolę nad filtrowaniem. (I93240)- Dodaj eksperymentalny interfejs API
BaselineProfileRule.collectStableBaselineProfile
, który czeka, aż profil podstawowy będzie stabilny przez N iteracji. (I923f3) - Dodano możliwość określania prefiksu nazwy pliku wyjściowego podczas generowania profili podstawowych za pomocą
BaselineProfileRule
. (I7b59f, b/260318655)
Poprawki błędów
- Poprawiono bezpieczeństwo zapisu plików wyjściowych, co powinno zapobiegać cichemu niezapisywaniu lub niedopisywaniu plików wyjściowych, zwłaszcza w przypadku interfejsów API w wersji 21 i 22. (If8c44, b/227510293)
- Popraw dane wyjściowe śledzenia
simpleperf
, aby utworzyć i prawidłowo umieścić plik. Powinno to również rozwiązać problemy, w których gradle nie może pobrać pliku. (I12a1c, b/259424099) - Ulepszanie komunikatu o błędzie narzędzia profileinstaller wyświetlanego, gdy jest ono zbyt stare. Teraz zamiast informacji o braku obsługi wyświetla się komunikat o konieczności zaktualizowania wersji instalatora profili (1.2.1) w celu pomiaru profili podstawowych na interfejsach API 31–33. (Ia517f, b/253519888)
- Naprawiono kilka błędów poleceń powłoki w komunikacie o błędzie Print needed API <=23, w tym nieudaną konfigurację pliku binarnego przechwytywania perfetto i błędy przechwytywania śladu (Ib6b87, b/258863685).
- Automatyczne sortowanie wygenerowanych reguł profilu w celu zminimalizowania liczby zmian w miarę upływu czasu (podczas sprawdzania reguł profilu w systemie kontroli wersji). (Ie2509)
- Naprawiono awarię na urządzeniach bez roota z Androidem w wersji starszej niż 13 (API 33) z komunikatem
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183)
Znane problemy
- MacrobenchmarkScope.dropShaderCache()
może ulec awarii z powodu braku rejestru transmisji w manifestie instalatora profilu, który nie został jeszcze opublikowany. (I5c728, b/258619948) Aby obejść ten problem w profileinstaller:1.3.0-alpha02
, dodaj do pliku AndroidManifest.xml aplikacji (nie 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.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha07
Wersja 1.2.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejs
PowerMetric
API do pomiaru energii i mocy w testach porównawczych. (Ife601, b/220183779) - Poprawiono
MacrobenchmarkScope.dropShaderCache()
, aby faktycznie usuwać pamięć podręczną shadera. Spowoduje to usunięcie z benchmarkówStartupMode.COLD
szumu o długości około 20 ms, ponieważ shadery są teraz konsekwentnie czyszczone w każdej iteracji. WcześniejPartial
kompilacja z użyciem iteracji rozgrzewających podawała nieprawidłowo szybkie wyniki, ponieważ podczas rozgrzewki częściej dochodziło do buforowania cieniowania. Ta poprawka wymaga urządzenia z dostępem do roota lub używaniaprofileinstaller:1.3.0-alpha02
w aplikacji docelowej. Informacje o zmianach w interfejsie API bibliotekiProfileInstaller
znajdziesz na stronie ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - Dodano
TraceSectionMode("label", Mode.Sum)
, co umożliwia pomiar łącznego czasu spędzonego w wielu sekcjach śledzenia z tą samą etykietą. Na przykładTraceSectionMetric("inflate", Mode.Sum)
zgłosi daneinflateMs
dotyczące łącznego czasu spędzonego na inflacji w ramach testu porównawczego. Usunęliśmy też wymaganie dotyczące interfejsu API w wersji 29, ponieważTraceSectionMetric
współpracuje zandroidx.tracing.Trace
na niższych poziomach interfejsu API, korzystając zforceEnableAppTracing
w aplikacji docelowej. (Id7b68, b/231455742)
Poprawki błędów
- Zwiększono bezpieczeństwo wszystkich wewnętrznych poleceń powłoki przez weryfikację wszystkich danych wyjściowych i błędów. (I5984d, b/255402908, b/253094958)
- Określ urządzenie w poleceniu
adb pull
profilu podstawowego, aby w przypadku połączenia z kilkoma urządzeniami (maksymalnie 1 emulatorem) można było po prostu skopiować polecenie pobierania (I6ac6c, b/223359380). - Dodaj błąd, jeśli testowy plik APK makrobenchmarku nie jest skonfigurowany jako samodzielnie instrumentujący. Ten błąd uniemożliwia przeprowadzanie testów porównawczych w procesie aplikacji docelowej. W tym przypadku makrobenchmark nie będzie mógł skompilować, zamknąć ani uruchomić aplikacji na zimno ani kontrolować własnych uprawnień (I4279b).
- Rozwiązaliśmy problem w
measureRepeated()
, który powodował, żeStartupMode.COLD
nie kończył procesu docelowego posetupBlock
. TerazsetupBlock
interakcja z aplikacją nie spowoduje uruchomienia procesu aplikacji ani nieprawidłowego pomiaru uruchomienia „na zimno”. (I8ebb7)
Wersja 1.2.0-alpha06
24 października 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha06
Wersja 1.2.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
BaselineProfileRule
nie wymaga już uprawnień roota na Androidzie 13 (API 33) i nie ma już charakteru eksperymentalnego. (Ie0a7d, b/250083467, b/253094958)- Ta zmiana poprawia też sposób zapisywania profili z aplikacji na dysku na urządzeniach bez roota, ale wymaga zaktualizowania zależności profileinstaller aplikacji docelowej.
- Aby korzystać z
BaselineProfileRule
lubCompilationMode.Partial(warmupIterations)
na urządzeniu bez roota, musisz też zaktualizować aplikację docelową, aby używałaandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Umożliwia to prawidłowe zapisanie profilu na dysku, aby można go było skompilować lub wyodrębnić.
Poprawki błędów
- Naprawiono
SampledProfiling
awarię na API w wersji 33 lub nowszej. (I40743, b/236109374)
Wersja 1.2.0-alpha05
5 października 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha05
Wersja 1.2.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Poprawka podziału klatek w przeglądarce śladów systemowych Studio w przypadku śladów przechwyconych w ramach testu porównawczego (I3f3ae, b/239677443)
- Poprawka
FrameTimingMetric
, aby na liścieFrameOverrun
wymagany był interfejs API 31 zamiast 29 (I716dd, b/220702554) - Ustaw iterację w
BaselineProfileRule
i wyraźnie zgłoś błąd, jeśli pakiet docelowy nie jest zainstalowany (zostało to już zrobione w przypadku MacrobenchmarkRule). (Ic09a3, b/227991471)
Wersja 1.2.0-alpha04
21 września 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha04
Wersja 1.2.0-alpha04 zawiera te zmiany.
Nowe funkcje
Dodanie do makrobenchmarku obsługi argumentu
dryRunMode.enable
instrumentation (dostępnego już w mikrobenchmarku) w celu przyspieszenia lokalnego procesu programowania i weryfikacji automatyzacji aplikacji (np. przed przesłaniem). Spowoduje to zastąpienie iteracji wartością 1, pominięcie kompilacji, pominięcie wszystkich błędów konfiguracji i wyłączenie danych wyjściowych pliku JSON 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
- Naprawiono
StartupTimingMetric
, aby nie wymagać już uruchamiania mierzonych aktywności za pomocąMacrobenchmarkScope.startActivityAndWait()
. Oznacza to, że wskaźnik może rejestrować uruchomienia np. z poziomu powiadomień,Context.startActivity()
, nawigacji opartej na aktywności w aplikacji lub poleceń powłoki. (Ia2de6, b/245414235) - Naprawiono błąd, w wyniku którego
startActivityAndWait
przekraczał limit czasu podczas oczekiwania na zakończenie uruchamiania na emulatorach. Zmniejszono rygorystyczność wykrywania klatek. (Ibe2c6, b/244594339, b/228946895)
Wersja 1.2.0-alpha03
7 września 2022 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha03
Wersja 1.2.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy eksperymentalne interfejsy API do niezależnego używania
BenchmarkState
, oddzielnie odBenchmarkRule
/JUnit4
. (Id478f, b/228489614)
Poprawki błędów
- Dodano wartość zastępczą Leanback dla
startActivityAndWait
. (01ed77, b/242899915)
Wersja 1.2.0-alpha02
24 sierpnia 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha02
Wersja 1.2.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Domyślnie
am force stop
w przypadkuMacrobenchmarkScope.killProcess()
, nawet w przypadku zrootowanych urządzeń, z wyjątkiem generowania profilu podstawowego. Można to zastąpić opcjonalnym argumentem logicznym. (02cce9, b/241214097)
Poprawki błędów
- Obsługa generowania profilu podstawowego dla aplikacji systemowych. (I900b8, b/241214097)
- Obsługa sprawdzania danych o mocy ODPM na urządzeniach bez roota. (a38c78, b/229623230)
Wersja 1.2.0-alpha01
27 lipca 2022 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.2.0-alpha01
Wersja 1.2.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Nowy komponent tracing-perfetto-common, który umożliwia narzędziom włączanie śledzenia za pomocą pakietu Perfetto SDK w aplikacji, która go udostępnia (I2cc7f).
Dodano argument
androidx.benchmark.enabledRules
instrumentation, aby umożliwić filtrowanie uruchomień makrobenchmarków tylko pod kątem benchmarków lub tylko pod kątem generowania profilu podstawowego. Przekaż „Macrobenchmark” lub „BaselineProfile”, aby uruchomić tylko jeden typ testu, np. podczas generowaniaBaselineProfiles
na emulatorze. Obsługiwana jest też lista rozdzielona przecinkami. (I756b7, b/230371561)Np. w pliku build.gradle makrobenchmarku:
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 w interfejsie API
- Dodaliśmy nowe
PowerMetric
do pomiaru zadań związanych z energią i mocą w testach porównawczych. (I9f39b, b/220183779) - Dodano nowy tryb kompilacji
CompilationMode.Ignore
, który umożliwia pominięcie resetowania profilu i kompilacji. (Ibbcf8, b/230453509) - Dodano nowy parametr do
BaselineProfileRule#collectBaselineProfile
, aby filtrować plik wyjściowy według nazw pakietów (If7338, b/220146561) - Umożliwia programiście rozładowanie urządzenia w celu pomiaru zużycia energii. (I6a6cb)
- Dodaliśmy możliwość wyczyszczenia pamięci podręcznej shaderów w
MacrobenchmarkScope
. (I32122) - Umożliwia deweloperowi skonfigurowanie wyświetlania typu danych i szczegółów wybranych kategorii podsystemów. (I810c9)
- Wcześniej w przypadku uruchomienia testu porównawczego na nieobsługiwanym urządzeniu zgłaszany był błąd
UnsupportedOperationException
. Teraz błąd UOE występuje tylko wtedy, gdy dane są używane na nieobsługiwanym urządzeniu (np.PowerMetric.configure
). (I5cf20, b/227229375) - Dodaliśmy
TotalPowerMetric
iTotalEnergyMetric
do pomiaru całkowitej mocy i energii w każdej kategorii systemu w makrotestach porównawczych. (I3b26b, b/224557371)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że skompilowane metody nie były prawidłowo resetowane między poszczególnymi testami porównawczymi makro na nieuzyskanych uprawnieniach roota. Niestety wymaga to ponownej instalacji pliku APK w każdej iteracji, co spowoduje wyczyszczenie danych aplikacji dla każdego testu porównawczego. (I31c74, b/230665435)
- Naprawiono awarię nagrywania śladu na interfejsie API w wersji 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- Ulepszono wykrywanie zakończenia uruchamiania aktywności, aby naprawić wyjątek „Nie można odczytać żadnych danych” w makrotestach porównawczych uruchamiania. (Ia517c)
Wersja 1.1.1
Wersja 1.1.1
9 listopada 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.1
Wersja 1.1.1 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd
android.system.ErrnoException: open failed: EACCES
, który występował na niektórych urządzeniach z Androidem 11 (API 30) i nowszymi wersjami. Jest to wybiórcze zastosowanie poprawki z1.2.0-alpha01
. (aosp/2072249)
Wersja 1.1.0
Wersja 1.1.0
15 czerwca 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0
Wersja 1.1.0 zawiera te zmiany.
- Ta wersja jest identyczna z wersją
androidx.benchmark:benchmark-*:1.1.0-rc03
.
Ważne zmiany od wersji 1.0.0
Obsługa Jetpack Macrobenchmarks, która umożliwia pomiar interakcji w całej aplikacji, takich jak uruchamianie i przewijanie, zapewnia możliwość rejestrowania śladów i pomiaru sekcji śladów.
Obsługa profili podstawowych
CompilationMode.Partial
– do pomiaru skuteczności profili podstawowych.@BaselineProfileRule
, aby automatycznie generować profile podstawowe dla określonej kluczowej ścieżki użytkownika.
Obsługa wskaźników alokacji i profilowania podczas uruchamiania mikrobenczmarków.
Wersja 1.1.0-rc03
1 czerwca 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-rc03
Wersja 1.1.0-rc03 zawiera te zmiany.
Poprawki błędów
Unikaj ponownej instalacji pakietu docelowego w każdej iteracji testu porównawczego. ( aosp/2093027, b/231976084)
Usuń opóźnienie
300ms
zpressHome()
. (aosp/2086030, b/231322975)Zwiększanie szybkości iteracji Macrobenchmark przez optymalizację poleceń Shell używanych w tle. (aosp/2086023, b/231323582)
Obsługa urządzeń zarządzanych przez Gradle podczas generowania profili podstawowych za pomocą testów Macrobenchmark. (aosp/2062228, b/228926421)
Wersja 1.1.0-rc02
11 maja 2022 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-rc02
Wersja 1.1.0-rc02 zawiera te zmiany.
- Pamiętaj, że ta wersja zawiera zmianę w działaniu, ponieważ aplikacje są teraz w pełni ponownie instalowane między poszczególnymi testami porównawczymi, aby zapewnić dokładne pomiary.
Poprawki błędów i zmiany w działaniu
Rozwiązaliśmy problem polegający na tym, że kompilacja aplikacji nie była prawidłowo resetowana między testami porównawczymi na poziomie makro ani w ogóle nie była resetowana w przypadku kompilacji bez dostępu do roota. Rozwiązuje to wiele problemów, w przypadku których przeprowadzenie kilku testów miałoby
CompilationMode
niewielki lub żaden wpływ na pomiary. Aby obejść ten problem, aplikacja docelowa jest teraz w pełni ponownie instalowana w przypadku każdej metody testowania, co powoduje wyczyszczenie danych aplikacji między poszczególnymi testami makro. (I31c74, b/230665435)Ponieważ uniemożliwia to aplikacjom skonfigurowanie stanu przed testami, można teraz pominąć kompilację lub ponowną instalację, aby obejść ten problem. Możesz na przykład w pełni skompilować element docelowy za pomocą polecenia powłoki
cmd package compile -f -m speed <package>
, a następnie pominąć krok kompilacji w makrobenchmarku.Np. w pliku build.gradle makrobenchmarku:
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
Umożliwiliśmy udostępnianie modułu między testami generującymi makrobenchmarki i profile bazowe, dodając argument instrumentacji
androidx.benchmark.enabledRules
. Przekaż „Macrobenchmark” lub „BaselineProfile”, aby uruchomić tylko jeden typ testu, np. podczas generowaniaBaselineProfiles
na emulatorze. (I756b7, b/230371561)Np. w pliku build.gradle makrobenchmarku:
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.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-rc01
Wersja 1.1.0-rc01 zawiera te zmiany.
Poprawki błędów
- Linki do danych wyjściowych profilu podstawowego w Androidzie Studio używają teraz unikalnej nazwy pliku. Dzięki temu dane wyjściowe zawsze odzwierciedlają najnowsze wyniki użycia
BaselineProfileRule
. ( aosp/2057008, b/228203086 )
Wersja 1.1.0-beta06
6 kwietnia 2022 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-beta06
Wersja 1.1.0-beta06 zawiera te zmiany.
Poprawki błędów
- Naprawiono awarię nagrywania śladu w przypadku interfejsu API w wersji 21/22 (If7fd6, b/227509388)
- Ulepszono wykrywanie zakończenia uruchamiania aktywności, aby naprawić wyjątek „Nie można odczytać żadnych danych” w makrotestach porównawczych uruchamiania. (Ia517c)
- Naprawiliśmy wskaźniki uruchamiania w przypadku testów Macrobenchmark, gdy używana jest wartość
CompilationMode.None()
. Przed tą zmianąCompilationMode.Partial()
wydawał się wolniejszy niżCompilation.None()
. (611ac9).
Wersja 1.1.0-beta05
23 marca 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-beta05
Wersja 1.1.0-beta05 zawiera te zmiany.
Poprawki błędów
- Zakończ działanie pakietu po pominięciu instalacji profilu podczas korzystania z
CompilationMode.None
. (aosp/1991373) - Rozwiązaliśmy problem, który powodował, że biblioteka Macrobenchmark nie mogła zbierać danych o uruchamianiu podczas korzystania z
StartupMode.COLD
. (aosp/2012227 b/218668335)
Wersja 1.1.0-beta04
23 lutego 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-beta04
Wersja 1.1.0-beta04 zawiera te zmiany.
Poprawki błędów
Poprawiono brakujące dane na Androidzie 10 i
NoSuchElementException
spowodowany nieprawidłowym rejestrowaniem nazw procesów w śladach. (Ib4c17, b/218668335)Używaj
PowerManager
do wykrywania ograniczenia termicznego na urządzeniach z Androidem Q (API 29) i nowszym. Znacząco zmniejsza to częstotliwość fałszywych alarmów w wykrywaniu ograniczenia termicznego (ponowne uruchomienie testu porównawczego po 90-sekundowym okresie schładzania) i znacznie przyspiesza testy porównawcze w przypadku kompilacji użytkowników. Umożliwia też wykrywanie ograniczeń, nawet gdy zegary są zablokowane (jeśli są zablokowane na zbyt wysokim poziomie w stosunku do fizycznego środowiska urządzenia). (I9c027, b/217497678, b/131755853)Filtrowanie profilowania próbkowanego simpleperf do
measureRepeated
wątku w celu uproszczenia kontroli (Ic3e12, b/217501939)Obsługa danych z nazwanych podprocesów interfejsu w aplikacjach wieloprocesowych (Ice6c0, b/215988434)
Filtrowanie reguł profilu podstawowego pod kątem Androida 9 (SDK 28). aosp/1980331 b/216508418
Pomiń instalację profilu podczas korzystania z
Compilation.None()
. Dodatkowo raportuj ostrzeżenia, gdy aplikacja używa starszej wersjiandroidx.profileinstaller
i wtyczki Androida do obsługi Gradle. aosp/1977029
Wersja 1.1.0-beta03
9 lutego 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-beta03
Wersja 1.1.0-beta03 zawiera te commity.
Zmiany w interfejsie API
- Dodano
AudioUnderrunMetric
do biblioteki testów porównawczych w ramach flagi eksperymentalnej, aby umożliwić wykrywanie niedoborów dźwięku (Ib5972) BaselineProfileRule
nie akceptuje już blokusetup
, ponieważ działał on tak samo jakprofileBlock
. (Ic7dfe, b/215536447)Na przykład:
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że ślady profilera mikrobadań nie były aktualizowane w kolejnych uruchomieniach, gdy były połączone w danych wyjściowych Studio (I5ae4d, b/214917025).
- Zapobieganie poleceniom powłoki kompilacji w przypadku interfejsu API 23 (Ice380)
- Zmieniono nazwy
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
, aby wyjaśnić, że są to czasy trwania, a nie sygnatury czasowe, i dopasować prefiksy. (I0eba3, b/216337830)
Wersja 1.1.0-beta02
26 stycznia 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-beta02
Wersja 1.1.0-beta02 zawiera te zmiany.
Poprawki błędów
- Wyniki profilu próbkowania stosu mikrobenczmarku / śledzenia metody są teraz połączone z danymi wyjściowymi Studio, podobnie jak inne dane profilowania, i nie powodują pomijania danych alokacji. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule wyświetla teraz polecenie
adb pull
w logcat i w danych wyjściowych Studio, aby pobrać wygenerowany plik tekstowy BaselineProfile. (f08811)
Wersja 1.1.0-beta01
12 stycznia 2022 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-beta01
Wersja 1.1.0-beta01 zawiera te zmiany.
Poprawki błędów
- Naprawia ignorowanie argumentu profilera enable. (I37373, b/210619998)
- Usunięto wycofaną funkcję
CompliationModes
(I98186, b/213467659) - Zmieniono argument profilu podstawowego
CompilationMode.Partial
na wyliczenie, aby był bardziej czytelny. (Id67ea)
Wersja 1.1.0-alpha13
15 grudnia 2021 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha13
Wersja 1.1.0-alpha13 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano śledzenie systemu o niskim obciążeniu do danych wyjściowych mikropomiarów na Androidzie Q (interfejs API na poziomie 29 lub wyższym). Pamiętaj, że obecnie nie rejestruje ono śledzenia niestandardowego (za pomocą interfejsów API Jetpack
android.os.Trace
lubandroidx.tracing
), aby nie wpływać na wyniki. Śledzenie powinno być przydatne w diagnozowaniu niestabilności, zwłaszcza w przypadku źródeł spoza testu porównawczego. (I298be, b/205636583, b/145598917) - Wyjaśnij, że
CompilationModes
dzieli się na 3 klasy: pełna, brak i częściowa. Wcześniej były one niejednolicie nazywane na podstawie argumentów kompilacji (które obecnie traktujemy jako szczegóły implementacji) i funkcji. Dzięki temu łatwiej zrozumieć kompromisy, potencjalne kombinacje i zachowania w różnych wersjach platformy. (I3d7bf, b/207132597) - Konfiguracja i pomiar są teraz zawsze parami w odpowiedniej kolejności. Możesz teraz wysyłać zapytania dotyczące nazwy pakietu i iteracji (chociaż w niektórych scenariuszach rozgrzewki iteracja może mieć wartość
null
). (Id3b68, b/208357448, b/208369635)
Poprawki błędów
- Wartość
CompilationMode.Speed
została nieprawidłowo potraktowana jakoNone
(I01137)
Wersja 1.1.0-alpha12
17 listopada 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha12
Wersja 1.1.0-alpha12 zawiera te zmiany.
Nowe funkcje
- Dodaj eksperymentalny TraceSectionMetric do niestandardowych pomiarów czasu opartych na śledzeniu. (I99db1, b/204572664)
Poprawki błędów
- Wybudzanie urządzenia w każdej iteracji, aby można było przetestować interfejs – wymaga wyłączenia ekranu blokady. (Ibfa28, b/180963442)
- Rozwiązano problem z wieloma awariami w trybie profilowania StackSampling na emulatorach i urządzeniach bez roota (Icdbda, b/202719335).
- Usunięto 0,5-sekundowe uśpienie na końcu każdej iteracji.Jeśli po tej zmianie zauważysz brakujące dane, zgłoś błąd. (Iff6aa)
- Zmniejszenie prawdopodobieństwa utraty danych i zmniejszenie obciążenia pamięci związanego ze śledzeniem (Id2544, b/199324831, b/204448861)
- Zmniejsz rozmiar śladu o ok. 40% dzięki przejściu na kompaktowy format pamięci masowej harmonogramu. (Id5fb6, b/199324831)
- Zaktualizowano implementacje danych dotyczących uruchamiania, aby zawsze kończyły się na końcu wątku renderowania. Będzie to bardziej spójne w różnych wersjach platformy i dokładniej odzwierciedlać pomiary w aplikacji. (Ic6b55)
Wersja 1.1.0-alpha11
3 listopada 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha11
Wersja 1.1.0-alpha11 zawiera te zmiany.
Zmiany w interfejsie API
- Test porównawczy makro ma teraz
minSdkVersion
o wartości23
. (If2655) - Dodaje nowy eksperymentalny interfejs API
BaselineProfileRule
, który może generować profile podstawowe dla kluczowych ścieżek użytkownika w aplikacji. Szczegółowa dokumentacja zostanie udostępniona wkrótce. (Ibbefa, b/203692160) - Usuwa wariant interfejsu measureRepeated, który został dodany dla wywołań w języku Java, ponieważ powodował niejednoznaczność w zakresie ukończenia lub rozwiązania metody. Wywołania w języku Java ponownie będą musiały zwracać Unit.Instance z funkcji measureRepeated. Jeśli jest to dla Ciebie niewygodne, zgłoś błąd. Możemy ponownie rozważyć tę kwestię w przyszłej wersji. (Ifb23e, b/204331495)
Wersja 1.1.0-alpha10
27 października 2021 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha10
Wersja 1.1.0-alpha10 zawiera te zmiany.
Zmiany w interfejsie API
- Przeniesienie StartupTimingMetric do API 23. Ta nowa implementacja lepiej obsługuje też funkcję reportFullyDrawn(), która czeka, aż odpowiednie treści zostaną wyrenderowane. (If3ac9, b/183129298)
- Dodano adnotację JvmOverloads do wielu metod MacrobenchmarkScope dla wywołujących w Javie. (I644fe, b/184546459)
- Podaj alternatywną funkcję MacrobenchmarkRule.measureRepeated, która używa
Consumer<MacrobenchmarkScope>
do idiomatycznego użycia w języku Java. (If74ab, b/184546459)
Poprawki błędów
- Poprawka dotycząca śladów, które nie zaczynają się wystarczająco wcześnie, i brakujących danych o rodzajach danych. Powinno to rozwiązać wyjątki „Nie można odczytać żadnych danych podczas testu porównawczego” spowodowane przez samą bibliotekę. (I6dfcb, b/193827052, b/200302931)
- Nazwa FrameNegativeSlack została zmieniona na FrameOverrun, aby wyjaśnić jej znaczenie – o ile klatka przekroczyła swój budżet czasu. (I6c2aa, b/203008701)
Wersja 1.1.0-alpha09
13 października 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha09
Wersja 1.1.0-alpha09 zawiera te zmiany.
Poprawki błędów
- Obsługa usuwania pamięci podręcznej strony jądra bez uprawnień roota na API 31/S+, co zwiększy dokładność uruchamiania w StartupMode.COLD. (Iecfdb, b/200160030)
Wersja 1.1.0-alpha08
29 września 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha08
Wersja 1.1.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Włączenie możliwości uruchamiania testów porównawczych makro z przewijaniem wstecznie do API 23 (If39c2, b/183129298)
- Dodaj nowy typ próbkowanych danych do interfejsu i danych wyjściowych JSON, skupiając się na percentylach wielu próbek na iterację. (I56247, b/199940612)
- Przełączanie się na wskaźniki zmiennoprzecinkowe w bibliotekach testów porównawczych (obcięte w interfejsie Studio). (I69249, b/197008210)
Wersja 1.1.0-alpha07
1 września 2021 roku
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha07
Wersja 1.1.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Podniesiono minimalny poziom API do 21, aby odzwierciedlić zamierzony najniższy poziom API, który będzie obsługiwany w przyszłości. Obecny minimalny obsługiwany interfejs API jest nadal przekazywany za pomocą funkcji RequiredApi() i wynosi obecnie 29 (I440d6, b/183129298).
Poprawki błędów
- Poprawki
ProfileInstaller
, które ułatwiają aplikacjom korzystającym z profili podstawowych uruchamianie testów MacroBenchmark za pomocąCompilationMode.BaselineProfile
. (I42657, b/196074999) UWAGA: wymaga też aktualizacji do wersjiandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
lub nowszej. - Testy porównawcze
StartupMode.COLD
iCompilationMode.None
są teraz bardziej stabilne. (I770cd, b/196074999)
Wersja 1.1.0-alpha06
18 sierpnia 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha06
Wersja 1.1.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano argument instrumentacji
androidx.benchmark.iterations
, aby umożliwić ręczne zastępowanie liczby iteracji podczas testowania lub profilowania lokalnego. (6188be, b/194137879)
Poprawki błędów
- Od API w wersji 29 lub nowszej domyślnym profilerem próbkowania jest Simpleperf. (Ic4b34, b/158303822)
Znane problemy
CompilationMode.BaselineProfile
jest w trakcie opracowywania. Na razie nie używaj go do określania, jak dobry jest profil.
Wersja 1.1.0-alpha05
4 sierpnia 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha05
Wersja 1.1.0-alpha05 zawiera te zmiany.
1.1.0-alpha04
zostało anulowane przed publikacją z powodu sporadycznych awarii. b/193827052
Zmiany w interfejsie API
- Zmieniono wywołanie startActivityAndWait na wywołanie uruchamiania za pomocą
am start
, co skraca czas każdej iteracji pomiaru o około 5 sekund. W zamian nie jest już obsługiwana serializacja intencji. (I5a6f5, b/192009149
Poprawki błędów
- Zmniejsz agresywność wykrywania ograniczenia termicznego i ponownie oblicz punkt odniesienia, jeśli ograniczenia są wykrywane często. (I7327b)
- Poprawka FrameTimingMetric, aby działała w wersji beta Androida S (Ib60cc, b/193260119)
- Użyj
EmptyActivity
, aby wyłączyć stan wymuszonego zatrzymania aplikacji docelowej i lepiej obsługiwaćCompilationMode.BaselineProfile
. (Id7cac, b/192084204) - Zmieniono rozszerzenie pliku śledzenia na
.perfetto-trace
, aby było zgodne ze standardem platformy. (I4c236, b/174663039) - StartupTimingMetric zwraca teraz dane „fullyDrawnMs”, aby mierzyć czas do zakończenia renderowania aplikacji. Aby zdefiniować ten pomiar w przypadku 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 klasie ComponentActivity). Pamiętaj, że test musi trwać wystarczająco długo, aby można było zarejestrować dane (funkcja startActivityAndWait nie czeka na wywołanie funkcji reportFullyDrawn). (If1141, b/179176560)
- Zmniejszenie kosztu dołączania metadanych interfejsu do śladów o ponad 50 ms (Ic8390, b/193923003)
- Znacznie zwiększona częstotliwość odpytywania podczas zatrzymywania śledzenia, co może skrócić np.czas działania testu porównawczego uruchamiania o ponad 30% (Idfbc1, b/193723768).
Wersja 1.1.0-alpha03
16 czerwca 2021 r.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha03
Wersja 1.1.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Dodano nowy element
CompilationMode.BaselineProfile
, aby obsługiwać profile zainstalowane za pomocą biblioteki Jetpack ProfileInstaller. (aosp/1720930)
Poprawki błędów
Przykładowy kod Gradle do pomijania błędów testów porównawczych został zaktualizowany, aby używać nieprzestarzałego interfejsu API ze składnią, która obsługuje też użytkowników plików .gradle.kts.
Np.
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Wersja 1.1.0-alpha02
18 maja 2021 r.
Wersja 1.1.0-alpha02 biblioteki Benchmark wprowadza ważny komponent do testów porównawczych – Macrobenchmark. Oprócz testu porównawczego, który umożliwia pomiar pętli procesora, test porównawczy pozwala mierzyć interakcje w całej aplikacji, takie jak uruchamianie i przewijanie, oraz rejestrować ślady. Więcej informacji znajdziesz w dokumentacji biblioteki.
Zostanie wycofaneandroidx.benchmark:benchmark-*:1.1.0-alpha02
Wersja 1.1.0-alpha02 zawiera te zmiany.
Nowe funkcje
Dodano artefakty testów porównawczych (androidx.benchmark:benchmark-macro-junit4
i androidx.benchmark:benchmark-macro
)
- Zbieranie danych o skuteczności uruchamiania, przewijania i animacji w aplikacji lokalnie lub w CI
- Rejestrowanie i sprawdzanie śladów w Androidzie Studio
Poprawki błędów
- Obejście problemu z uprawnieniami powłoki w przypadku katalogu wyjściowego na Androidzie 12 (uwaga – aby nadal przechwytywać pliki wyjściowe na urządzeniach, których dotyczy problem, może być konieczne zaktualizowanie wtyczki Android Gradle do wersji 7.0.0 canary i Androida Studio do wersji Arctic Fox (2020.3.1)). (Icb039)
- Zapisywanie w pamięci podręcznej konfiguracji pomocy w BenchmarkPlugin (6be1c1, b/159804788)
- Uproszczone dane wyjściowe pliku – domyślnie włączone w katalogu, który nie wymaga
requestLegacyExternalStorage=true
(8b5a4d, b/172376362) - Poprawia ostrzeżenia logcat dotyczące drukowania biblioteki o braku wątku JIT w wersjach platformy, w których nie występuje. (I9cc63, b/161847393)
- Poprawka dotycząca maksymalnej częstotliwości urządzenia do czytania. (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
są zwalniane. Wersja 1.1.0-alpha01 zawiera te zmiany.
Nowe funkcje wersji 1.1
- Wskaźnik alokacji – testy porównawcze są teraz przeprowadzane w dodatkowej fazie po rozgrzewce i pomiarze czasu, podczas której rejestrowane są liczby alokacji. Alokacje mogą powodować problemy z wydajnością w starszych wersjach platformy (w wersji O czas 140 ns zmienił się na 8 ns w wersji M – pomiar na Nexusie 5X z zablokowanymi zegarami). Ta wartość jest wyświetlana w danych wyjściowych konsoli Android Studio, a także w sekcji
- Obsługa profilowania – teraz możesz rejestrować dane profilowania podczas testu porównawczego, aby sprawdzić, dlaczego Twój kod może działać wolno. Benchmark obsługuje rejestrowanie śledzenia metod lub próbkowania metod z ART. Pliki te można sprawdzić za pomocą profilera w Android Studio, wybierając Plik > Otwórz.
- Wtyczka Benchmark Gradle ma teraz ustawienia domyślne, które ułatwiają konfigurację:
testBuildType
jest domyślnie ustawiona na wersję, aby uniknąć używania zależności z wbudowanym pokryciem kodu. Typ kompilacji wersji jest też skonfigurowany jako domyślny, co umożliwia Androidowi Studio automatyczne wybieranie prawidłowego wariantu kompilacji przy pierwszym otwarciu projektu. (b/138808399)signingConfig.debug
jest używany jako domyślna konfiguracja podpisywania (b/153583269).
** Poprawki błędów **
- Znacznie zmniejszono obciążenie związane z przejściem do rozgrzewki, w przypadku której pierwszy pomiar dla każdego testu porównawczego był sztucznie wyższy niż pozostałe. Problem ten był bardziej widoczny w przypadku bardzo małych testów porównawczych (1 mikrosekunda lub mniej). (b/142058671)
- Usunęliśmy błąd
InstrumentationResultParser
, który był wyświetlany w przypadku każdego testu porównawczego podczas uruchamiania z wiersza polecenia. (I64988, b/154248456)
Znane problemy
- Wiersz poleceń i wywołania Gradle w przypadku testu porównawczego nie drukują wyników bezpośrednio. Możesz to obejść, uruchamiając narzędzie w Studio lub analizując plik wyjściowy JSON w celu uzyskania wyników.
- Raportowanie danych porównawczych nie pobiera raportu z urządzeń, na których zainstalowano aplikację z identyfikatorem applicationId kończącym się na „android” lub „download” (bez rozróżniania wielkości liter). Użytkownicy, u których występuje ten problem, powinni uaktualnić wtyczkę Androida do obsługi Gradle do wersji 4.2-alpha01 lub nowszej.
Wersja 1.0.0
Benchmark Version 1.0.0
20 listopada 2019 r.
Wersje androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
i androidx.benchmark:benchmark-junit4:1.0.0
zostały opublikowane bez zmian w stosunku do wersji 1.0.0-rc01. Wersja 1.0.0 zawiera te zmiany.
Główne funkcje wersji 1.0.0
Biblioteka Benchmark umożliwia pisanie testów wydajności kodu aplikacji i szybkie uzyskiwanie wyników.
Zapobiega problemom z konfiguracją w czasie kompilacji i działania oraz stabilizuje wydajność urządzenia, aby zapewnić dokładność i spójność pomiarów. Uruchamiaj testy porównawcze bezpośrednio w Android Studio lub w ramach ciągłej integracji, aby obserwować wydajność kodu w czasie i zapobiegać regresji.
Główne funkcje:
- Stabilizacja zegara
- Automatyczne nadawanie priorytetów wątkom
- Obsługa testowania wydajności interfejsu, np. w przykładzie RecyclerView
- Rozgrzewanie i zapętlanie z uwzględnieniem kompilacji JIT
- Dane wyjściowe testu porównawczego w formacie JSON do 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
są zwalniane. Wersja 1.0.0-rc01 zawiera te commity.
Nowe funkcje
- Dodano śledzenie systrace do testów porównawczych
Poprawki błędów
- Rozwiązanie problemu z niestabilnością danych, który powodował, że kompilacja JIT nie kończyła się przed rozgrzewką z powodu obniżenia priorytetu (b/140773023).
- Ujednolicony katalog wyjściowy JSON w wtyczkach 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
są zwalniane. Wersja 1.0.0-beta01 zawiera te zmiany.
Nowe funkcje
- Przed każdym rozgrzewaniem uruchamiaj odśmiecanie pamięci, aby zmniejszyć obciążenie pamięci z jednego testu porównawczego i zapobiec jego przenoszeniu do następnego (b/140895105).
Poprawki błędów
- Dodano zależność
androidx.annotation:android-experimental-lint
, aby kod Java prawidłowo generował błędy lint, gdy nie jest używany eksperymentalny interfejs API, podobnie jak w przypadku eksperymentalnej adnotacji Kotlin dla wywołujących Kotlin. - Teraz prawidłowo wykrywa użycie argumentu
additionalTestOutputDir
instrumentacji na potrzeby danych wyjściowych w Android Gradle Plugin 3.6, aby wiedzieć, kiedy AGP będzie obsługiwać kopiowanie danych. - Naprawiono niewykrytą częstotliwość zegara w pliku JSON, aby prawidłowo wyświetlać wartość
-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
są zwalniane. Wersja 1.0.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Dodano sprawdzanie nieprawidłowego użycia starego pakietu do narzędzia do uruchamiania testów, które teraz wyświetla bardziej pomocny komunikat o błędzie.
Zmiany w interfejsie API
- Eksperymentalna adnotacja
ExperimentalAnnotationReport
jest teraz prawidłowo publiczna. Korzystanie z eksperymentalnego interfejsu BenchmarkState#report API wymaga teraz tej adnotacji.
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
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Interfejs API
BenchmarkState.reportData
jest teraz oznaczony jako eksperymentalny
Poprawki błędów
- Poprawka skryptu blokującego zegar, który nie działał na urządzeniach, na których brakowało narzędzi powłoki
cut
lubexpr
. - Rozwiązaliśmy problem z zadaniem
./gradlew lockClocks
, które zawieszało się na urządzeniach z dostępem do roota, na których zainstalowana była starsza wersja narzędzia su, która nie obsługiwała 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
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Dodaliśmy też nową dokumentację dotyczącą używania biblioteki Benchmark bez Gradle, zarówno w przypadku różnych systemów kompilacji (np. Bazel lub Buck), jak i podczas uruchamiania w CI. Więcej informacji znajdziesz w artykułach Tworzenie testów porównawczych bez Gradle i Uruchamianie testów porównawczych w integracji ciągłej.
Nowe funkcje
- Wtyczka Gradle
- Teraz automatycznie wyłącza pokrycie testami i domyślnie ustawia wartość
AndroidBenchmarkRunner
(b/138374050). - Dodano obsługę kopiowania danych opartego na AGP podczas przeprowadzania testów porównawczych i korzystania z AGP w wersji 3.6 lub nowszej.
- Teraz automatycznie wyłącza pokrycie testami i domyślnie ustawia wartość
- Dodatki do formatu JSON
- Całkowity czas działania testu porównawczego (b/133147694)
@Parameterized
testy porównawcze, które używają ciągu znaków z nazwą (np.@Parameters(name = "size={0},depth={1}")
), podają teraz w danych wyjściowych JSON nazwy i wartości parametrów dla każdego testu porównawczego (b/132578772).
- Tryb uruchomienia próbnego (b/138785848)
- Dodaliśmy tryb „próbny”, w którym każda pętla testu porównawczego jest uruchamiana tylko raz, aby sprawdzić, czy nie występują błędy lub awarie, bez rejestrowania pomiarów. Może to być przydatne np. do szybkiego przeprowadzania testów porównawczych przed przesłaniem, aby sprawdzić, czy nie są uszkodzone.
Zmiany w interfejsie API
- Struktura modułu uległa zmianie, a biblioteka została podzielona (b/138451391).
benchmark:benchmark-junit4
zawiera klasy z zależnością JUnit:AndroidBenchmarkRunner
iBenchmarkRule
, które zostały przeniesione do pakietuandroidx.benchmark.junit4
.benchmark:benchmark-common
zawiera pozostałą logikę, w tym interfejs BenchmarkState API.- Ten podział umożliwi bibliotece w przyszłości obsługę testów porównawczych bez interfejsów API JUnit4.
- Ostrzeżenia dotyczące konfiguracji są teraz traktowane jako błędy i powodują przerwanie testu (b/137653596).
- Ma to na celu dalsze zachęcanie do dokładnych pomiarów, zwłaszcza w przypadku CI.
- Te błędy można przekształcić z powrotem w ostrzeżenia za pomocą argumentu instrumentacji. Na przykład:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Poprawki błędów
- Błędy podczas zapisywania danych na urządzeniach zewnętrznych w systemie Android Q są opisywane bardziej szczegółowo i zawierają sugestie dotyczące rozwiązania problemu.
- Podczas testów porównawczych ekrany są automatycznie włączane, zamiast wyłączać się, gdy ekran jest wyłączony.
Wkład użytkowników zewnętrznych
- Dziękujemy Siergiejowi Zacharowowi za ulepszenia w zakresie danych wyjściowych JSON i za rozwiązanie problemów z wyłączaniem 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
zostają opublikowane. Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Udostępnianie czasu trwania snu z powodu ograniczenia termicznego w przypadku każdego testu porównawczego w pełnym raporcie JSON
Poprawki błędów
- Wtyczka Gradle nie powinna już być stosowana po wtyczkach Androida i bloku Androida.
- Dodano obsługę raportów porównawczych na urządzeniach z Androidem 10 korzystających z pamięci o ograniczonym zakresie
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
zostają opublikowane. Listę zmian w tej wersji znajdziesz tutaj.
Pamiętaj, że traktujemy schemat JSON jako interfejs API. Planujemy przestrzegać tych samych ograniczeń dotyczących stabilności co w przypadku innych interfejsów API: stabilne (z bardzo rzadkimi wyjątkami) w wersji beta i ustalone w wersji finalnej, z dodatkami tylko w wersjach pomniejszych oraz zmianami i usunięciami w wersjach głównych.
Zmiany w interfejsie API
Zmieniony schemat JSON. Dalsze zmiany w schemacie JSON będą prawdopodobnie ograniczone do dodawania nowych elementów:
- Zmieniliśmy strukturę obiektu wyniku, aby w przyszłości obsługiwać dodatkowe grupy danych (b/132713021).
- Dodano informacje kontekstowe o testowym uruchomieniu, takie jak informacje o urządzeniu i kompilacji oraz to, czy zegary są zablokowane, do obiektu najwyższego poziomu (b/132711920).
- Nazwy danych dotyczących czasu zawierają teraz „ns” (b/132714527)
- Dodano dodatkowe statystyki dla każdego raportowanego rodzaju danych (maksymalne, średnie, minimalne) i usunięto uproszczone statystyki podsumowujące „nanos” (b/132713851).
Usunięto dane wyjściowe XML (b/132714414)
Usunięcie wykrywania ograniczenia termicznego z interfejsu
BenchmarkState.reportData
API (b/132887006)
Poprawki błędów
- Naprawiono problem z nieprzywieraniem
./gradlew lockClocks
na niektórych nowszych urządzeniach z systemem operacyjnym (b/133424037) - Wykrywanie ograniczania zostało wyłączone w przypadku emulatora (b/132880807)
Wersja 1.0.0-alpha01
7 maja 2019 r.
Zostanie wycofaneandroidx.benchmark:benchmark:1.0.0-alpha01
Zmiany zawarte w tej wersji są dostępne tutaj.