perf(table): avoid extra allocations when rendering Table (#1242)

When rendering a `Table` the `Text` stored inside of a `Cell` gets
cloned before rendering. This removes the clone and uses `WidgetRef`
instead, saving us from allocating a `Vec<Line<'_>>` inside `Text`. Also
avoids an allocation when rendering the highlight symbol if it contains
an owned value.
This commit is contained in:
Tayfun Bocek 2024-07-26 18:48:29 +00:00 committed by GitHub
parent efef0d0dc0
commit be3eb75ea5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 2 additions and 2 deletions

View file

@ -134,7 +134,7 @@ impl<'a> Cell<'a> {
impl Cell<'_> { impl Cell<'_> {
pub(crate) fn render(&self, area: Rect, buf: &mut Buffer) { pub(crate) fn render(&self, area: Rect, buf: &mut Buffer) {
buf.set_style(area, self.style); buf.set_style(area, self.style);
self.content.clone().render(area, buf); self.content.render_ref(area, buf);
} }
} }

View file

@ -722,7 +722,7 @@ impl Table<'_> {
..row_area ..row_area
}; };
buf.set_style(selection_area, row.style); buf.set_style(selection_area, row.style);
highlight_symbol.clone().render(selection_area, buf); highlight_symbol.render_ref(selection_area, buf);
}; };
for ((x, width), cell) in columns_widths.iter().zip(row.cells.iter()) { for ((x, width), cell) in columns_widths.iter().zip(row.cells.iter()) {
cell.render( cell.render(