Бенчмарк реальных Android-проектов на современных MacBook

Если вы интересуетесь разработкой под Android, то, скорее всего, слышали о Telegram-канале «Android Broadcast» с ежедневными новостями для Android-разработчиков и одноимённом YouTube-канале. Этот пост — текстовая версия видео.

Выбор техники — всегда непростая задача, а новые процессоры Apple смогли здорово встряхнуть рынок и усложнить выбор. Какую модель MacBook выбрать, и насколько одна лучше другой, понять сложно. Искать качественные тесты — то ещё развлечение.

В этой статье я сделаю правильное сравнение скорости сборки реальных Android-проектов на различных MacBook, а также порекомендую, какой из них стоит выбрать в начале 2022 года.

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

Для сравнения я выбрал последние MacBook Pro на Intel, а также современные MacBook на основе M1. Также добавил свой старый iMac 27″ Late 2015, чтобы наглядно увидеть прогресс от обновления.

  1. iMac 27″ Late 2015 Intel Core i7 6700K | 24 GM RAM

  2. MacBook Pro 16″ 2019 i7 9750H 6 CPU/12 Потоков | 16 GB RAM

  3. MacBook Pro 16″ 2019 i9 9880H 8 CPU/16 Потоков | 32 GB RAM

  4. MacBook Air 2020 M1 | 16 GB RAM

  5. MacBook Pro 14″ 2021 M1 Pro 8 CPU | 16 GB RAM

  6. MacBook Pro 14″ 2021 M1 Pro 10 CPU | 32 GB RAM

  7. MacBook Pro 16″ 2021 M1 Pro 10 CPU | 32 GB RAM

  8. MacBook Pro 16″ M1 Max | 32 GB RAM

Методология проведения тестов

Обеспечить полностью равные условия для всех компьютеров непросто, но я постарался создать идеальные условия:

  • Использовать JDK 11 и обновить ее до последней ревизии.

  • Использовать Gradle 7.3.3 для сборки проекта.

  • Отключить внешние дисплеи.

  • Подключить компьютер к питанию.

  • По-максимуму закрыть все программы, включая фоновые.

  • Закрыть Android Studio!

  • Включить производительный режим в настройках (если такой имеется).

  • Ноутбук ставить на плоскую твердую поверхность, чтобы не было проблем с забором воздуха и охлаждением.

  • Не трогать компьютер во время теста.

  • Отключить индексацию Spotlight или добавить папку с проектами для тестов в исключения.

Если вы знаете какие-то дополнительные условия, которые стоит соблюдать при проведении бенчмарка, буду рад прочитать их в комментариях к статье.

Тесты проводились с помощью утилиты Gradle Profiler в режиме benchmark, предназначенной для замера скорости сборки проектов. В результат записывалось среднее значение по десяти тестовым прогонам — после двух сборок для прогрева, которые не шли в зачёт.

Для каждого проекта был создан сценарий для запуска теста (файл performance.scenarios), а все проекты собраны в отдельном репозитории.

Тесты

Конкретные цифры приведены в таблице ниже.

TiVi 0.6.3

TiVi Github

TiVi — небольшой проект для отслеживания прогресса TV-шоу на основе trakt.tv.

Стек технологий: Jetpack Compose, kapt, Kotlin, Dagger, Hilt, Android Arhitecture Components, Firebase, Google Services и др.
Количество строк Kotlin-кода: 15 422
Подключенные Gradle-плагины: Android, Kotlin, Crashlytics, Hilt, Google Services, Kotlin Extentions, Spotless, Gradle Depedency Updates
Количество модулей: 25

Проект небольшой, но даже тут Intel значительно отстал от M1. M1 Pro/Max вырвался вперёд всего на одну секунду от M1. Из результатов тестов понятно одно: даже на таком маленьком проекте уже видно, что Apple Sillicone значительно быстрее Intel Core 9 поколения.

Бенчмарк реальных Android-проектов на современных MacBook
Скорость сборки TiVi 0.6.3

ExoPlayer r.2.16.1

ExoPlayer — популярный медиаплеер, который используется на уровне Android-приложения.

Количество строк Java-кода: 224 638
Количество модулей: 35

Следующий проект демонстрирует преимущество множества производительных ядер в M1 Pro/Max. Получился существенный отрыв в результате: M1 справился за 39,4 секунд, а M1 Pro/Max с 10 ядрами — за 28 секунд. Лучший Intel справился за 43,9 секунд.

Скорость сборки ExoPlayer r2.16.1
Скорость сборки ExoPlayer r2.16.1

Focus 95.2.0

Focus — специальная приватная и безопасная версия Web-браузера Firefox.

Количество строк Kotlin-кода: 19 066
Количество строк XML: ~30 тыс
Количество модулей: 3

