atagen

monolith

public
Star0
Watch0

Commit 8f52f17d6892

tarball

atagen <boss@atagen.co>2026-10-16 13:34 UTC

2 files changed+51-79
monolith: import client buffers when they are committed

First-time dmabuf imports take milliseconds on NVIDIA, and doing them inside the deadline render made window spawns and resizes miss vblanks. Importing at commit moves that cost out of the window between the render deadline and the flip.
Modified file: crates/monolith/src/handlers.rs+6 additions−1 deletions
@@ -1,7 +1,7 @@
11 use crate::state::{ClientState, State};
22 use smithay::backend::allocator::dmabuf::Dmabuf;
33 use smithay::backend::renderer::ImportDma;
4-use smithay::backend::renderer::utils::on_commit_buffer_handler;
4+use smithay::backend::renderer::utils::{import_surface_tree, on_commit_buffer_handler};
55 use smithay::desktop::{PopupKind, Window};
66 use smithay::input::dnd::{DndGrabHandler, GrabType, Source};
77 use smithay::input::pointer::CursorImageStatus;
@@ -56,6 +56,11 @@ impl CompositorHandler for State {
5656
5757 fn commit(&mut self, surface: &WlSurface) {
5858 on_commit_buffer_handler::<Self>(surface);
59+ // Importing at commit keeps first-time dmabuf imports, which take
60+ // milliseconds on NVIDIA, out of the render racing the next vblank.
61+ if let Err(e) = import_surface_tree(&mut self.renderer, surface) {
62+ tracing::debug!("early import failed: {e}");
63+ }
5964 if !is_sync_subsurface(surface) {
6065 let mut root = surface.clone();
6166 while let Some(parent) = get_parent(&root) {
Modified file: monolith.log+45 additions−78 deletions
@@ -1,81 +1,48 @@
1- Finished `release` profile [optimized] target(s) in 0.07s
1+ Finished `release` profile [optimized] target(s) in 0.06s
22 Running `target/release/monolith run --backend drm , vkcube`
3-2026-10-16T13:18:42.960033Z INFO monolith::drm: primary GPU path=/dev/dri/card1
4-2026-10-16T13:18:43.191440Z INFO monolith::drm: output connected name="DP-2" w=2560 h=1440 refresh=165
5-2026-10-16T13:18:43.191538Z INFO monolith::ipc: control socket path=/run/user/1000/monolith-wayland-2.sock
6-2026-10-16T13:18:43.191556Z INFO monolith: monolith running socket="wayland-2" device="NVIDIA GeForce RTX 3060"
7-2026-10-16T13:18:43.192099Z INFO monolith::commands: spawned pid=339299 argv=[",", "vkcube"]
8-2026-10-16T13:18:43.206596Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=14418823
9-2026-10-16T13:18:43.212094Z DEBUG monolith::drm: frame rate output="DP-2" presented=1 vblanks=8355033 budget_us=16418
3+2026-10-16T13:32:43.669264Z INFO monolith::drm: primary GPU path=/dev/dri/card1
4+2026-10-16T13:32:43.906857Z INFO monolith::drm: output connected name="DP-2" w=2560 h=1440 refresh=165
5+2026-10-16T13:32:43.906934Z INFO monolith::ipc: control socket path=/run/user/1000/monolith-wayland-2.sock
6+2026-10-16T13:32:43.906946Z INFO monolith: monolith running socket="wayland-2" device="NVIDIA GeForce RTX 3060"
7+2026-10-16T13:32:43.907346Z INFO monolith::commands: spawned pid=348266 argv=[",", "vkcube"]
8+2026-10-16T13:32:43.927078Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=19657007 scene_ns=1950 render_ns=12420942 queue_ns=156392
9+2026-10-16T13:32:43.931073Z DEBUG monolith::drm: frame rate output="DP-2" presented=1 vblanks=8493716 budget_us=21657
1010 Selected WSI platform: wayland
1111 Selected GPU 0: NVIDIA GeForce RTX 3060, type: DiscreteGpu, apiVersion: 4211017 (1.4.329), driverVersion: -1797652352 (83.416.128)
12-2026-10-16T13:18:44.212377Z DEBUG monolith::drm: frame rate output="DP-2" presented=80 vblanks=165 budget_us=1784
13-2026-10-16T13:18:45.212592Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=1473
14-2026-10-16T13:18:45.497520Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6009851 budget_ns=2764556
15-2026-10-16T13:18:45.830980Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6064851 budget_ns=1955919
16-2026-10-16T13:18:46.212848Z DEBUG monolith::drm: frame rate output="DP-2" presented=163 vblanks=164 budget_us=1374
17-2026-10-16T13:18:47.190680Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=3426370
18-2026-10-16T13:18:47.194947Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6049851 budget_ns=4926370
19-2026-10-16T13:18:47.213154Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=165 budget_us=4896
20-2026-10-16T13:18:48.213491Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=1743
21-2026-10-16T13:18:49.140885Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=5945851 budget_ns=1965559
22-2026-10-16T13:18:49.213628Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=164 budget_us=1860
23-2026-10-16T13:18:49.225750Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6058851 budget_ns=2360210
24-2026-10-16T13:18:49.874409Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=5916851 budget_ns=3887978
25-2026-10-16T13:18:50.214055Z DEBUG monolith::drm: frame rate output="DP-2" presented=163 vblanks=165 budget_us=1653
26-2026-10-16T13:18:51.214172Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=1636
27-2026-10-16T13:18:51.769798Z DEBUG monolith::input: bind cmd=Fullscreen
28-2026-10-16T13:18:51.830166Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=11023044
29-2026-10-16T13:18:51.838579Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=30315404 budget_ns=12523044
30-2026-10-16T13:18:52.214455Z DEBUG monolith::drm: frame rate output="DP-2" presented=126 vblanks=164 budget_us=12213
31-2026-10-16T13:18:53.214677Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=165 budget_us=1430
32-2026-10-16T13:18:54.215041Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=1452
33-2026-10-16T13:18:55.215200Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=1442
34-2026-10-16T13:18:55.403154Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6061851 budget_ns=1914018
35-2026-10-16T13:18:56.106336Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6057851 budget_ns=1942709
36-2026-10-16T13:18:56.215463Z DEBUG monolith::drm: frame rate output="DP-2" presented=163 vblanks=165 budget_us=1693
37-2026-10-16T13:18:56.332434Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=3400539
38-2026-10-16T13:18:56.336731Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6072851 budget_ns=5040539
39-2026-10-16T13:18:56.399771Z DEBUG monolith::input: bind cmd=Fullscreen
40-2026-10-16T13:18:56.462019Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=7255957
41-2026-10-16T13:18:56.470071Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=24228404 budget_ns=9255957
42-2026-10-16T13:18:56.682281Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6073851 budget_ns=2612969
43-2026-10-16T13:18:56.694386Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6049851 budget_ns=3112969
44-2026-10-16T13:18:56.809547Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6062851 budget_ns=3442969
45-2026-10-16T13:18:57.215731Z DEBUG monolith::drm: frame rate output="DP-2" presented=153 vblanks=165 budget_us=2751
46-2026-10-16T13:18:58.161784Z DEBUG monolith::input: bind cmd=Spawn { argv: ["beer"] }
47-2026-10-16T13:18:58.162414Z INFO monolith::commands: spawned pid=339323 argv=["beer"]
48-2026-10-16T13:18:58.197792Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6063851 budget_ns=3867448
49-2026-10-16T13:18:58.215976Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=165 budget_us=3837
50-2026-10-16T13:18:58.271072Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=10411692
51-2026-10-16T13:18:58.276596Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=12125255 budget_ns=12351692
52-2026-10-16T13:18:59.216233Z DEBUG monolith::drm: frame rate output="DP-2" presented=132 vblanks=165 budget_us=1525
53-2026-10-16T13:18:59.432766Z DEBUG monolith::input: bind cmd=Spawn { argv: ["beer"] }
54-2026-10-16T13:18:59.433294Z INFO monolith::commands: spawned pid=339344 argv=["beer"]
55-2026-10-16T13:18:59.458728Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6063851 budget_ns=2796776
56-2026-10-16T13:18:59.495745Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=4250817
57-2026-10-16T13:18:59.501210Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6080553 budget_ns=6220817
58-2026-10-16T13:19:00.216526Z DEBUG monolith::drm: frame rate output="DP-2" presented=142 vblanks=165 budget_us=1457
59-2026-10-16T13:19:00.835760Z DEBUG monolith::input: bind cmd=Move { dir: Left }
60-2026-10-16T13:19:00.853017Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6064851 budget_ns=3451449
61-2026-10-16T13:19:01.216794Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=164 budget_us=1462
62-2026-10-16T13:19:02.087739Z DEBUG monolith::input: bind cmd=InvertMove
63-2026-10-16T13:19:02.217007Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=1381
64-2026-10-16T13:19:02.344360Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6068851 budget_ns=1788895
65-2026-10-16T13:19:02.441740Z DEBUG monolith::input: bind cmd=Move { dir: Right }
66-2026-10-16T13:19:02.497884Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=4232196
67-2026-10-16T13:19:02.501941Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6062553 budget_ns=6012196
68-2026-10-16T13:19:02.786857Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6063851 budget_ns=4654297
69-2026-10-16T13:19:03.217269Z DEBUG monolith::drm: frame rate output="DP-2" presented=159 vblanks=165 budget_us=1587
70-2026-10-16T13:19:04.217526Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=1467
71-2026-10-16T13:19:04.781348Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6070851 budget_ns=3130793
72-2026-10-16T13:19:05.217834Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=165 budget_us=1442
73-2026-10-16T13:19:05.633029Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=19194939
74-2026-10-16T13:19:05.636097Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=42437851 budget_ns=20694939
75-2026-10-16T13:19:06.218058Z DEBUG monolith::drm: frame rate output="DP-2" presented=158 vblanks=164 budget_us=1463
76-2026-10-16T13:19:07.218340Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=1477
77-2026-10-16T13:19:08.218585Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=1636
78-2026-10-16T13:19:08.370131Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6046851 budget_ns=1989990
79-2026-10-16T13:19:09.008493Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=3242045
80-2026-10-16T13:19:09.012717Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6034851 budget_ns=4742045
81-2026-10-16T13:19:09.031732Z DEBUG monolith::input: bind cmd=Quit
12+2026-10-16T13:32:44.610017Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=18188851 budget_ns=2858445
13+2026-10-16T13:32:44.931284Z DEBUG monolith::drm: frame rate output="DP-2" presented=73 vblanks=164 budget_us=2745
14+2026-10-16T13:32:45.931531Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2582
15+2026-10-16T13:32:46.931788Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=2426
16+2026-10-16T13:32:47.932040Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2295
17+2026-10-16T13:32:47.944211Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6066851 budget_ns=2823926
18+2026-10-16T13:32:48.932319Z DEBUG monolith::drm: frame rate output="DP-2" presented=164 vblanks=165 budget_us=2656
19+2026-10-16T13:32:49.914539Z DEBUG monolith::input: bind cmd=Fullscreen
20+2026-10-16T13:32:49.932555Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2420
21+2026-10-16T13:32:49.998732Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=10737116 scene_ns=9140 render_ns=10458842 queue_ns=265194
22+2026-10-16T13:32:50.005318Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=42439255 budget_ns=2869784
23+2026-10-16T13:32:50.017443Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6061851 budget_ns=3300398
24+2026-10-16T13:32:50.672080Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=3180736 scene_ns=6370 render_ns=3057454 queue_ns=114512
25+2026-10-16T13:32:50.678316Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6140851 budget_ns=3361459
26+2026-10-16T13:32:50.932811Z DEBUG monolith::drm: frame rate output="DP-2" presented=152 vblanks=165 budget_us=3385
27+2026-10-16T13:32:51.933167Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=3136
28+2026-10-16T13:32:52.933320Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2925
29+2026-10-16T13:32:53.933574Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=2783
30+2026-10-16T13:32:54.933829Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2704
31+2026-10-16T13:32:55.743499Z DEBUG monolith::input: bind cmd=Fullscreen
32+2026-10-16T13:32:55.823060Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=9146473 scene_ns=9791 render_ns=8938449 queue_ns=194353
33+2026-10-16T13:32:55.831041Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=36380106 budget_ns=2949527
34+2026-10-16T13:32:55.873474Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6067851 budget_ns=3237817
35+2026-10-16T13:32:55.934079Z DEBUG monolith::drm: frame rate output="DP-2" presented=153 vblanks=164 budget_us=3322
36+2026-10-16T13:32:56.934342Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=3193
37+2026-10-16T13:32:56.952632Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=3303388 scene_ns=6890 render_ns=3235347 queue_ns=59391
38+2026-10-16T13:32:56.958585Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=6060851 budget_ns=3377249
39+2026-10-16T13:32:57.145476Z DEBUG monolith::input: bind cmd=Spawn { argv: ["beer"] }
40+2026-10-16T13:32:57.146181Z INFO monolith::commands: spawned pid=348279 argv=["beer"]
41+2026-10-16T13:32:57.303481Z DEBUG monolith::drm: slow frame output="DP-2" took_ns=15769221 scene_ns=15331 render_ns=15528617 queue_ns=222093
42+2026-10-16T13:32:57.304343Z DEBUG monolith::drm: frame missed its vblank output="DP-2" late_ns=48504851 budget_ns=3458460
43+2026-10-16T13:32:57.934592Z DEBUG monolith::drm: frame rate output="DP-2" presented=156 vblanks=164 budget_us=3238
44+2026-10-16T13:32:58.934858Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=165 budget_us=3074
45+2026-10-16T13:32:59.935104Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2911
46+2026-10-16T13:33:00.935356Z DEBUG monolith::drm: frame rate output="DP-2" presented=165 vblanks=164 budget_us=2688
47+2026-10-16T13:33:01.853414Z DEBUG monolith::input: bind cmd=Quit
48+Io error: Broken pipe (os error 32)