refactor: add source location tracing for need_render calls

This commit is contained in:
CJ van den Berg 2026-01-15 17:16:07 +01:00
parent 58bd1fe12a
commit c3cf5ea02f
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
13 changed files with 45 additions and 44 deletions

View file

@ -123,7 +123,7 @@ fn State(ctx_type: type) type {
input.mouse.BUTTON1 => {
self.active = true;
self.drag_anchor = self.to_rel_cursor(x, y);
tui.need_render();
tui.need_render(@src());
},
input.mouse.BUTTON4, input.mouse.BUTTON5 => {
self.call_click_handler(btn_enum, self.to_rel_cursor(x, y));
@ -136,7 +136,7 @@ fn State(ctx_type: type) type {
self.drag_anchor = null;
self.drag_pos = null;
self.call_click_handler(@enumFromInt(btn), self.to_rel_cursor(x, y));
tui.need_render();
tui.need_render(@src());
return true;
} else if (try m.match(.{ "D", input.event.press, tp.extract(&btn), tp.any, tp.extract(&x), tp.extract(&y), tp.any, tp.any })) {
self.drag_pos = .{ .x = x, .y = y };
@ -153,11 +153,11 @@ fn State(ctx_type: type) type {
self.drag_anchor = null;
self.drag_pos = null;
self.call_click_handler(@enumFromInt(btn), self.to_rel_cursor(x, y));
tui.need_render();
tui.need_render(@src());
return true;
} else if (try m.match(.{ "H", tp.extract(&self.hover) })) {
tui.rdr().request_mouse_cursor_pointer(self.hover);
tui.need_render();
tui.need_render(@src());
return true;
}
self.drag_anchor = null;

View file

@ -132,21 +132,21 @@ pub fn State(ctx_type: type) type {
pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool {
if (try m.match(.{ "B", input.event.press, @intFromEnum(input.mouse.BUTTON1), tp.any, tp.any, tp.any, tp.any, tp.any })) {
self.active = true;
tui.need_render();
tui.need_render(@src());
return true;
} else if (try m.match(.{ "B", input.event.release, @intFromEnum(input.mouse.BUTTON1), tp.any, tp.any, tp.any, tp.any, tp.any })) {
self.opts.on_click(self.opts.ctx, self);
self.active = false;
tui.need_render();
tui.need_render(@src());
return true;
} else if (try m.match(.{ "D", input.event.release, @intFromEnum(input.mouse.BUTTON1), tp.any, tp.any, tp.any, tp.any, tp.any })) {
self.opts.on_click(self.opts.ctx, self);
self.active = false;
tui.need_render();
tui.need_render(@src());
return true;
} else if (try m.match(.{ "H", tp.extract(&self.hover) })) {
tui.rdr().request_mouse_cursor_pointer(self.hover);
tui.need_render();
tui.need_render(@src());
return true;
}
return false;

View file

@ -170,7 +170,7 @@ pub fn dynamic_cast(self: Self, comptime T: type) ?*T {
}
pub fn need_render() void {
tui.need_render();
tui.need_render(@src());
}
pub fn need_reflow() void {

View file

@ -6934,7 +6934,7 @@ pub const EditorWidget = struct {
return;
} else {
self.editor.cancel_all_matches();
tui.need_render();
tui.need_render(@src());
}
},
.none => {},

View file

@ -209,7 +209,7 @@ pub fn receive(_: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool {
var hover: bool = false;
if (try m.match(.{ "H", tp.extract(&hover) })) {
tui.rdr().request_mouse_cursor_default(hover);
tui.need_render();
tui.need_render(@src());
return true;
}
if (try m.match(.{ "B", input.event.press, @intFromEnum(input.mouse.BUTTON1), tp.more }) or
@ -453,7 +453,7 @@ const cmds = struct {
const padding = tui.get_widget_style(widget_type).padding;
self.menu_len = self.menu_count + padding.top + padding.bottom;
self.menu_w = self.menu_label_max + 2 + padding.left + padding.right;
tui.need_render();
tui.need_render(@src());
try tui.save_config();
}
pub const home_next_widget_style_meta: Meta = .{};

View file

@ -605,7 +605,7 @@ const cmds = struct {
if (view == null)
try command.executeName("scroll_view_center", .{});
}
tui.need_render();
tui.need_render(@src());
self.location_update_from_editor();
}
@ -613,7 +613,7 @@ const cmds = struct {
tui.reset_drag_context();
try self.create_editor();
try command.executeName("open_scratch_buffer", command.fmt(.{ "help", @embedFile("help.md"), "markdown" }));
tui.need_render();
tui.need_render(@src());
self.location_update_from_editor();
}
pub const open_help_meta: Meta = .{ .description = "Open help" };
@ -622,7 +622,7 @@ const cmds = struct {
tui.reset_drag_context();
try self.create_editor();
try command.executeName("open_scratch_buffer", command.fmt(.{ "font test", @import("fonts.zig").font_test_text, "text" }));
tui.need_render();
tui.need_render(@src());
self.location_update_from_editor();
}
pub const open_font_test_text_meta: Meta = .{ .description = "Open font glyph test text" };
@ -631,7 +631,7 @@ const cmds = struct {
tui.reset_drag_context();
try self.create_editor();
try command.executeName("open_scratch_buffer", command.fmt(.{ "version", root.version_info, "gitcommit" }));
tui.need_render();
tui.need_render(@src());
self.location_update_from_editor();
}
pub const open_version_info_meta: Meta = .{ .description = "Version" };
@ -726,7 +726,7 @@ const cmds = struct {
tui.reset_drag_context();
try self.create_editor();
try command.executeName("open_scratch_buffer", .{ .args = args });
tui.need_render();
tui.need_render(@src());
self.location_update_from_editor();
}
pub const create_scratch_buffer_meta: Meta = .{ .arguments = &.{ .string, .string, .string } };
@ -807,7 +807,7 @@ const cmds = struct {
new_buffer.mark_dirty();
new_editor.clamp();
new_editor.update_buf(new_buffer.root) catch {};
tui.need_render();
tui.need_render(@src());
}
try command.executeName("save_file", .{});
try command.executeName("place_next_tab", command.fmt(.{
@ -836,7 +836,7 @@ const cmds = struct {
const logger = log.logger("buffer");
defer logger.deinit();
logger.print("deleted buffer {s}", .{file_path});
tui.need_render();
tui.need_render(@src());
}
pub const delete_buffer_meta: Meta = .{ .arguments = &.{.string} };
@ -852,13 +852,13 @@ const cmds = struct {
return;
}
_ = self.buffer_manager.close_buffer(buffer);
tui.need_render();
tui.need_render(@src());
}
pub const close_buffer_meta: Meta = .{ .arguments = &.{.string} };
pub fn restore_session(self: *Self, _: Ctx) Result {
try self.read_restore_info();
tui.need_render();
tui.need_render(@src());
}
pub const restore_session_meta: Meta = .{};
@ -1117,7 +1117,7 @@ const cmds = struct {
if (self.get_active_editor()) |editor| if (std.mem.eql(u8, file_path, editor.file_path orelse "")) {
self.symbols_complete = true;
try tui.open_overlay(@import("mode/overlay/symbol_palette.zig").Type);
tui.need_render();
tui.need_render(@src());
};
}
pub const add_document_symbol_done_meta: Meta = .{
@ -1181,7 +1181,7 @@ const cmds = struct {
.palette => try tui.open_overlay(@import("mode/overlay/completion_palette.zig").Type),
.dropdown => try tui.open_overlay(@import("mode/overlay/completion_dropdown.zig").Type),
}
tui.need_render();
tui.need_render(@src());
}
};
}
@ -1383,7 +1383,7 @@ const cmds = struct {
const buffer = self.buffer_manager.buffer_from_ref(buffer_ref) orelse return;
if (self.get_editor_for_buffer(buffer)) |editor| if (editor.buffer) |eb| if (eb == buffer) {
editor.smart_buffer_append(command.fmt(.{output})) catch {};
tui.need_render();
tui.need_render(@src());
return;
};
var cursor: Buffer.Cursor = .{};
@ -1393,7 +1393,7 @@ const cmds = struct {
_, _, root_ = try root_.insert_chars(cursor.row, cursor.col, output, self.allocator, metrics);
buffer.store_undo(&[_]u8{}) catch {};
buffer.update(root_);
tui.need_render();
tui.need_render(@src());
}
pub const shell_execute_stream_output_meta: Meta = .{ .arguments = &.{ .integer, .string } };
@ -1407,7 +1407,7 @@ const cmds = struct {
return;
}
buffer.mark_clean();
tui.need_render();
tui.need_render(@src());
}
pub const shell_execute_stream_output_complete_meta: Meta = .{ .arguments = &.{ .integer, .string } };
@ -2074,12 +2074,12 @@ pub fn set_info_content(self: *Self, content: []const u8, mode: enum { replace,
.replace => info.set_content(content) catch |e| return tp.exit_error(e, @errorReturnTrace()),
.append => info.append_content(content) catch |e| return tp.exit_error(e, @errorReturnTrace()),
}
tui.need_render();
tui.need_render(@src());
}
pub fn cancel_info_content(self: *Self) tp.result {
_ = self.toggle_panel_view(info_view, .disable) catch |e| return tp.exit_error(e, @errorReturnTrace());
tui.need_render();
tui.need_render(@src());
}
pub fn vcs_id_update(self: *Self, m: tp.message) void {

View file

@ -179,7 +179,7 @@ pub fn Create(options: type) type {
} else {
log.logger("file_browser").err("receive", tp.unexpected(m));
}
tui.need_render();
tui.need_render(@src());
}
fn add_entry(self: *Self, file_name: []const u8, entry_type: EntryType, file_type: []const u8, icon: []const u8, color: u24) !void {

View file

@ -580,7 +580,7 @@ pub fn Create(options: type) type {
tui.set_next_style(widget_type);
const padding = tui.get_widget_style(widget_type).padding;
self.do_resize(padding);
tui.need_render();
tui.need_render(@src());
try tui.save_config();
}
pub const overlay_next_widget_style_meta: Meta = .{};

View file

@ -273,7 +273,7 @@ fn process_project_manager(self: *Self, m: tp.message) MessageFilter.Error!void
self.menu.select_down();
self.need_select_first = false;
}
tui.need_render();
tui.need_render(@src());
} else if (try cbor.match(m.buf, .{
"PRJ",
"recent",
@ -291,7 +291,7 @@ fn process_project_manager(self: *Self, m: tp.message) MessageFilter.Error!void
self.menu.select_down();
self.need_select_first = false;
}
tui.need_render();
tui.need_render(@src());
} else if (try cbor.match(m.buf, .{ "PRJ", "recent_done", tp.extract(&self.longest), tp.extract(&query), tp.extract(&self.total_files_in_project) })) {
self.update_count_hint();
self.query_pending = false;
@ -492,7 +492,7 @@ const cmds = struct {
pub fn overlay_next_widget_style(self: *Self, _: Ctx) Result {
tui.set_next_style(widget_type);
self.do_resize();
tui.need_render();
tui.need_render(@src());
try tui.save_config();
}
pub const overlay_next_widget_style_meta: Meta = .{};

View file

@ -635,7 +635,7 @@ pub fn Create(options: type) type {
tui.set_next_style(widget_type);
const padding = tui.get_widget_style(widget_type).padding;
self.do_resize(padding);
tui.need_render();
tui.need_render(@src());
try tui.save_config();
}
pub const overlay_next_widget_style_meta: Meta = .{};

View file

@ -188,7 +188,7 @@ fn process_project_manager(self: *Self, m: tp.message) MessageFilter.Error!void
self.menu.select_down();
self.need_select_first = false;
}
tui.need_render();
tui.need_render(@src());
} else if (try cbor.match(m.buf, .{
"PRJ",
"new_or_modified_files",
@ -207,7 +207,7 @@ fn process_project_manager(self: *Self, m: tp.message) MessageFilter.Error!void
self.menu.select_down();
self.need_select_first = false;
}
tui.need_render();
tui.need_render(@src());
} else if (try cbor.match(m.buf, .{ "PRJ", "new_or_modified_files_done", tp.extract(&self.longest), tp.extract(&query) })) {
self.query_pending = false;
self.need_reset = true;
@ -369,7 +369,7 @@ const cmds = struct {
pub fn overlay_next_widget_style(self: *Self, _: Ctx) Result {
tui.set_next_style(widget_type);
self.do_resize();
tui.need_render();
tui.need_render(@src());
try tui.save_config();
}
pub const overlay_next_widget_style_meta: Meta = .{};

View file

@ -95,7 +95,7 @@ pub fn render(self: *Self, theme: *const Widget.Theme) bool {
fn receive_tick(self: *Self, _: tp.pid_ref, m: tp.message) MessageFilter.Error!bool {
if (try cbor.match(m.buf, .{"CLOCK"})) {
tui.need_render();
tui.need_render(@src());
self.update_tick_timer(.ticked);
return true;
}

View file

@ -407,7 +407,7 @@ fn receive_safe(self: *Self, from: tp.pid_ref, m: tp.message) !void {
};
try self.dispatch_flush_input_event();
if (self.unrendered_input_events_count > 0 and !self.frame_clock_running)
need_render();
need_render(@src());
return;
}
@ -1613,21 +1613,21 @@ const cmds = struct {
pub fn panel_next_widget_style(_: *Self, _: Ctx) Result {
set_next_style(.panel);
need_render();
need_render(@src());
try save_config();
}
pub const panel_next_widget_style_meta: Meta = .{};
pub fn hint_window_next_widget_style(_: *Self, _: Ctx) Result {
set_next_style(.hint_window);
need_render();
need_render(@src());
try save_config();
}
pub const hint_window_next_widget_style_meta: Meta = .{};
pub fn dropdown_next_widget_style(_: *Self, _: Ctx) Result {
set_next_style(.dropdown);
need_render();
need_render(@src());
try save_config();
}
pub const dropdown_next_widget_style_meta: Meta = .{};
@ -1803,9 +1803,10 @@ fn maybe_reset_drag_source(self: *Self, btn: input.MouseType) void {
self.drag_button = 0;
}
pub fn need_render() void {
pub fn need_render(src: std.builtin.SourceLocation) void {
const self = current();
if (!(self.render_pending or self.frame_clock_running)) {
tp.trace(tp.channel.debug, .{ "tui", "need_render", src.fn_name, src.file, src.line });
self.render_pending = true;
tp.self_pid().send(.{"render"}) catch {};
}
@ -1819,7 +1820,7 @@ pub fn frames_rendered() usize {
pub fn resize() void {
mainview_widget().resize(screen());
refresh_hover();
need_render();
need_render(@src());
}
pub fn plane() renderer.Plane {