Бенчмарк Focus демонстрирует уже выявленные закономерности, но показывает, что восьмиядерная версия M1 Pro не отстаёт значительно от полной версии M1 Pro или M1 Max.

Скорость сборки Firefox Focus 95.2.0
Скорость сборки Firefox Focus 95.2.0

Firefox 95.2.0

Firefox — полная версия Web-браузера Firefox.

Количество строк Kotlin-кода: ~97 тыс
Количество строк XML: ~100 тыс
Количество модулей: 4

Скорость компиляции Kotlin-кода на порядок ниже, чем Java. Тем не менее, процессоры Apple показывают закономерное ускорение компиляции. Вот только разница между M1 Pro с 8 и 10 ядрами CPU всё так же незаметна. Как так?

Скорость сборки Firefox 95.2.0
Скорость сборки Firefox 95.2.0

Signal 5.28.8

Signal — популярный мессенджер, альтернатива Telegram.

Количество строк Java-кода: 248 305
Количество строк Kotlin-кода: 42 476
Количество строк XML: ~270 тыс
Количество модулей: 13

Наконец-то видно, что 8 ядер M1 Pro медленнее, чем полная версия процессора. В остальном — лишь подтверждение выводов, полученных в предыдущих проектах.

Скорость сборки Signal Android 5.28.8
Скорость сборки Signal Android 5.28.8

Telegram 8.2.1

Telegram Android GitHub — популярный мессенджер. Проект написан довольно специфично: нет Kotlin, весь UI в Java-коде, нет генерации кода с помощью apt или kapt, используется NDK.

Количество строк Java-кода: 700 098
Количество строк С-кода: 988 320
Количество строк XML: ~40 тыс
Количество модулей: 1

Telegram Android — самый крупный из тестируемых проектов и наглядно показывает разницу между процессорами. Бенчмарк удивил: это единственный из тестируемых проектов, в которых i7 и i9 в MacBook Pro 2019 года смогли собрать проект быстрее, чем Apple M1. Конечно же, мне стало интересно, почему так вышло, и я полез разбираться.

Скорость сборки Telegram Android 8.2.1
Скорость сборки Telegram Android 8.2.1

Причина оказалась в CMake и всего тулинга для компиляции нативного кода, которого в Telegram достаточно. На Apple M1 компиляции запускается c использование Rosetta 2 — в Android NDK на момент написания статьи его ещё не успели перевести на поддержку Apple Silicone. Хотя CMake, начиная с версии 3.19, и другие инструменты эту поддержку уже имеют. Подробности здесь.

Получается, в будущем мы получим значительный буст: как минимум Apple M1 имеет шансы обогнать i7 и, чем чёрт не шутит, даже i9. Так что ждём, когда допилят тулинг.


Результаты сборки приложений. Меньше — лучше
Результаты сборки приложений. Меньше — лучше

Выводы по итогам тестов

Intel Core пока рано списывать со счёта, если в проекте много нативного кода. Во всех остальных сценариях смысла в процессорах Intel нет: они проигрывают даже самому базовому Apple M1. Со временем тулинг допилят, и преимущества процессоров Apple станет ещё очевиднее.

MacBook Air на M1 подойдет для большинства мобильных разработчиков. Только советую брать вариант с 16 ГБ оперативной памяти. С ним можно разрабатывать под Android и iOS, а также попробовать мультиплатформенную разработку (Kotlin Multiplatform, Flutter). Большое преимущество — отсутствие кулеров, что делает его тихим, но порой горячим (при очень долгой сборке).

Если вы работаете с большими проектами и хотите получить максимальные возможности либо вам нужно больше 16 ГБ оперативной памяти, тогда рекомендую обратить внимание на MacBook Pro с процессором M1 Pro в вариации на 10 ядер. 16-дюймовая версия будет быстрее и тише.

M1 Max и M1 Pro не показал существенной разницы в результатах. Max-версию стоит брать для разработки, только если нужно 64 ГБ памяти. Покупать его нужно только в корпусе 16 дюймов: в 14-дюймовой версии стоят меньшие частоты у GPU, а процессор начнёт быстрее тротлить из-за нагрева и сильнее шуметь. Не стоит забывать, что и размер батареи в 14-дюймовой версии меньше: время автономной работы даже без сложных задач будет меньше по сравнению с 16-дюймовой версией.

Сравнение с Ryzen и Intel 12 поколения

Я хочу продолжить сравнение и оценить скорость компиляции на современных процессорах от AMD и Intel, но пока возможности это сделать нет. Буду рад, если вы присоединитесь к тесту, заполнив форму. Я уже успел прогнать тесты на Ryzen 5900X, и его скорость впечатлила, но это уже тема отдельной статьи…

 

Источник

Читайте также