Skip to content

epic(perf): steady 120 Hz without drops (profile findings, Sep 2026) #987

Description

@ZhuchkaTriplesix

Goal

Steady 120 Hz without drops (and headroom for 144 Hz): every frame ≤ 8.3 ms build and ≤ 8.3 ms raster, no multi-frame hitches on common actions.

How it was measured

Profile builds on Linux (Hyprland, 120 Hz monitor, AMD iGPU, Impeller GLES), two harnesses added in this investigation:

  • benchmark/app_perf_bench.dart: the real shell driven through the Demo Playground with a throwaway data directory and in-memory secrets. Scenarios: idle, sidebar toggle, run a 5000-row query, grid vertical / horizontal scroll, hover, typing, tabs, connections tree with 1500 tables (expand / scroll / collapse). Reports FrameTiming, presented-frame intervals from the raster timeline, and optionally CPU profile, allocations and engine timeline per scenario.
  • benchmark/grid_perf_bench.dart: the grid alone (5000×120), modes scroll, edit, select, dialog, rerun.

Caveats found along the way: recording the Dart timeline stream allocates heavily inside the framework and inflates GC; the in-process VM service client itself costs CPU; FrameTiming.buildDuration does not include flushSemantics.

Results (real app, window 2056×2616)

Scenario build p50 / max raster p50 Verdict
Idle nothing drawn — ok
Sidebar toggle 4.0 / 7.1 ms 0.8 ms too heavy for 144 Hz → #984
Run 5000-row query — / 54–75 ms 1.0 ms one big hitch → #982, #981
Grid vertical scroll 1.4 / 3.4 ms 0.8 ms ok
Grid horizontal scroll 0.1 / 12–20 ms 0.8 ms window-shift hitches → #983
Hover over grid 0.1 / 0.3 ms 0.8 ms ok
Typing in editor 2.6 / 5.0 ms 0.9 ms ok
Tab switch — / 6.8–7.9 ms 0.9 ms tight → #985
Tree 1500 tables: expand / scroll / collapse ≤ 5.9 / ≤ 2.8 / ≤ 1.8 ms 1.2–1.3 ms ok

All scenarios present at exactly 60 fps on Linux regardless of cost → #980 (engine).

Children

Already fixed in this cycle: #875, #879, #885, #972 (grid rebuilds), #874, #876, #877, #878, #886.

Related

#723 (connections tree @ 120 Hz: measured within budget with 1500 tables), #739 (QA sign-off).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicEpic / umbrella issueperformanceTheme parser epic label: performance

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions