You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
On Linux the app never draws faster than 60 fps, even on a 120 / 144 Hz monitor and even when frames are cheap. This is an engine limitation, not something our widget code can fix.
Evidence
Profile build, Hyprland (Wayland), monitor 2880x1800@120, PlatformDispatcher.views.first.display.refreshRate == 120.0. Real-app benchmark (benchmark/app_perf_bench.dart), sidebar toggle animation: build p50 4 ms, raster p50 0.8 ms, yet the interval between presented frames is 16.67 ms (p50), i.e. 60 fps. Same for every scenario (grid scroll, hover, tree scroll).
Cause (upstream)
shell/platform/linux/fl_engine.cc never sets FlutterProjectArgs.vsync_callback, so the engine uses VsyncWaiterFallback.
It cannot be worked around from Dart: frames only enter the raster pipeline from a vsync-driven Animator::BeginFrame (a pacer built on PlatformDispatcher.scheduleWarmUpFrame was prototyped and produced 0 presented frames).
Summary
On Linux the app never draws faster than 60 fps, even on a 120 / 144 Hz monitor and even when frames are cheap. This is an engine limitation, not something our widget code can fix.
Evidence
Profile build, Hyprland (Wayland), monitor
2880x1800@120,PlatformDispatcher.views.first.display.refreshRate == 120.0. Real-app benchmark (benchmark/app_perf_bench.dart), sidebar toggle animation: build p50 4 ms, raster p50 0.8 ms, yet the interval between presented frames is 16.67 ms (p50), i.e. 60 fps. Same for every scenario (grid scroll, hover, tree scroll).Cause (upstream)
shell/platform/linux/fl_engine.ccnever setsFlutterProjectArgs.vsync_callback, so the engine usesVsyncWaiterFallback.shell/common/vsync_waiter_fallback.cchard-codeskSingleFrameInterval = 1.0 / 60.0.Animator::BeginFrame(a pacer built onPlatformDispatcher.scheduleWarmUpFramewas prototyped and produced 0 presented frames).Upstream work: flutter/flutter#192342 "Use vsync in Linux embedder" (open, Sep 2026) adds a vsync callback and also removes a full-window software repaint per frame on Wayland subsurfaces. Related: flutter/flutter#183703, flutter/flutter#190620.
Windows (DWM vsync) and macOS (CVDisplayLink / ProMotion) already follow the display rate.
Options
libflutter_linux_gtk.sowith that PR for Linux release bundles (CI + maintenance on every Flutter upgrade).Acceptance
Linux release reaches the display refresh rate in the sidebar toggle and grid scroll scenarios of
benchmark/app_perf_bench.dart.