match device.fetch_events() {
Ok(events) => {
for ev in events {
println!("ev: {:?}", &ev);
self.process_event(ev);
}
println!("done with events");
},
Err(e) => {
eprintln!("E: error fetching events: {:?}", e);
break;
}
}
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 238574000 }, kind: AbsAxis(ABS_Z), value: 129 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 238574000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 242575000 }, kind: AbsAxis(ABS_Z), value: 130 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 242575000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 254574000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 254574000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 276574000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 276574000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 308573000 }, kind: Misc(MSC_SCAN), value: 589825 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 308573000 }, kind: Key(BTN_TRIGGER), value: 1 }
(blocking stuff happens here in response to BTN_TRIGGER)
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 308573000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
(these events were probably queued up during the blocking)
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 312576000 }, kind: AbsAxis(ABS_Z), value: 133 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 312576000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 316573000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 316573000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 320570000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 320570000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 342570000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 342570000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 346573000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 346573000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 358570000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 358570000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 364573000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 364573000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 394569000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 394569000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 398571000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 398571000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 402576000 }, kind: AbsAxis(ABS_Z), value: 133 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 402576000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 406569000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 406569000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 424587000 }, kind: AbsAxis(ABS_Z), value: 133 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 424587000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 428579000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 428579000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 432580000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 432580000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 446590000 }, kind: AbsAxis(ABS_Z), value: 133 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 446590000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 450580000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698763, tv_nsec: 450580000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
However if I press a lot of buttons while the loop is blocked, this happens fairly reliably:
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 64575000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 64575000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 76575000 }, kind: AbsAxis(ABS_Z), value: 131 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 76575000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 82575000 }, kind: AbsAxis(ABS_Z), value: 132 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 82575000 }, kind: Synchronization(SYN_REPORT), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 90577000 }, kind: Misc(MSC_SCAN), value: 589825 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 90577000 }, kind: Key(BTN_TRIGGER), value: 0 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698764, tv_nsec: 90577000 }, kind: Synchronization(SYN_REPORT), value: 0 }
done with events
done with events
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
ev: InputEvent { time: SystemTime { tv_sec: 1632698765, tv_nsec: 126532000 }, kind: AbsAxis(ABS_X), value: 127 }
(ad infinitum)
From a quick look at the process with gdb it seems to be spending a lot of time within compensate_events
but I'm not sure if that's a red herring.