term: try to improve on a performance regression

When support was added for DECOM (absolute/relative row addressing), a
small but noticeable (~3.5%) performance regression was introduced.

Try to improve the situation by simplifying the relative-to-absolute
conversion; only the row needs to be transformed.
This commit is contained in:
Daniel Eklöf 2019-11-17 18:52:27 +01:00
parent cf75528e86
commit 9902a5732f
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 17 additions and 29 deletions

20
csi.c
View file

@ -330,9 +330,9 @@ csi_dispatch(struct terminal *term, uint8_t final)
case 'd': {
/* VPA - vertical line position absolute */
struct coord new_cursor = term_cursor_rel_to_abs(
term, vt_param_get(term, 0, 1) - 1, term->cursor.point.col);
term_cursor_to(term, new_cursor.row, new_cursor.col);
int rel_row = vt_param_get(term, 0, 1) - 1;
int row = term_row_rel_to_abs(term, rel_row);
term_cursor_to(term, row, term->cursor.point.col);
break;
}
@ -399,20 +399,18 @@ csi_dispatch(struct terminal *term, uint8_t final)
case '`':
case 'G': {
/* Cursor horizontal absolute */
struct coord new_cursor = term_cursor_rel_to_abs(
term, term->cursor.point.row, vt_param_get(term, 0, 1) - 1);
term_cursor_to(term, new_cursor.row, new_cursor.col);
int col = min(vt_param_get(term, 0, 1), term->cols) - 1;
term_cursor_to(term, term->cursor.point.row, col);
break;
}
case 'f':
case 'H': {
/* Move cursor */
struct coord new_cursor = term_cursor_rel_to_abs(
term,
vt_param_get(term, 0, 1) - 1,
vt_param_get(term, 1, 1) - 1);
term_cursor_to(term, new_cursor.row, new_cursor.col);
int rel_row = vt_param_get(term, 0, 1) - 1;
int row = term_row_rel_to_abs(term, rel_row);
int col = min(vt_param_get(term, 1, 1), term->cols) - 1;
term_cursor_to(term, row, col);
break;
}