Version note — reviewed October 13, 2026: This article was written in 2019. Its device opinions, 90 Hz “sweet spot,” and buying outlook are historical, not current purchase advice. The technical explanations are corrected below, with Android 11/API 30 and Android 15 QPR1 updates. The old trace crops lack complete capture conditions and are not new device measurements.
High-refresh-rate screens have been common on PCs for years, but they’ve only recently made their way to Android. While the Razer Phone introduced a 120Hz screen in 2017 to a quiet reception, I believe the 90Hz screens on the Nubia Red Magic 3 and OnePlus 7 Pro represent the current “sweet spot” for Android. They offer a tangible, immediate boost to the user experience. If you’ve never used a high-refresh-rate mobile screen, I highly recommend visiting an Apple Store to try out the 120Hz ProMotion display on the iPad Pro.
The hardware timeline can be checked against vendor records: the original Razer Phone launched with 120 Hz in 2017, followed by the Razer Phone 2 in 2018. OnePlus 7 Pro and REDMAGIC 3 are the 2019 90 Hz examples discussed here. iPad Pro introduced up-to-120-Hz ProMotion in 2017. Specifications alone do not establish frame rates in a particular workload.
Terminology Explained
What is Screen Refresh Rate?
Refresh rate describes how frequently the display updates, measured in Hz. A fixed 60 Hz mode provides approximately 60 refresh opportunities per second; 90 Hz provides 90. The same image can be shown repeatedly, so a display refresh does not imply a newly generated app frame.
Hardware limits the available modes, while system policy selects how they are used. A phone advertised as “up to 120 Hz” need not run at 120 Hz all the time, and dynamic refresh cannot be described by one permanently fixed interval.
What is FPS?
FPS means Frames Per Second. State whether the measurement counts frames generated, submitted, or actually presented; these can differ. Frame rate depends on hardware, software, workload, and scheduling, not software alone.
An average of 90 FPS does not establish uniform frame intervals or low input-to-display latency. A static page need not continually generate new frames.
What is Vsync?
Vsync means Vertical Synchronization. It coordinates application rendering, SurfaceFlinger composition, and display updates; it does not automatically make app FPS equal the refresh rate.
For a fixed mode, the interval is 1000 / refresh rate:
| Refresh rate | Refresh interval |
|---|---|
| 60 Hz | About 16.67 ms |
| 90 Hz | About 11.11 ms |
| 120 Hz | About 8.33 ms |
These are refresh intervals, not guarantees that any CPU drawing task finishing below them avoids jank. App, GPU, composition, and display work can overlap across frames. Start times, phase offsets, queues, and deadlines all matter. See AOSP Vsync for app/composition timing relative to hardware Vsync.
What is the Input Scanning Cycle?
Touch scanning is hardware sampling; reading, dispatching, and consuming the events happen later. Sampling rate varies by device and mode, so the old “about 8 ms” assumption is not universal. An 8 ms period corresponds to about 125 Hz, not exactly 120 Hz.
Even with perfectly regular 8 ms sampling, phase alignment means a 16.67 ms window can contain two or three samples, while an 11.11 ms window can contain one or two. That difference alone does not prove uneven motion: timestamps, batching, resampling, and consumption matter.
For example, Android 9 InputTransport includes batching and touch resampling. Android 16 BatchedInputEventReceiver supports both CALLBACK_INPUT batching and direct consumption when batching is disabled. Not all input waits for Vsync.
The 90Hz User Experience
For scrolling and animation, a 90 Hz display presenting evenly paced 90 FPS content can provide finer updates than 60 FPS under comparable conditions. But the rates need not always be equal: 30 FPS on a 60 Hz display can have a stable two-refresh cadence.
Fixed 60 FPS content on a fixed 90 Hz display can alternate presentation durations because the rates are not integer multiples, causing judder. Switching to 60 Hz or a suitable multiple can improve the match. Conversely, 60 Hz cannot fully display 90 independent updates per second; excess frames may be replaced, discarded, or blocked by the queue, depending on buffering and presentation policy.
The original claim that Android architecture and hardware could not support 120 Hz/120 FPS was too broad. A 120 Hz Android phone already existed in 2017. Sustained 120 FPS depends on the workload and device implementation, not the platform name alone. The forecast about 2020 is now historical and should not remain future buying advice.
The original OnePlus 90 Hz versus 60 Hz comparison video remains a historical demonstration link. Capture, encoding, playback, and the viewer’s screen affect what can be seen; promotional video is not a controlled frame-time or latency benchmark.
How 90 FPS Works (Platform Perspective)
For a hardware-accelerated View/HWUI interface, the main steps are:
- Input, animation, or another state change creates work; updates are not limited to taps.
- Input is dispatched to the app, which handles logic or updates list state.
- Choreographer schedules the relevant callbacks. Traversal happens when needed, and a change does not necessarily require a complete measure/layout/draw pass.
- The main thread records or updates drawing state, while RenderThread performs rendering work and submits buffers. CPU completion is not GPU completion; synchronization determines buffer readiness.
- SurfaceFlinger accepts layer buffers and coordinates GPU client composition or HWC device composition before display presentation. Its CPU main thread does not necessarily draw every pixel of every layer.
See SurfaceFlinger and WindowManager. The broad workflow is similar at 60 and 90 FPS, but games, custom surfaces, and different OS versions can use different rendering paths.
App Rendering Flow at 90 FPS

