[HarfBuzz] Some optimizations
Behdad Esfahbod
behdad at behdad.org
Wed Oct 10 17:33:28 PDT 2007
Hi,
For Boston Summit this year I sat down optimizing harfbuzz buffer a bit
to avoid unnecessary copy/swap'ing when glyphs do not change. The idea
is to use the same string for in and out, essentially working in-place,
until a change that doesn't fit in-place is needed at which point we
lazily create a separate out buffer and copy over.
Unfortunately I didn't start this in a git-svn pango checkout and ended
up piling changes on top of each other.
Around the final round it was about 1700 lines worth of diff, but to
find why a particular Invalid_SubTable error was being hit I needed to
see where the error is originating from, so I renamed remaining FT_Err
instances to HB_Err and made the entire code call _hb_err() when
returning an original error, so you can set a breakpoint on it. It
helped debugging the bug in a minute, but also means that the patch is
over 7000 lines now :(. Sorry Simon :(.
Anyway, it's here:
http://bugzilla.gnome.org/show_bug.cgi?id=485559
Quick summary:
2007-10-10 Behdad Esfahbod <behdad at gnome.org>
Bug 485559 – Boston Summit HarfBuzz optimizations
* pango/opentype/*: HarfBuzz hacking to:
- Rename last remaining FT_Err stuff to HB_Err.
- Fix a couple invalid table paths to be permissive so
fonts work better. Particularly GDEF table for Nafees
Nastaliq is loaded and works great now.
- Optimize harfbuzz buffer to not copy/swap for simple
one-to-one and "copy" GSUB operations.
* pango/pango-ot*: Update to FT_Err to HB_Err renaming.
I think the easiest way to apply it to harfbuzz upstream is to rip out
the FT_Err and _hb_err changes out, apply it, and redo them... I'll
give it a try if it's too much pain for Simon to do (which I totally
understand if it is), but other than that, it can use a pair of eyes.
Specially the harfbuzz-buffer changes.
Tomorrow I'll make pango cache a single harfbuzz buffer instead of
recreating them all the time.
A very warm feeling of doing this all is that I feel much more
comfortable with the GSUB code now. GPOS still has a bit of mystery to
discover. All in all quite good just in time for picking up the rewrite
again, which I'm starting next week.
Regards,
--
behdad
http://behdad.org/
"Those who would give up Essential Liberty to purchase a little
Temporary Safety, deserve neither Liberty nor Safety."
-- Benjamin Franklin, 1759
More information about the HarfBuzz
mailing list