d04b388381
For payloads with UI based on CBGFX, they usually start by calling clear_canvas or clear_screen and then draw the UI elements. However, that makes the screen flicker. A typical solution is to identify and minimize the area to redraw. However for payloads with complicated UI and do not care about latency, an alternative is to enable buffered I/O. The new enable_graphics_buffer() will redirect all graphics I/O into an invisible working buffer. To flush (redraw) the buffer to the real screen, call flush_graphics_buffer(). To stop buffering, call disable_graphics_buffer(). BUG=None TEST=Add the enable, flush and disable calls to payload 'depthcharge', built a firmware and boots into Chrome OS recover UI. No more flickering. The average rendering time on x86 platform is 1.2ms. Change-Id: Id60a2824fd9e164feae16b92b68b003beabea8d3 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/44654 Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: Yu-Ping Wu <yupingso@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> |
||
---|---|---|
.. | ||
arm/arch | ||
arm64/arch | ||
arpa | ||
pci | ||
storage | ||
sys | ||
udc | ||
usb | ||
x86/arch | ||
archive.h | ||
assert.h | ||
cbfs.h | ||
cbfs_core.h | ||
cbfs_ram.h | ||
cbgfx.h | ||
compiler.h | ||
coreboot_tables.h | ||
ctype.h | ||
die.h | ||
endian.h | ||
errno.h | ||
exception.h | ||
fmap_serialized.h | ||
fpmath.h | ||
gdb.h | ||
getopt.h | ||
inttypes.h | ||
ipchksum.h | ||
kconfig.h | ||
keycodes.h | ||
libpayload.h | ||
limits.h | ||
lz4.h | ||
lzma.h | ||
malloc.h | ||
multiboot_tables.h | ||
panel.h | ||
pci.h | ||
queue.h | ||
stdarg.h | ||
stddef.h | ||
stdint.h | ||
stdio.h | ||
stdlib.h | ||
string.h | ||
strings.h | ||
sysinfo.h | ||
term.h | ||
time.h | ||
unistd.h | ||
video_console.h |