freebsd-nq/sys/dev/vt
Colin Percival ee97b2336a Speed up vt(4) by keeping a record of the most recently drawn character and
the foreground and background colours.  In bitblt_text functions, compare
values to this cache and don't re-draw the characters if they haven't changed.
When invalidating the display, clear this cache in order to force characters
to be redrawn; also force full redraws between suspend/resume pairs since odd
artifacts can otherwise result.

When scrolling the display (which is where most time is spent within the vt
driver) this yields a significant performance improvement if most lines are
less than the width of the terminal, since this avoids re-drawing blanks on
top of blanks.

(Note that "re-drawing" here includes writing to the VGA text mode buffer; on
virtualized systems this can be extremely slow since it triggers a glyph
being rendered onto a 640x480 screen).

On a c5.4xlarge EC2 instance (with emulated text mode VGA) this cuts the time
spent in vt(4) during the kernel boot from 1200 ms to 700ms; on my laptop
(with a 3200x1800 display) the corresponding time is reduced from 970 ms down
to 155 ms.

Reviewed by:	imp, cem
Approved by:	re (gjb)
Relnotes:	Significant speedup in vt(4) and the system boot generally.
Differential Revision:	https://reviews.freebsd.org/D16723
2018-08-25 16:14:56 +00:00
..
colors vt(4): Use default VGA palette 2018-05-10 17:00:33 +00:00
font Update vt(4) "Terminus BSD Console" font to v4.46 2018-04-12 20:21:04 +00:00
hw Speed up vt(4) by keeping a record of the most recently drawn character and 2018-08-25 16:14:56 +00:00
logo sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
vt_buf.c teken, vt(4): New callbacks to lock the terminal once 2018-05-16 09:01:02 +00:00
vt_consolectl.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
vt_core.c Speed up vt(4) by keeping a record of the most recently drawn character and 2018-08-25 16:14:56 +00:00
vt_cpulogos.c vt(4): Resume vt_timer() in vtterm_post_input() only 2018-05-16 10:08:50 +00:00
vt_font.c Limit glyph count in vtfont_load to avoid integer overflow. 2018-04-04 05:21:46 +00:00
vt_sysmouse.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
vt.h Speed up vt(4) by keeping a record of the most recently drawn character and 2018-08-25 16:14:56 +00:00