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 се при 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 за паралелно писање команди.
Shader-и — још један критични фактор. Сложени пикселски шейдери са вишеструким узорковањем текстура и математичким операцијама могу лако да пређу буџет од 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође