Тесты производительности героев

Тесты Hero — это набор тестов, охватывающих основные этапы взаимодействия пользователя с приложением, такие как запуск приложения или прокрутка в приложении Pokedex с открытым исходным кодом.

  • Контрольные показатели для успешных стартапов: отслеживание времени от открытия приложения до отображения контента.
  • Тесты производительности Scroll Hero: измерение эффективности прокрутки ленивой сетки с изображениями.

Настройка теста

  • Выбор приложения: Мы провели эти тесты, используя приложение Pokedex с открытым исходным кодом, сравнивая его версии на основе View и Compose . Приложение было выбрано для представления реальных сценариев и не было разработано командой Compose.
  • Аппаратная конфигурация: Мы проводили тесты на Pixel 3a под управлением Android 12 (API 31) с заблокированными процессором и видеокартой . Это устройство используется в качестве эталонного показателя производительности для основных тестов.
  • Настройка сборки: В тестах используется приложение, собранное в режиме выпуска с включенной поддержкой R8 . Приложение полностью предварительно скомпилировано для снижения нестабильности, вызванной JIT-компиляцией (компиляцией «на лету»).
  • Выбор результатов : Для обеспечения анализа наихудшего сценария из результатов сравнительного анализа были исключены экстремальные выбросы и нерепрезентативный шум. Затем был установлен базовый уровень путем выбора медианных значений данных о верхней границе производительности.

Контрольные показатели для героев стартапов

Для измерения времени запуска мы использовали PokedexStartupBenchmark . PokedexStartupBenchmark измеряет время, необходимое для того, чтобы приложение Pokedex стало видимым для пользователя.

Запуск приложения может происходить в одном из трех состояний : холодный старт, теплый старт или горячий старт. Каждое состояние влияет на время, необходимое для того, чтобы приложение стало видимым для пользователя. При холодном старте приложение запускается с нуля. В этом тесте мы измеряем производительность запуска приложения в состоянии холодного старта. Мы рекомендуем всегда оптимизировать приложение, исходя из предположения о холодном старте. Это может улучшить производительность как при теплом, так и при горячем старте.

Для измерения времени запуска приложения мы используем следующие метрики: время до первоначального отображения и время до полного отображения .

Время до первого отображения

Показатель Time to Initial Display (TTID) измеряет время, необходимое приложению для создания первого кадра, включая инициализацию процесса при холодном старте, создание активности при холодном или теплом старте и отображение первого кадра.

В тесте PokedexStartupBenchmark версия Compose 1.11 на 2,5% медленнее, чем Views для TTID при холодном старте.

Compose 1.11 работает на 2,5% медленнее, чем Views для TTID.
Рисунок 1: Сравнение Compose 1.11 и Views for TTID.

Время до полного отображения

Время до полного отображения (TTFD) измеряет время, необходимое для перехода приложения в интерактивное состояние. Это означает, что все данные загружены и отображены. Для получения дополнительной информации о времени до полного отображения см. раздел «Время запуска приложения» .

В тесте PokedexStartupBenchmark версия Compose 1.11 на 13,0% медленнее, чем Views, при использовании TTFD с холодным стартом.

Compose 1.11 работает на 13,0% медленнее, чем Views для TTFD.
Рисунок 2: Сравнение Compose 1.11 с Views для TTFD.

Тесты производительности Scroll Hero

Для измерения производительности прокрутки мы использовали PokedexScrollBenchmark . Он измеряет производительность прокрутки экрана приложения Pokedex для ленивой сетки с изображениями. В этом тесте весь экран прокручивается и перемещается несколько раз, а также загружаются новые элементы. Производительность прокрутки измеряется показателем рывков (jank rate).

ставка джанка

Устройства Android отображают изображение со скоростью до 60 или 120 кадров в секунду (fps). Это означает, что у системы есть жесткий крайний срок (например, 16,6 мс для 60 кадров в секунду) для создания кадра. Если приложению требуется слишком много времени для выполнения своей работы, это может вызвать видимое подтормаживание, которое мы называем «рывками».

В тесте PokedexScrollBenchmark , Compose и Views демонстрируют одинаковую производительность — 0,21% рывков, начиная с версии Compose 1.9.0. В абсолютных цифрах, рывки наблюдались только в 1 из 485 кадров.

Эти тесты показывают, что Compose 1.9 и более поздние версии демонстрируют производительность, сопоставимую с Views по показателю рывков при прокрутке.

Начиная с версии Compose 1.9.0, Compose и Views демонстрируют одинаковую частоту зависаний.
Начиная с версии Compose 1.9.0, Compose и Views демонстрируют одинаковую частоту зависаний.

Запустите тесты производительности героя

Для проверки результатов производительности и запуска тестов локально:

  1. Чтобы получить доступ к исходному коду, следуйте инструкциям в руководстве AndroidX .
  2. Следуйте инструкциям в исходном коде Hero Benchmarks .

Эти тесты можно запускать на любом поддерживаемом устройстве, например, на том, для которого вы оптимизируете свое приложение. Однако для подтверждения официальных результатов используйте ту же самую аппаратную конфигурацию .