terminal: cleaner impl of getTopLeft(.active)

This commit is contained in:
Mitchell Hashimoto
2024-03-17 21:18:24 -07:00
parent b76995b5af
commit e8a2dc5715

View File

@ -2369,17 +2369,18 @@ pub fn getTopLeft(self: *const PageList, tag: point.Tag) Pin {
// much faster because we don't need to update the top left. Under
// heavy load this makes a measurable difference.
.active => active: {
var page = self.pages.last.?;
var rem = self.rows;
while (rem > page.data.size.rows) {
rem -= page.data.size.rows;
page = page.prev.?; // assertion: we always have enough rows for active
}
break :active .{
var it = self.pages.last;
while (it) |page| : (it = page.prev) {
if (rem <= page.data.size.rows) break :active .{
.page = page,
.y = page.data.size.rows - rem,
};
rem -= page.data.size.rows;
}
unreachable; // assertion: we always have enough rows for active
},
};
}