120fps — частота 120 кадров в секунду, доступная на дисплеях с герцовкой 120 Гц, где каждый кадр занимает 8.3 мс. По данным Apple WWDC 2023 Session, ProMotion автоматически переключает частоту от 24 до 120 Гц для баланса плавности и энергопотребления. 8.3 мс — это в два раза меньше стандартного бюджета, что требует серьёзной оптимизации рендеринга.
Главное
120fps — удвоенная относительно стандарта частота кадров, при которой дисплей обновляет изображение 120 раз в секунду. Каждый кадр имеет бюджет времени 8.33 мс — вдвое меньше, чем при 60fps. Это означает, что GPU и CPU должны обрабатывать графику в два раза быстрее, а все алгоритмы, работающие за 16.7 мс, при 120fps укладываются только при условии вдвое большей эффективности.
Первым мобильным устройством с 120 Гц дисплеем стал Razer Phone (2017) с IGZO-панелью Sharp. Apple внедрила 120 Гц в iPad Pro (2017) под названием ProMotion, а в iPhone — только в 2021 году в iPhone 13 Pro. На Android 120 Гц стали массовыми с 2020 года: Samsung Galaxy S20, OnePlus 8 Pro, Xiaomi Mi 10. Сегодня 90–120 Гц — стандарт для флагманских устройств, а LTPO-технология позволяет динамически менять частоту.
Восприятие 120fps пользователем отличается от 60fps не столько отсутствием рывков, сколько ощущением мгновенного отклика — курсор, скроллинг, анимации следуют за пальцем с минимальной задержкой. Это ощущение часто описывают как «жидкий» или «маслянистый» экран. После использования 120 Гц возврат к 60 Гц субъективно воспринимается как подтормаживание, даже если объективных пропусков кадров нет.
120 Гц дисплей физически обновляет пиксели 120 раз в секунду, отправляя сигнал по шине MIPI DSI/DPI с удвоенной частотой. Каждый пиксель получает новое значение яркости каждые 8.3 мс. Для OLED-панелей это означает, что время эмиссии каждого субпикселя сокращается, что требует более яркой подсветки для сохранения той же яркости изображения.
LTPO (Low-Temperature Polycrystalline Oxide) — технология производства OLED-дисплеев, объединяющая LTPS (высокая скорость переключения) и IGZO (низкое энергопотребление в статике). LTPO позволяет дисплею динамически менять частоту обновления от 1 до 120 Гц без дополнительных затрат энергии. В режиме Always-On Display частота падает до 1 Гц, при скроллинге — поднимается до 120 Гц. Это даёт экономию до 30% энергии по сравнению с дисплеями, работающими постоянно на 120 Гц.
Frame pacing — равномерность интервалов между кадрами, важнейший параметр при 120fps. Если при 60fps разница между кадрами в 2–3 мс незаметна, то при 120fps та же абсолютная разница составляет 25% от длительности кадра и воспринимается как статтер. Для плавного 120fps каждый кадр должен укладываться в 8.3 мс ±1 мс. Инструменты вроде FrameRate в Xcode Instruments показывают не только средний FPS, но и гистограмму интервалов для оценки frame pacing.
// iOS — обнаружение 120 Гц дисплея через CADisplayLink
func checkDisplayRefreshRate() {
let link = CADisplayLink(target: self,
selector: #selector(step))
if let preferredRate = link?.preferredFrameRateRange {
print("Макс. частота: \(preferredRate.maximum) Гц")
}
}
ProMotion — торговая марка Apple для дисплеев с адаптивной частотой обновления до 120 Гц. Впервые представлена в iPad Pro 10.5 (2017), затем появилась в iPhone 13 Pro (2021) и MacBook Pro (2021). ProMotion не просто 120 Гц — это интеллектуальное управление частотой: система анализирует тип контента и переключает частоту для оптимального баланса производительности и энергопотребления.
ProMotion поддерживает четыре режима: 24 Гц для статичного контента и видео 24fps, 30 Гц для видео 30fps, 60 Гц для UI-навигации и 120 Гц для скроллинга и игр. Переключение между режимами происходит за один кадр (8.3 мс) и незаметно для пользователя. Разработчик может повлиять на выбор частоты через preferredFrameRateRange в CADisplayLink, но финальное решение принимает система на основе анализа контента.
Apple предоставляет API для работы с ProMotion начиная с iOS 15. CADisplayLink.preferredFrameRateRange позволяет задать предпочтительный диапазон частот. UIScene.ActivationConditions может влиять на частоту при переходе между сценами. Для Metal-рендеринга CAMetalLayer.displaySyncEnabled должен быть true для синхронизации с ProMotion. Если приложение не оптимизировано под 120fps, iOS автоматически переключает его на 60 Гц, что видно в Xcode в разделе GPU Report.
// iOS — запрос 120fps для игрового режима
let displayLink = CADisplayLink(
target: self,
selector: #selector(gameLoop)
)
if #available(iOS 15.0, *) {
displayLink?.preferredFrameRateRange =
CAFrameRateRange(minimum: 80,
maximum: 120,
preferred: 120)
}
displayLink?.add(to: .current,
forMode: .default)
Оптимизация под 120fps — это не просто ускорение кода вдвое, а пересмотр архитектуры рендеринга. Операции, которые укладывались в 16.7 мс при 60fps, теперь должны выполняться за 8.3 мс. Это затрагивает все этапы конвейера: CPU-подготовку, GPU-рендеринг и системные вызовы.
При 120fps количество draw calls на кадр должно быть вдвое меньше, чем при 60fps, для сохранения той же загрузки GPU. Если при 60fps допустимо 400 draw calls, то при 120fps — не более 200. Используйте текстурные атласы, объединение мешей и GPU-инстансинг для уменьшения вызовов отрисовки. На Metal используйте Indirect Command Buffers, на Vulkan — Secondary Command Buffers для параллельной записи команд.
Shaders — ещё один критический фактор. Сложные пиксельные шейдеры с множеством текстурных выборок и математических операций могут легко превысить бюджет 8.3 мс. Используйте шейдеры с низкой точностью (half вместо float), уменьшайте количество инструкций и текстурных сэмплов. На мобильных GPU (Apple A17, Snapdragon 8 Gen 3) каждая текстурная выборка занимает 2–4 цикла, и при 120fps это может стать узким местом.
При 120fps main thread должен подготовить кадр за 4–5 мс, чтобы оставить время GPU на рендеринг. Любая синхронная операция на main thread — чтение из базы данных, парсинг JSON, загрузка изображений — создаёт статтер. Выносите все тяжёлые операции в фоновые потоки, используйте асинхронные API и пулы потоков. В iOS DispatchQueue с qualityOfService .userInteractive должен быть зарезервирован только для критичного кода рендеринга.
| Компонент | 120fps бюджет | 60fps бюджет |
|---|---|---|
| CPU (main thread) | 4 мс | 8 мс |
| GPU рендеринг | 4 мс | 8 мс |
| Композит | 0.3 мс | 0.7 мс |
| VSync ожидание | 0–2 мс | 0–5 мс |
Сравнение 120fps и 60fps не сводится к удвоению плавности. Разница воспринимается по-разному в зависимости от типа контента. Для скроллинга и анимаций UI 120fps даёт субъективно более «отзывчивый» интерфейс. Для игр преимущество 120fps проявляется в снижении motion blur и более точном трекинге быстрых объектов.
Энергопотребление — главный компромисс. 120fps потребляет на 30–50% больше энергии, чем 60fps, при той же яркости дисплея. Это означает, что на аккумуляторе 4000 мАч час игры в 120fps разряжает батарею примерно на 25–30% быстрее. LTPO-дисплеи частично решают проблему, снижая частоту в статичных сценах до 1 Гц, но при активном использовании (скроллинг, игры) частота остаётся на максимуме.
Выбор между 60fps и 120fps зависит от приоритетов разработчика. Для социальных сетей, мессенджеров и новостных приложений 120fps не даёт значимого преимущества — основное взаимодействие (чтение, ввод текста) не выигрывает от сверхплавности. Для игр, карт, графических редакторов и приложений с интенсивной анимацией 120fps становится конкурентным преимуществом и маркером качества.
Тестирование 120fps требует специального подхода: стандартные 60fps-метрики не показывают проблемы frame pacing при 120 Гц. Используйте high-speed камеру (120+ fps) для записи реального поведения экрана или встроенные средства платформы — Xcode Metal Capture для iOS и AGI (Android GPU Inspector) для Android. Эти инструменты показывают точное время каждого кадра, включая ожидание VSync, и помогают выявить микростаттеры.
Часто задаваемые вопросы
Не всегда. 120fps требует вдвое больше энергии и вычислительных ресурсов. Для статичного контента и простых UI 60fps достаточно. Преимущество 120fps заметно в динамичных сценах: скроллинг, игры, анимации переходов.
Используйте Xcode Instruments (шаблон Core Animation) или Android Studio Profiler. В iOS проверьте CADisplayLink.timestamp — интервал между вызовами должен быть около 8.3 мс. В Android включите Show refresh rate в Developer Options.
Дисплей обновляет пиксели в два раза чаще, GPU выполняет вдвое больше операций рендеринга, CPU обрабатывает вдвое больше кадров. Каждая операция потребляет энергию. LTPO-дисплеи снижают частоту в статике, но при активном использовании энергопотребление растёт пропорционально частоте.
Да. Начиная с Android 11, система поддерживает разные частоты обновления. Разработчик может запросить 120 Гц через WindowManager.setPreferredRefreshRate. Однако не все устройства стабильно держат 120fps — необходима оптимизация GPU-рендеринга.
В слепом тесте большинство пользователей замечают разницу при скроллинге и анимациях. Однако для обычного использования (соцсети, видео, мессенджеры) разница субъективно мала. После привыкания к 120 Гц возврат к 60 Гц ощущается как подтормаживание.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также