Thread (6 messages) 6 messages, 3 authors, 2015-05-27

Re: [PATCH] fbuffer: improve toggle cursor performance

From: Nikunj A Dadhania <hidden>
Date: 2015-05-27 09:22:14

Greg Kurz [off-list ref] writes:
On Wed, 27 May 2015 10:41:06 +0530
Nikunj A Dadhania [off-list ref] wrote:
quoted
Greg Kurz [off-list ref] writes:
quoted
SLOF currently calls hv-logical-load and hv-logical-store for every pixel
when enabling or disabling the cursor. This is suboptimal when writing one
char at a time to the console since terminal-write always toggles the cursor.
And this is precisely what grub is doing when the user wants to edit a menu
entry... the result is an incredibly slow and barely usable interface.

The inner loop in fb8-toggle-cursor handles a contiguous region: it can be
converted to hv-logical-memop. The result is 32 times less hcalls per char
and a serious improvement in grub usability.

Signed-off-by: Greg Kurz <redacted>
---
 slof/fs/fbuffer.fs |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/slof/fs/fbuffer.fs b/slof/fs/fbuffer.fs
index 756f05a..46b59bf 100644
--- a/slof/fs/fbuffer.fs
+++ b/slof/fs/fbuffer.fs
@@ -99,8 +99,8 @@ CREATE bitmap-buffer 400 4 * allot
 : fb8-toggle-cursor ( -- )
 	line# fb8-line2addr column# fb8-columns2bytes +
 	char-height 0 ?DO
-		char-width screen-depth * 0 ?DO dup dup rb@ -1 xor swap rb! 1+ LOOP
-		screen-width screen-depth * + char-width screen-depth * -
+		dup dup 0 char-width screen-depth * 1 hv-logical-memop drop
+		screen-width screen-depth * +
Why did you drop "char-width screen-depth * -" in the new code? This is
not me mentioned in the description.
This is because the current inner loop increments the address. When the loop
ends, we're pointing at the next char, that is char-width * screen-depth bytes
too far.

In the new code, the address is duped on the stack before calling hv-logical-memop,
so we don't need to fix it when proceeding to next line.
Ah ok, i missed that 1+ in the loop.
In my first attempt, I forgot to drop the subtraction and got an interesting
visual result :)
Regards
Nikunj
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help