mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
grid: reflow: free old rows as soon as we’re done with them
This reduces the memory cost of reflowing text, as we no longer needs to hold both the old and the new grid, in their entirety, in memory at the same time.
This commit is contained in:
parent
11c7990ec8
commit
1aa4a31c6f
1 changed files with 8 additions and 3 deletions
11
grid.c
11
grid.c
|
|
@ -655,6 +655,9 @@ grid_resize_and_reflow(
|
|||
line_wrap();
|
||||
}
|
||||
|
||||
grid_row_free(old_grid[old_row_idx]);
|
||||
grid->rows[old_row_idx] = NULL;
|
||||
|
||||
#undef print_spacer
|
||||
#undef line_wrap
|
||||
}
|
||||
|
|
@ -678,6 +681,10 @@ grid_resize_and_reflow(
|
|||
tll_foreach(row->extra->uri_ranges, it)
|
||||
xassert(it->item.end >= 0);
|
||||
}
|
||||
|
||||
/* Verify all old rows have been free:d */
|
||||
for (int i = 0; i < old_rows; i++)
|
||||
xassert(grid->rows[i] == NULL);
|
||||
#endif
|
||||
|
||||
/* Set offset such that the last reflowed row is at the bottom */
|
||||
|
|
@ -711,9 +718,7 @@ grid_resize_and_reflow(
|
|||
xassert(new_grid[idx] != NULL);
|
||||
}
|
||||
|
||||
/* Free old grid */
|
||||
for (int r = 0; r < grid->num_rows; r++)
|
||||
grid_row_free(old_grid[r]);
|
||||
/* Free old grid (rows already free:d) */
|
||||
free(grid->rows);
|
||||
|
||||
grid->rows = new_grid;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue