slow down our cursor timer under valgrind

This commit is contained in:
Mitchell Hashimoto
2025-07-21 07:28:05 -07:00
parent e911d53a2e
commit edb5f7c69d

View File

@ -248,7 +248,7 @@ fn threadMain_(self: *Thread) !void {
self.cursor_h.run( self.cursor_h.run(
&self.loop, &self.loop,
&self.cursor_c, &self.cursor_c,
CURSOR_BLINK_INTERVAL, cursorBlinkInterval(),
Thread, Thread,
self, self,
cursorTimerCallback, cursorTimerCallback,
@ -408,7 +408,7 @@ fn drainMailbox(self: *Thread) !void {
self.cursor_h.run( self.cursor_h.run(
&self.loop, &self.loop,
&self.cursor_c, &self.cursor_c,
CURSOR_BLINK_INTERVAL, cursorBlinkInterval(),
Thread, Thread,
self, self,
cursorTimerCallback, cursorTimerCallback,
@ -424,7 +424,7 @@ fn drainMailbox(self: *Thread) !void {
&self.loop, &self.loop,
&self.cursor_c, &self.cursor_c,
&self.cursor_c_cancel, &self.cursor_c_cancel,
CURSOR_BLINK_INTERVAL, cursorBlinkInterval(),
Thread, Thread,
self, self,
cursorTimerCallback, cursorTimerCallback,
@ -641,7 +641,14 @@ fn cursorTimerCallback(
t.flags.cursor_blink_visible = !t.flags.cursor_blink_visible; t.flags.cursor_blink_visible = !t.flags.cursor_blink_visible;
t.wakeup.notify() catch {}; t.wakeup.notify() catch {};
t.cursor_h.run(&t.loop, &t.cursor_c, CURSOR_BLINK_INTERVAL, Thread, t, cursorTimerCallback); t.cursor_h.run(
&t.loop,
&t.cursor_c,
cursorBlinkInterval(),
Thread,
t,
cursorTimerCallback,
);
return .disarm; return .disarm;
} }
@ -687,3 +694,19 @@ fn stopCallback(
self_.?.loop.stop(); self_.?.loop.stop();
return .disarm; return .disarm;
} }
/// Returns the interval for the blinking cursor in milliseconds.
fn cursorBlinkInterval() u64 {
if (std.valgrind.runningOnValgrind() > 0) {
// If we're running under Valgrind, the cursor blink adds enough
// churn that it makes some stalls annoying unless you're on a
// super powerful computer, so we delay it.
//
// This is a hack, we should change some of our cursor timer
// logic to be more efficient:
// https://github.com/ghostty-org/ghostty/issues/8003
return CURSOR_BLINK_INTERVAL * 5;
}
return CURSOR_BLINK_INTERVAL;
}