From 68e04907de6a13933805d3437872bd859f4ce6c1 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 6 Feb 2017 19:45:23 +0000 Subject: Do not go through the whole attributes setting process if the new cell is the same as the previous one. --- tty.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'tty.c') diff --git a/tty.c b/tty.c index 7ecf2a2d..c1769d14 100644 --- a/tty.c +++ b/tty.c @@ -246,6 +246,9 @@ tty_start_tty(struct tty *tty) tty_putcode(tty, TTYC_SGR0); memcpy(&tty->cell, &grid_default_cell, sizeof tty->cell); + memcpy(&tty->last_cell, &grid_default_cell, sizeof tty->last_cell); + tty->last_wp = -1; + tty_putcode(tty, TTYC_RMKX); if (tty_use_acs(tty)) tty_putcode(tty, TTYC_ENACS); @@ -1250,13 +1253,15 @@ tty_reset(struct tty *tty) { struct grid_cell *gc = &tty->cell; - if (grid_cells_equal(gc, &grid_default_cell)) - return; + if (!grid_cells_equal(gc, &grid_default_cell)) { + if ((gc->attr & GRID_ATTR_CHARSET) && tty_use_acs(tty)) + tty_putcode(tty, TTYC_RMACS); + tty_putcode(tty, TTYC_SGR0); + memcpy(gc, &grid_default_cell, sizeof *gc); + } - if ((gc->attr & GRID_ATTR_CHARSET) && tty_use_acs(tty)) - tty_putcode(tty, TTYC_RMACS); - tty_putcode(tty, TTYC_SGR0); - memcpy(gc, &grid_default_cell, sizeof *gc); + memcpy(&tty->last_cell, &grid_default_cell, sizeof tty->last_cell); + tty->last_wp = -1; } /* Turn off margin. */ @@ -1478,6 +1483,18 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, struct grid_cell *tc = &tty->cell, gc2; u_char changed; + /* Ignore cell if it is the same as the last one. */ + if (wp != NULL && + (int)wp->id == tty->last_wp && + ~(wp->window->flags & WINDOW_STYLECHANGED) && + gc->attr == tty->last_cell.attr && + gc->fg == tty->last_cell.fg && + gc->bg == tty->last_cell.bg) + return; + tty->last_wp = (wp != NULL ? (int)wp->id : -1); + memcpy(&tty->last_cell, gc, sizeof tty->last_cell); + + /* Copy cell and update default colours. */ memcpy(&gc2, gc, sizeof gc2); if (wp != NULL) tty_default_colours(&gc2, wp); -- cgit