120fps — a frame rate of 120 frames per second available on displays with 120 Hz refresh rate, where each frame takes 8.3 ms. According to Apple WWDC 2023 Session, ProMotion automatically switches frequency from 24 to 120 Hz to balance smoothness and power consumption. 8.3 ms is half the standard budget, requiring serious rendering optimization.
Key Takeaways
120fps is double the standard frame rate, where the display updates the image 120 times per second. Each frame has a time budget of 8.33 ms — half that of 60fps. This means the GPU and CPU must process graphics twice as fast, and all algorithms that work within 16.7 ms at 60fps only fit at 120fps if they are twice as efficient.
The first mobile device with a 120 Hz display was the Razer Phone (2017) with Sharp’s IGZO panel. Apple introduced 120 Hz in the iPad Pro (2017) under the name ProMotion, and in iPhones only in 2021 with the iPhone 13 Pro. On Android, 120 Hz became mainstream starting in 2020: Samsung Galaxy S20, OnePlus 8 Pro, Xiaomi Mi 10. Today, 90–120 Hz is the standard for flagship devices, and LTPO technology enables dynamic frequency switching.
User perception of 120fps differs from 60fps not so much by the absence of stutter, but by the feeling of instant response — the cursor, scrolling, and animations follow the finger with minimal latency. This feeling is often described as a “liquid” or “oily” screen. After using 120 Hz, returning to 60 Hz subjectively feels like lag, even if there are no objective frame drops.
A 120 Hz display physically updates pixels 120 times per second, sending a signal over the MIPI DSI/DPI bus at double frequency. Each pixel receives a new brightness value every 8.3 ms. For OLED panels, this means that the emission time of each subpixel is reduced, requiring brighter backlight to maintain the same image brightness.
LTPO (Low-Temperature Polycrystalline Oxide) is an OLED display manufacturing technology that combines LTPS (high switching speed) and IGZO (low static power consumption). LTPO allows the display to dynamically change its refresh rate from 1 to 120 Hz without additional power cost. In Always-On Display mode, the frequency drops to 1 Hz; during scrolling, it rises to 120 Hz. This provides energy savings of up to 30% compared to displays constantly running at 120 Hz.
Frame pacing — the uniformity of intervals between frames, is the most important parameter at 120fps. While at 60fps a 2–3 ms difference between frames is unnoticeable, at 120fps the same absolute difference accounts for 25% of frame duration and is perceived as stutter. For smooth 120fps, each frame must fit within 8.3 ms ±1 ms. Tools like FrameRate in Xcode Instruments show not only the average FPS but also a histogram of intervals for evaluating frame pacing.
// iOS — detecting 120 Hz display via CADisplayLink
func checkDisplayRefreshRate() {
let link = CADisplayLink(target: self,
selector: #selector(step))
if let preferredRate = link?.preferredFrameRateRange {
print("Max frequency: \("preferredRate.maximum) Hz")
}
}
ProMotion is Apple’s trademark for displays with adaptive refresh rates up to 120 Hz. First introduced in the iPad Pro 10.5 (2017), it later appeared in the iPhone 13 Pro (2021) and MacBook Pro (2021). ProMotion is not just 120 Hz — it is intelligent frequency management: the system analyzes the type of content and switches the frequency for the optimal balance of performance and power consumption.
ProMotion supports four modes: 24 Hz for static content and 24fps video, 30 Hz for 30fps video, 60 Hz for UI navigation, and 120 Hz for scrolling and gaming. Switching between modes happens within a single frame (8.3 ms) and is imperceptible to the user. Developers can influence frequency selection via preferredFrameRateRange in CADisplayLink, but the final decision is made by the system based on content analysis.
Apple provides APIs for working with ProMotion starting from iOS 15. CADisplayLink.preferredFrameRateRange allows setting a preferred frequency range. UIScene.ActivationConditions can affect the frequency when transitioning between scenes. For Metal rendering, CAMetalLayer.displaySyncEnabled must be true for synchronization with ProMotion. If an app is not optimized for 120fps, iOS automatically switches it to 60 Hz, which can be seen in Xcode under the GPU Report section.
// iOS — requesting 120fps for gaming mode
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)
Optimization for 120fps is not just about doubling code speed, but rethinking the rendering architecture. Operations that fit within 16.7 ms at 60fps must now complete in 8.3 ms. This affects all stages of the pipeline: CPU preparation, GPU rendering, and system calls.
At 120fps, the number of draw calls per frame must be half that at 60fps to maintain the same GPU load. If 400 draw calls are acceptable at 60fps, then at 120fps no more than 200 are allowed. Use texture atlases, mesh merging, and GPU instancing to reduce draw calls. On Metal, use Indirect Command Buffers; on Vulkan, use Secondary Command Buffers for parallel command recording.
Shaders — another critical factor. Complex pixel shaders with multiple texture lookups and mathematical operations can easily exceed the 8.3 ms budget. Use low-precision shaders (half instead of float), reduce the number of instructions and texture samples. On mobile GPUs (Apple A17, Snapdragon 8 Gen 3), each texture lookup takes 2–4 cycles, and at 120fps this can become a bottleneck.
At 120fps, the main thread must prepare a frame in 4–5 ms to leave time for GPU rendering. Any synchronous operation on the main thread — reading from a database, JSON parsing, image loading — creates stutter. Move all heavy operations to background threads, use asynchronous APIs and thread pools. In iOS, DispatchQueue with qualityOfService .userInteractive should be reserved only for critical rendering code.
| Component | 120fps budget | 60fps budget |
|---|---|---|
| CPU (main thread) | 4 ms | 8 ms |
| GPU rendering | 4 ms | 8 ms |
| Compositing | 0.3 ms | 0.7 ms |
| VSync wait | 0–2 ms | 0–5 ms |
Comparing 120fps and 60fps is not just about doubling smoothness. The difference is perceived differently depending on the type of content. For scrolling and UI animations, 120fps provides a subjectively more “responsive” interface. For gaming, the advantage of 120fps is evident in reduced motion blur and more accurate tracking of fast objects.
Power consumption — the main trade-off. 120fps consumes 30–50% more power than 60fps at the same display brightness. This means that on a 4000 mAh battery, an hour of gaming at 120fps drains the battery about 25–30% faster. LTPO displays partially solve the problem by reducing the frequency in static scenes to 1 Hz, but during active use (scrolling, gaming) the frequency stays at maximum.
The choice between 60fps and 120fps depends on developer priorities. For social networks, messengers, and news apps, 120fps does not provide a significant advantage — the main interaction (reading, text input) does not benefit from ultra-smoothness. For games, maps, graphics editors, and apps with intensive animation, 120fps becomes a competitive advantage and a quality marker.
Testing 120fps requires a special approach: standard 60fps metrics do not reveal frame pacing issues at 120 Hz. Use a high-speed camera (120+ fps) to record actual screen behavior or built-in platform tools — Xcode Metal Capture for iOS and AGI (Android GPU Inspector) for Android. These tools show the exact time of each frame, including VSync wait, and help identify micro-stutters.
Frequently Asked Questions
Not always. 120fps requires twice the energy and computing resources. For static content and simple UIs, 60fps is sufficient. The advantage of 120fps is noticeable in dynamic scenes: scrolling, gaming, transition animations.
Use Xcode Instruments (Core Animation template) or Android Studio Profiler. On iOS, check CADisplayLink.timestamp — the interval between calls should be around 8.3 ms. On Android, enable Show refresh rate in Developer Options.
The display updates pixels twice as often, the GPU performs twice the rendering operations, and the CPU processes twice as many frames. Each operation consumes energy. LTPO displays reduce frequency in static scenes, but during active use, power consumption increases proportionally to the frequency.
Yes. Starting from Android 11, the system supports different refresh rates. Developers can request 120 Hz via WindowManager.setPreferredRefreshRate. However, not all devices can stably maintain 120fps — GPU rendering optimization is necessary.
In a blind test, most users do notice the difference during scrolling and animations. However, for everyday use (social media, video, messengers), the difference is subjectively small. After getting used to 120 Hz, returning to 60 Hz feels sluggish.
Summary
We will develop a mobile application turnkey
IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.
Read also