Mikroporównanie

Biblioteka Jetpack Microbenchmark pozwala na przetestowanie kodu natywnego w Androidzie (Kotlin lub Java) w Android Studio. Biblioteka obsługuje rozgrzewkę, mierzy wydajność kodu i liczbę przydziałów oraz generuje wyniki analizy porównawczej zarówno w konsoli Android Studio, jak i w pliku JSON.

Przed wykonaniem testu porównawczego zalecamy profilowanie kodu. Pomaga to znaleźć kosztowne operacje, które warto zoptymalizować. Może również pokazać, dlaczego operacje są powolne, pokazując, co dzieje się w trakcie ich wykonywania, np. wykonywać w wątku o niskim priorytecie, uśpić z powodu dostępu do dysku lub nieoczekiwanie wywoływać kosztowną funkcję, taką jak dekodowanie bitmapy.

Mikroporównania najbardziej przydają się w przypadku pracy z CPU, która jest wielokrotnie uruchamiana w aplikacji, czyli tzw. ścieżkach kodu. Dobrymi przykładami są tu przewijanie RecyclerView z jednym elementem wyświetlany jednocześnie, konwersje i przetwarzanie danych oraz inne fragmenty kodu, które są używane wielokrotnie.

Inne typy kodu są trudniejsze do zmierzenia za pomocą biblioteki Microbenchmark. Testy porównawcze działają w pętli, dlatego kod, który nie jest uruchamiany często lub ma inne wyniki przy wielokrotnym wywoływaniu, może nie sprawdzić się w testach porównawczych.

Aby dowiedzieć się, jak używać biblioteki w środowisku ciągłej integracji (CI), przeczytaj artykuł Przeprowadzanie testów porównawczych w ciągłej integracji.

Unikaj pomiaru pamięci podręcznej

Staraj się unikać pomiaru tylko pamięci podręcznej. Na przykład w ramach testu porównawczego układu widoku niestandardowego można zmierzyć tylko wydajność pamięci podręcznej układu. Aby tego uniknąć, możesz przekazywać różne parametry układu w każdej pętli. W innych przypadkach, np. przy pomiarze wydajności systemu plików, może to być trudne, ponieważ system operacyjny zapisuje system plików w pamięci podręcznej podczas zapętlenia.

Uzyskiwanie spójnych wartości porównawczych

Zegary na urządzeniach mobilnych dynamicznie zmieniają się z wysokiego, na niski, na niski, aby oszczędzać energię lub gdy urządzenie się nagrzewa. Te różne zegary mogą sprawić, że Twoje wskaźniki porównawcze będą się znacznie różnić, a biblioteka podpowie Ci, jak sobie z tym radzić.

Blokowanie zegarów (wymaga urządzenia z dostępem do roota)

Zablokowanie zegara to najlepszy sposób na uzyskanie stabilnej wydajności. Dzięki temu zegary nigdy nie będą na tyle wysokie, aby nagrzewać urządzenie, lub niskie, jeśli test porównawczy nie wykorzystuje w pełni procesora. Można ją zastosować za pomocą zadania Gradle (gradlew lockClocks) lub ręcznie w CI. To najlepszy sposób na uzyskanie stabilnej wydajności, ale nie jest obsługiwany na większości urządzeń, bo wymaga urządzenia z Androidem z dostępem do roota.

Tryb ciągłej wydajności

Window.setSustainedPerformanceMode() to funkcja obsługiwana na urządzeniach, która pozwala aplikacji na zmniejszenie maksymalnej częstotliwości procesora. W przypadku obsługiwanych urządzeń biblioteka mikroporównawcza wykorzystuje kombinację tego interfejsu API i uruchamia własną aktywność, aby zapobiegać ograniczaniu temperatury i stabilizować wyniki.

Ta funkcja jest domyślnie włączona przez testInstrumentationRunner ustawiony przez wtyczkę Androida do obsługi Gradle. Jeśli chcesz użyć niestandardowego mechanizmu uruchamiania, możesz podklasę AndroidBenchmarkRunner i użyć jej jako testInstrumentationRunner.

Aby sprawdzić, czy test porównawczy działa na pierwszym planie, bez żadnego innego rysunku aplikacji, uruchamia nieprzezroczyste, pełnoekranowe działanie.

Wstrzymanie automatycznego wykonywania

Jeśli nie używasz blokady zegara ani nie zapewniasz długotrwałej wydajności, biblioteka wykonuje automatyczne wykrywanie ograniczania temperatury. Gdy ta opcja jest włączona, wewnętrzna analiza porównawcza jest okresowo uruchamiana, aby określić, kiedy temperatura urządzenia staje się wystarczająco wysoka, aby zmniejszyć wydajność procesora. Gdy wykryje ona obniżoną wydajność procesora, biblioteka wstrzymuje wykonywanie kodu, aby urządzenie się ochłodziło, a następnie ponawia próbę z bieżącą analizą porównawczą.

Próbki

Zapoznaj się z tymi przykładami w repozytorium GitHub:

Dodatkowe materiały

Prześlij opinię

Aby podczas analizy porównawczej zgłaszać problemy lub przesyłać prośby o dodanie funkcji, skorzystaj z publicznego narzędzia do śledzenia problemów.