If you don't care about linux browser side font issues you can skip this. I've been chasing Linux font metrics problems all week and wanted to send around a summary in case anyone has insight or opinions.
app/gfx/font on linux uses Skia for measuring metrics, and app/gfx/canvas uses Pango to draw the text. When rendering the text we often times clip to the height returned from font, which is the size returned from Skia. This means that if Skia returns a size smaller than Pango wants to draw at, we get clipping; which was in fact happening. In theory both Skia and Pango should be using the same font files so this doesn't happen, but in practice we get clipping. See http://crbug.com/20823 for one manifestation of this. My first attempt at fixing this was to change font to use Pango for measuring rather than Skia. This resulted in no clipping, but a huge performance regression (close to 2x). Why so big? ResourceBundle creates a number of fonts the first time you ask for one, which triggers asking for the metrics. Apparently asking Pango for the metrics is excruciatingly slow as compared to Skia. It turns out we really only need the metrics of one font at startup (tab heights). My second attempt delayed getting metrics until needed, which brought performance down, but still resulted in a slow down of ~10%. Better, but still no good. The slow down is entirely contributed to the call pango_context_get_metrics. It's worth noting that Gtk calls this function at times as well, so presumably our Gtk code hits this function at some point (if you have bookmarks bar open we'll hit it, or open preferences...). I then spent some time with a debug build of pango and a profiler. This was not terribly enlightening, the profiler attributed the extra time to libfontconfig. I then started tracing through pango code to see if I could locate where Skia and Pango diverge on getting metrics. I traced through some calls and these quickly ended up in Cairo. *SIGH* At that point I talked with Mike Reed and he suggested using the bounding box rather than the ascent/descent. Converting font to use this gets us much closer. For the default font on hardy we are dead on, but at some point sizes we are off by 1. For the time being I'm going with using the bounding box rather than ascent/descent. I believe using pango to get metrics is the right thing to do, but a 10% startup is hard to justify. -Scott --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---