Основные контрольные показатели

Основные тесты производительности охватывают высокоуровневые пути пользователя в приложении, например запуск приложения или прокрутку в приложении Pokedex с открытым исходным кодом.

  • Контрольные показатели запуска. Отслеживание времени от открытия приложения до показа контента.
  • Scroll hero benchmarks: Measuring scrolling performance of a lazy grid with images.

Настройка тестирования

  • Выбор приложения. Мы провели эти тесты, используя приложение Pokedex с открытым исходным кодом, сравнивая его версии на основе View и на основе Compose. Приложение было выбрано для представления реальных сценариев и не разрабатывалось командой Compose.
  • Настройка оборудования. Тесты производительности проводились на устройстве Pixel 6 с Android 17 (API уровня 37) с заблокированными ЦП и графическим процессором. До версии Compose 1.12 тесты проводились на Pixel 3a. Начиная с Compose 1.12, Pixel 6 используется в качестве стандартного базового уровня производительности для основных тестов, а Compose 1.11 также измерялся на Pixel 6 для сравнения.
  • Настройка сборки. Тесты используют приложение, созданное в режиме выпуска с включенным R8. Приложение полностью скомпилировано заранее, чтобы снизить нестабильность, связанную с JIT-компиляцией.
  • Выбор результатов. Чтобы обеспечить анализ наихудшего сценария, из результатов тестирования были исключены экстремальные выбросы и нерепрезентативный шум. Затем на основе медианных значений верхних границ данных об эффективности был установлен базовый уровень.

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

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

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

Для оценки времени запуска приложения используются показатели Время до начальной отрисовки и Время до полной отрисовки.

Время до начальной отрисовки

Время до первого показа (TTID) – это время, которое требуется приложению для создания первого кадра, включая инициализацию процесса во время холодного запуска, создание действия во время холодного или теплого запуска и отображение первого кадра.

В PokedexStartupBenchmark Compose 1.13 достигает начальной отрисовки за 147,65 мс при холодном запуске. Этот результат находится в пределах нормального шума между запусками Compose 1.12.1 (145,51 мс) и Compose 1.11.4 (147,78 мс) и на 3,4 % быстрее, чем Views (152,87 мс).

Время до начальной отрисовки в миллисекундах, протестировано на Pixel 6
ВерсияВремя до начальной отрисовки (мс)
Compose 1.11147,78
Compose 1.12145,51
Compose 1.13147,65
Просмотры152,87
Рисунок 1. На этой диаграмме сравнивается TTID для Compose 1.11, 1.12 и 1.13 с представлениями.

Время до полного показа

Время до полного отображения (TTFD) – это время, за которое приложение становится интерактивным. Это означает, что все данные загружены и отрисованы. Подробнее о времени запуска приложения…

В PokedexStartupBenchmark Compose 1.13 полностью отображается за 202,79 мс при холодном запуске. Этот результат находится в пределах нормального шума между запусками Compose 1.12.1 (201,96 мс) и Compose 1.11.4 (203,33 мс). Views достигает полного отображения за 180,32 мс, поэтому Compose 1.13 на 12,5 % медленнее, чем Views для TTFD.

Время до полного отображения в миллисекундах, протестировано на Pixel 6
ВерсияВремя до полного отображения (мс)
Compose 1.11203,33
Compose 1.12201,96
Compose 1.13202,79
Просмотры180,32
Рисунок 2. На этой диаграмме сравнивается TTFD для Compose 1.11, 1.12 и 1.13 с представлениями.

Прокрутить контрольные показатели героев

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

Доля кадров с задержкой

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

В PokedexScrollBenchmark Compose соответствует производительности Views с 0 процентных пунктов избыточного зависания, начиная с Compose 1.9.0. На Pixel 6 в представлениях и Compose зафиксировано 0,00 % задержек в Compose 1.11.4, 1.12.1 и 1.13.

Разница в количестве зависаний между Compose и View в процентных пунктах по версиям Compose (чем ниже, тем лучше)
Версия ComposeУстройствоИзбыточное количество зависаний по сравнению с просмотрами (процентные пункты)
1.3.3Pixel 3a+0,35
1.4.3Pixel 3a+0,41
1.5.4Pixel 3a+0,42
1.6.8Pixel 3a+0,21
1.7.8Pixel 3a+0,36
1.8.0Pixel 3a+0,38
1.9.0Pixel 3a0
1.10.0Pixel 3a0
1.11Pixel 60
1.12Pixel 60
1.13Pixel 60
Рисунок 3. Начиная с версии 1.9.0, Compose сопоставляет задержки прокрутки представлений.

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

Чтобы проверить результаты производительности и запустить тесты локально:

  1. Чтобы ознакомиться с исходным кодом, следуйте руководству по AndroidX.
  2. Следуйте инструкциям в файле README исходного кода Hero Benchmarks, чтобы создать тестовые и целевые APK-файлы (pokedex-macrobenchmark и pokedex-macrobenchmark-target), установить их на тестовое устройство и запустить наборы PokedexStartupBenchmark и PokedexScrollBenchmark с помощью adb или Android Studio.

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