Skip to contentSkip to conversation

avoid expensive load of all fonts

PATCH In review Robert Millan 2 participants 4 messages Jul 4, 2008 – Jul 23, 2008 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 avoid expensive load of all fonts

This makes update-grub avoid expensive load of complete font files and instead rely on ascii.pff when it is available. In qemu, it brings startup time roughly from 25s to 1s.

Signature · 5 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)

2008-07-04 Robert Millan <[email protected]>

* Makefile.in (UNICODE_ARROWS, UNICODE_LINES): New variables (they define the codes for arrows and lines used for the menu). (ascii.pff): Generate fonts for $(UNICODE_ARROWS) and $(UNICODE_LINES) as well.

* util/update-grub_lib.in (font_path): Prefer ascii.pff over complete fonts, because the latter are too slow.

Makefile.in +6 -1
Index: Makefile.in
===================================================================
@@ -142,11 +142,16 @@
 ifeq (, $(UNIFONT_HEX))
 else
 pkgdata_DATA += unicode.pff ascii.pff
+
+# Arrows and lines are needed to draw the menu, so we always include them
+UNICODE_ARROWS=0x2190-0x2193
+UNICODE_LINES=0x2501-0x251B
+
 unicode.pff: $(UNIFONT_HEX)
 	ruby $(srcdir)/util/unifont2pff.rb $(UNIFONT_HEX) > $@
 
 ascii.pff: $(UNIFONT_HEX)
-	ruby $(srcdir)/util/unifont2pff.rb 0-127 $(UNIFONT_HEX) > $@
+	ruby $(srcdir)/util/unifont2pff.rb 0x0-0x7f $(UNICODE_ARROWS) $(UNICODE_LINES) $(UNIFONT_HEX) > $@
 endif
 
 all-local: $(PROGRAMS) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(MKFILES)
update-grub_lib.in +3 -2
Index: util/update-grub_lib.in
===================================================================
@@ -131,8 +131,9 @@
 font_path ()
 {
   for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
-    # Prefer complete fonts over incomplete ones.
-    for basename in unicode unifont ascii ; do
+    # FIXME: We prefer ascii because loading complete fonts is too slow (and
+    # we don't yet provide the gettext magic that would make unicode useful).
+    for basename in ascii unicode unifont ; do
       path="${dir}/${basename}.pff"
       if is_path_readable_by_grub ${path} > /dev/null ; then
         echo "${path}"
#1 lore raw

Committed.

Quoted 65 lines · Robert Millan

This makes update-grub avoid expensive load of complete font files and instead rely on ascii.pff when it is available. In qemu, it brings startup time roughly from 25s to 1s.

Signature · 18 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)

2008-07-04  Robert Millan  <[email protected]>

	* Makefile.in (UNICODE_ARROWS, UNICODE_LINES): New variables (they
	define the codes for arrows and lines used for the menu).
	(ascii.pff): Generate fonts for $(UNICODE_ARROWS) and $(UNICODE_LINES)
	as well.

	* util/update-grub_lib.in (font_path): Prefer ascii.pff over complete
	fonts, because the latter are too slow.

Index: Makefile.in
===================================================================
Makefile.in +6 -1
@@ -142,11 +142,16 @@
 ifeq (, $(UNIFONT_HEX))
 else
 pkgdata_DATA += unicode.pff ascii.pff
+
+# Arrows and lines are needed to draw the menu, so we always include them
+UNICODE_ARROWS=0x2190-0x2193
+UNICODE_LINES=0x2501-0x251B
+
 unicode.pff: $(UNIFONT_HEX)
 	ruby $(srcdir)/util/unifont2pff.rb $(UNIFONT_HEX) > $@
 
 ascii.pff: $(UNIFONT_HEX)
-	ruby $(srcdir)/util/unifont2pff.rb 0-127 $(UNIFONT_HEX) > $@
+	ruby $(srcdir)/util/unifont2pff.rb 0x0-0x7f $(UNICODE_ARROWS) $(UNICODE_LINES) $(UNIFONT_HEX) > $@
 endif
 
 all-local: $(PROGRAMS) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(MKFILES)

Index: util/update-grub_lib.in
===================================================================

update-grub_lib.in +3 -2
@@ -131,8 +131,9 @@
 font_path ()
 {
   for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
-    # Prefer complete fonts over incomplete ones.
-    for basename in unicode unifont ascii ; do
+    # FIXME: We prefer ascii because loading complete fonts is too slow (and
+    # we don't yet provide the gettext magic that would make unicode useful).
+    for basename in ascii unicode unifont ; do
       path="${dir}/${basename}.pff"
       if is_path_readable_by_grub ${path} > /dev/null ; then
         echo "${path}"

_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel

Signature · 5 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)
#2 lore raw
Quoted 2 lines · Robert Millan

Makefile.in line 154

Quoted 2 lines
Makefile.in +1 -1
-	ruby $(srcdir)/util/unifont2pff.rb 0-127 $(UNIFONT_HEX) > $@
+	ruby $(srcdir)/util/unifont2pff.rb 0x0-0x7f $(UNICODE_ARROWS) $(UNICODE_LINES) $(UNIFONT_HEX) > $@

We should be able to use 0x20-0x7f. I checked it and it seems to be OK.

Signature · 2 lines
Regards,
Pavel Roskin
#3 lore raw
Quoted 5 lines · Pavel Roskin
Quoted 2 lines · Robert Millan

Makefile.in line 154

Quoted 2 lines
Makefile.in +1 -1
-	ruby $(srcdir)/util/unifont2pff.rb 0-127 $(UNIFONT_HEX) > $@
+	ruby $(srcdir)/util/unifont2pff.rb 0x0-0x7f $(UNICODE_ARROWS) $(UNICODE_LINES) $(UNIFONT_HEX) > $@

We should be able to use 0x20-0x7f. I checked it and it seems to be OK.

Fine with me. A few milliseconds less :-)

Signature · 5 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)