120fps — честота от 120 кадъра в секунда, достъпна на дисплеи с честота на опресняване 120 Hz, където всеки кадър отнема 8,3 ms. Според Apple WWDC 2023 Session, ProMotion автоматично превключва честотата от 24 до 120 Hz за баланс на плавността и консумацията на енергия. 8,3 ms — това е два пъти по-малко от стандартния бюджет, което изисква сериозна оптимизация на рендирането.
Основни точки
120fps — удвоена честота на кадрите спрямо стандарта, при която дисплеят опреснява изображението 120 пъти в секунда. Всеки кадър има времеви бюджет от 8,33 ms — наполовина по-малко от 60fps. Това означава, че GPU и CPU трябва да обработват графиката два пъти по-бързо, а всички алгоритми, работещи за 16,7 ms при 60fps, се вместват при 120fps само при условие на двойно по-голяма ефективност.
Първото мобилно устройство с 120 Hz дисплей беше Razer Phone (2017) с IGZO панел на Sharp. Apple въведе 120 Hz в iPad Pro (2017) под името ProMotion, а в iPhone — едва през 2021 г. в iPhone 13 Pro. На Android 120 Hz стана масово от 2020 г.: Samsung Galaxy S20, OnePlus 8 Pro, Xiaomi Mi 10. Днес 90–120 Hz е стандарт за флагмански устройства, а LTPO технологията позволява динамична промяна на честотата.
Възприятието на 120fps от потребителя се различава от 60fps не толкова по липсата на заглъхвания, колкото по усещането за незабавен отговор — курсорът, скролването, анимациите следват пръста с минимално закъснение. Това усещане често се описва като „течен" или „маслен" екран. След използване на 120 Hz, връщането към 60 Hz субективно се възприема като забавяне, дори ако обективно няма пропуснати кадри.
120 Hz дисплей физически опреснява пикселите 120 пъти в секунда, изпращайки сигнал по шината MIPI DSI/DPI с двойна честота. Всеки пиксел получава нова стойност на яркост на всеки 8,3 ms. За OLED панелите това означава, че времето на емисия на всеки субпиксел се съкращава, което изисква по-ярка подсветка за запазване на същата яркост на изображението.
LTPO (Low-Temperature Polycrystalline Oxide) — технология за производство на OLED дисплеи, която съчетава LTPS (висока скорост на превключване) и IGZO (ниска консумация на енергия в статично състояние). LTPO позволява на дисплея динамично да променя честотата на опресняване от 1 до 120 Hz без допълнителни енергийни разходи. В режим Always-On Display честотата пада до 1 Hz, при скролване — се повишава до 120 Hz. Това дава икономия до 30% енергия в сравнение с дисплеи, работещи постоянно на 120 Hz.
Frame pacing — равномерност на интервалите между кадрите, най-важният параметър при 120fps. Ако при 60fps разлика от 2–3 ms между кадрите е незабележима, при 120fps същата абсолютна разлика съставлява 25% от продължителността на кадъра и се възприема като заглъхване. За плавни 120fps всеки кадър трябва да се вмества в 8,3 ms ±1 ms. Инструменти като FrameRate в Xcode Instruments показват не само средния FPS, но и хистограма на интервалите за оценка на frame pacing.
// iOS — откриване на 120 Hz дисплей чрез CADisplayLink
func checkDisplayRefreshRate() {
let link = CADisplayLink(target: self,
selector: #selector(step))
if let preferredRate = link?.preferredFrameRateRange {
print("Макс. частота: \(preferredRate.maximum) Гц")
}
}
ProMotion — търговска марка на Apple за дисплеи с адаптивна честота на опресняване до 120 Hz. За първи път представен в iPad Pro 10,5 (2017), след това се появи в iPhone 13 Pro (2021) и MacBook Pro (2021). ProMotion не е просто 120 Hz — това е интелигентно управление на честотата: системата анализира типа съдържание и превключва честотата за оптимален баланс между производителност и консумация на енергия.
ProMotion поддържа четири режима: 24 Hz за статично съдържание и видео 24fps, 30 Hz за видео 30fps, 60 Hz за UI навигация и 120 Hz за скролване и игри. Превключването между режимите става за един кадър (8,3 ms) и е незабележимо за потребителя. Разработчикът може да повлияе на избора на честота чрез preferredFrameRateRange в CADisplayLink, но крайното решение се взема от системата на база анализ на съдържанието.
Apple предоставя API за работа с ProMotion от iOS 15. CADisplayLink.preferredFrameRateRange позволява задаване на предпочитан честотен диапазон. UIScene.ActivationConditions може да повлияе на честотата при преходи между сцени. За Metal рендиране CAMetalLayer.displaySyncEnabled трябва да бъде true за синхронизация с ProMotion. Ако приложението не е оптимизирано за 120fps, iOS автоматично го превключва на 60 Hz, което се вижда в 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 ms при 60fps, сега трябва да се изпълняват за 8,3 ms. Това засяга всички етапи на конвейера: подготовка на CPU, рендиране на GPU и системни извиквания.
При 120fps броят на draw calls на кадър трябва да бъде два пъти по-малък, отколкото при 60fps, за да се запази същото натоварване на GPU. Ако при 60fps са разрешени 400 draw calls, то при 120fps — не повече от 200. Използвайте текстурни атласи, обединяване на мрежи и GPU инстанциране за намаляване на извикванията за рендиране. На Metal използвайте Indirect Command Buffers, на Vulkan — Secondary Command Buffers за паралелно записване на команди.
Шейдъри — друг критичен фактор. Сложните пикселни шейдъри с множество текстурни проби и математически операции могат лесно да надхвърлят бюджета от 8,3 ms. Използвайте шейдъри с ниска точност (half вместо float), намалете броя на инструкциите и текстурните проби. На мобилни GPU (Apple A17, Snapdragon 8 Gen 3) всяка текстурна проба отнема 2–4 цикъла, а при 120fps това може да се превърне в тясно място.
При 120fps main thread трябва да подготви кадъра за 4–5 ms, за да остави време на GPU за рендиране. Всяка синхронна операция на main thread — четене от база данни, парсване на JSON, зареждане на изображения — създава заглъхване. Преместете всички тежки операции във фонові нишки, използвайте асинхронни API и пулове от нишки. В iOS DispatchQueue с qualityOfService .userInteractive трябва да бъде запазена само за критичен код за рендиране.
| Компонент | Бюджет 120fps | Бюджет 60fps |
|---|---|---|
| CPU (main thread) | 4 ms | 8 ms |
| GPU рендиране | 4 ms | 8 ms |
| Композит | 0,3 ms | 0,7 ms |
| VSync изчакване | 0–2 ms | 0–5 ms |
Сравнение на 120fps и 60fps не се свежда до удвояване на плавността. Разликата се възприема различно в зависимост от типа съдържание. За скролване и UI анимации 120fps дава субективно по-„отзивчив" интерфейс. За игри предимството на 120fps се проявява в намаляване на замъгляването при движение и по-точно проследяване на бързи обекти.
Консумация на енергия — основният компромис. 120fps консумира 30–50% повече енергия от 60fps при същата яркост на дисплея. Това означава, че на батерия от 4000 mAh един час игра на 120fps разрежда батерията приблизително 25–30% по-бързо. LTPO дисплеите частично решават проблема, намалявайки честотата в статични сцени до 1 Hz, но при активна употреба (скролване, игри) честотата остава на максимум.
Изборът между 60fps и 120fps зависи от приоритетите на разработчика. За социални мрежи, месинджъри и новинарски приложения 120fps не дава значително предимство — основното взаимодействие (четене, въвеждане на текст) не печели от супер-плавност. За игри, карти, графични редактори и приложения с интензивна анимация 120fps се превръща в конкурентно предимство и маркер за качество.
Тестването на 120fps изисква специален подход: стандартните 60fps метрики не показват проблеми с frame pacing при 120 Hz. Използвайте високоскоростна камера (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 ms. В Android включете Show refresh rate в Developer Options.
Дисплеят опреснява пикселите два пъти по-често, GPU извършва двойно повече операции по рендиране, CPU обработва двойно повече кадри. Всяка операция консумира енергия. LTPO дисплеите намаляват честотата в статично състояние, но при активна употреба консумацията на енергия нараства пропорционално на честотата.
Да. От Android 11 нататък системата поддържа различни честоти на опресняване. Разработчикът може да поиска 120 Hz чрез WindowManager.setPreferredRefreshRate. Но не всички устройства стабилно поддържат 120fps — необходима е оптимизация на GPU рендирането.
В сляп тест повечето потребители забелязват разликата при скролване и анимации. Въпреки това за обикновена употреба (социални мрежи, видео, месинджъри) разликата е субективно малка. След свикване с 120 Hz, връщането към 60 Hz се усеща като забавяне.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също