The trace runs left to right. This crop labels android.contacts (PID 9952), and the selected interval is 10.891 ms. That cursor selection neither measures complete input-to-display latency nor replaces the nominal 90 Hz interval of 11.11 ms.
Two annotations need qualification: Input, Animation, and Traversal are separate Choreographer phases, not all children of performTraversals(). “DisplayPlayList” should read DisplayList; recording drawing state on the main thread is different from RenderThread/GPU execution.
SurfaceFlinger Flow at 90 FPS

This selection is about 11 ms, and a visible layer label is com.oppo.market/.... It is not a continuous trace of the same Contacts app shown above. StatusBar#0 is a layer name, not a SystemUI process row. App and SurfaceFlinger Vsync tracks can have different phases.
Composition submission does not establish completed screen presentation. These remain historical pipeline illustrations; without the full trace and device conditions, they cannot determine end-to-end latency or a system-wide jank rate.
Advantages and Challenges
Advantages
The following are the original 2019 impressions and buying outlook. “Irreversible” expresses a subjective preference, not an established physiological rule; the third point is outdated buying advice. Perception varies by person and scene, and advertised refresh rate alone does not establish better latency or frame pacing.
- To my eyes, 90 FPS looked smoother. After getting used to it, going back to 60 FPS could feel jerky and disconnected.
- I called high refresh rate a “one-way street”: once you were used to it, a lower-refresh screen could be hard to accept again.
- With people keeping their phones longer, my advice then was to choose a good screen, a large battery, a capable SoC, UFS storage, and enough RAM. I expected more such phones in the second half of 2019, so I suggested that anyone still undecided could wait a little.
Challenges
Performance. Higher refresh targets shorten update intervals, but bottlenecks can involve the main thread, RenderThread, GPU, memory bandwidth, composition, or resource waits. They cannot always be ranked CPU first, I/O second, GPU third. Snapdragon 855 and UFS 3.0 were OnePlus 7 Pro specifications, not universal prerequisites for 90 FPS. Storage can matter during loading without being a necessary operation on every frame. The Razer Phone’s experience also cannot be attributed entirely to its chip without matching tests.
Triple buffering can improve overlap while adding queuing latency; it does not guarantee that occasional deadline misses remain smooth. Inspect frame timing and presentation. Perfetto FrameTimeline, available from Android 12 (API 31), is more informative than checking whether one CPU bar is below 11.11 ms.
Power. With other conditions similar, more frequent rendering and display updates typically cost power, but the amount depends on panel, content, brightness, workload, and thermal state. Reducing rendering resolution can reduce some GPU/bandwidth costs without changing the physical panel or guaranteeing a fixed saving. Static or low-frame-rate content does not need the entire system to run at 90 FPS continuously.
Adaptation. Framework animation normally follows scheduled frame callbacks, but hard-coded 16 ms logic, custom rendering loops, and heavy workloads need attention. Games should pace production and submission for their target rate. WebView and SurfaceView host content; their names alone do not determine whether that content supports 90 FPS.
Modern Android Adaptation
- Android 11 / API 30:
Surface.setFrameRate()expresses the content’s intended rate. Display capability, other layers, and power policy influence the actual selection. The request is not guaranteed, and the API does not automatically speed up or throttle the rendering loop. UseFRAME_RATE_COMPATIBILITY_FIXED_SOURCEfor fixed-rate video andDEFAULTfor ordinary game content; avoid repeating the call every frame. - Game frame pacing: Android Frame Pacing, or Swappy, helps coordinate OpenGL/Vulkan submissions with display timing. Requesting a high refresh rate, producing frames on time, and sustaining performance are separate tasks to measure.
- Android 15 QPR1 and later: Adaptive refresh rate (ARR) additionally requires the appropriate device HAL support. An OS update alone does not grant every panel the same capability, and static content need not be redrawn at 90/120 FPS continuously.
The developer-option refresh-rate overlay describes display mode information, not the app’s actual frame-production rate. Record the display mode, app frame intervals, input latency, power/thermal state, and workload when comparing high-refresh experiences.
Zhihu Article
The original discussion is available at Zhihu: A New Smooth Experience, Thoughts on 90 Hz.
About Me && Blog
Below are my personal details and links. I look forward to connecting and sharing knowledge with fellow developers!
- About Me: Includes my WeChat and WeChat group links.
- Blog Navigation: A guide to the content on this blog.
- Curated Android Performance Articles: A collection of must-read performance optimization articles. Self-nominations/recommendations are welcome!
- Android Performance Knowledge Planet: The paid community stopped operating in 2026 and no longer accepts new members; this link preserves its history.
“If you want to go fast, go alone. If you want to go far, go together.”
