diff --git a/src/Surface.zig b/src/Surface.zig index 637af80cb..3b4bf872f 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -153,7 +153,7 @@ selection_scroll_active: bool = false, /// precision timestamp. It does not necessarily need to correspond to the /// actual time, but we must be able to compare two subsequent timestamps to get /// the wall clock time that has elapsed between timestamps. -command_timer: ?i128 = null, +command_timer: ?std.time.Instant = null, /// The effect of an input event. This can be used by callers to take /// the appropriate action after an input event. For example, key @@ -999,22 +999,16 @@ pub fn handleMessage(self: *Surface, msg: Message) !void { try self.selectionScrollTick(); }, - .start_command_timer => { - self.command_timer = std.time.nanoTimestamp(); + .start_command => { + self.command_timer = try .now(); }, - .stop_command_timer => |v| timer: { - const end = std.time.nanoTimestamp(); + .stop_command => |v| timer: { + const end: std.time.Instant = try .now(); const start = self.command_timer orelse break :timer; self.command_timer = null; - const difference = end - start; - - // skip obviously silly results - if (difference < 0) break :timer; - if (difference > std.math.maxInt(u64)) break :timer; - - const duration: Duration = .{ .duration = @intCast(difference) }; + const duration: Duration = .{ .duration = end.since(start) }; log.debug("command took {}", .{duration}); _ = self.rt_app.performAction( diff --git a/src/apprt/surface.zig b/src/apprt/surface.zig index 70866c609..a46732c16 100644 --- a/src/apprt/surface.zig +++ b/src/apprt/surface.zig @@ -97,12 +97,12 @@ pub const Message = union(enum) { progress_report: terminal.osc.Command.ProgressReport, /// A command has started in the shell, start a timer. - start_command_timer, + start_command, /// A command has finished in the shell, stop the timer and send out /// notifications as appropriate. The optional u8 is the exit code /// of the command. - stop_command_timer: ?u8, + stop_command: ?u8, pub const ReportTitleStyle = enum { csi_21_t, diff --git a/src/termio/stream_handler.zig b/src/termio/stream_handler.zig index b2b2af3d0..9a7e8b416 100644 --- a/src/termio/stream_handler.zig +++ b/src/termio/stream_handler.zig @@ -1054,11 +1054,11 @@ pub const StreamHandler = struct { pub inline fn endOfInput(self: *StreamHandler) !void { self.terminal.markSemanticPrompt(.command); - self.surfaceMessageWriter(.start_command_timer); + self.surfaceMessageWriter(.start_command); } pub inline fn endOfCommand(self: *StreamHandler, exit_code: ?u8) !void { - self.surfaceMessageWriter(.{ .stop_command_timer = exit_code }); + self.surfaceMessageWriter(.{ .stop_command = exit_code }); } pub fn reportPwd(self: *StreamHandler, url: []const u8) !void {