[PATCH] Use new pixman_glyph_cache_t API that will be in pixman 0.28.0
Aaron Plattner
aplattner at nvidia.com
Wed Sep 12 11:17:23 PDT 2012
On 09/12/2012 08:38 AM, Søren Sandmann wrote:
> Aaron Plattner <aplattner at nvidia.com> writes:
>
>> I ran some cairo-perf-trace numbers on Xorg with an accelerated driver.
>>
>> xorg-server-1.13.0, glyph cache disabled:
>> [ # ] backend test min(s) median(s) stddev. count
>> [ 0] xlib firefox-particles 40.857 40.865 0.02% 6/6
>> [ 1] xlib firefox-paintball 11.768 11.808 0.19% 6/6
>> [ 2] xlib firefox-canvas-alpha 16.479 16.526 0.12% 5/6
>> [ 3] xlib poppler 11.352 11.366 0.14% 6/6
>> [ 4] xlib firefox-fishtank 17.543 18.228 1.71% 6/6
>> [ 5] xlib grads-heat-map 1.027 1.029 0.39% 6/6
>> [ 6] xlib firefox-planet-gnome 65.004 65.774 0.52% 6/6
>> [ 7] xlib firefox-asteroids 5.264 5.351 0.73% 6/6
>> [ 8] xlib gvim 32.072 32.174 0.13% 6/6
>> [ 9] xlib firefox-fishbowl 21.931 22.005 0.22% 6/6
>> [ 10] xlib xfce4-terminal-a1 52.258 52.264 0.01% 6/6
>> [ 11] xlib swfdec-youtube 1.145 1.151 0.64% 6/6
>> [ 12] xlib gnome-system-monitor 0.981 0.985 0.44% 6/6
>> [ 13] xlib firefox-talos-gfx 289.889 290.303 0.06% 6/6
>> [ 14] xlib firefox-canvas 19.338 19.432 0.25% 6/6
>> [ 15] xlib chromium-tabs 0.882 0.882 0.23% 6/6
>> [ 16] xlib ocitysmap 2.443 2.449 0.20% 6/6
>> [ 17] xlib firefox-chalkboard 40.415 40.523 0.21% 6/6
>> [ 18] xlib swfdec-giant-steps 0.943 0.951 0.38% 6/6
>> [ 19] xlib gnome-terminal-vim 52.718 53.061 0.30% 6/6
>> [ 20] xlib midori-zoomed 2.273 2.333 1.90% 6/6
>> [ 21] xlib poppler-reseau 1.310 1.320 0.47% 6/6
>> [ 22] xlib firefox-scrolling 43.793 43.857 0.07% 6/6
>> [ 23] xlib evolution 22.583 22.641 0.41% 6/6
>> [ 24] xlib firefox-talos-svg 9.642 9.675 0.21% 6/6
>>
>> Patched server, glyph cache disabled:
>> [ # ] backend test min(s) median(s) stddev. count
>> [ 0] xlib firefox-particles 43.594 43.776 0.17% 6/6
>> [ 1] xlib firefox-paintball 168.643 231.273 18.26% 15/15
>> [ 2] xlib firefox-canvas-alpha 23.311 26.393 7.42% 15/15
>> [ 3] xlib poppler 51.008 297.202 78.74% 15/15
>> [ 4] xlib firefox-fishtank 21.156 22.360 3.15% 9/10
>> [ 5] xlib grads-heat-map 1.281 1.293 1.18% 6/6
>> [ 6] xlib firefox-planet-gnome 329.353 409.242 23.40% 13/15
>> [ 7] xlib firefox-asteroids 6.670 8.161 30.56% 13/15
>> [ 8] xlib gvim 84.067 123.407 22.94% 15/15
>> [ 9] xlib firefox-fishbowl 26.213 32.346 22.61% 14/15
>> [ 10] xlib xfce4-terminal-a1 28.574 52.436 54.31% 14/15
>> [ 11] xlib swfdec-youtube 1.282 1.338 4.44% 6/6
>> [ 12] xlib gnome-system-monitor 1.642 1.937 10.61% 12/15
>> [ 13] xlib firefox-talos-gfx 2220.084 10429.123 54.35% 6/62 (killed due to impatience)
>> [ 1] xlib firefox-canvas 22.100 22.502 0.83% 6/6
>> [ 2] xlib chromium-tabs 0.950 1.744 37.14% 15/15
>> [ 3] xlib ocitysmap 3.102 3.432 8.10% 13/15
>> [ 4] xlib firefox-chalkboard 42.544 45.774 4.40% 11/11
>> [ 5] xlib swfdec-giant-steps 1.057 1.078 0.86% 6/6
>> [ 6] xlib gnome-terminal-vim 233.452 456.153 69.32% 15/15
>> [ 7] xlib midori-zoomed 11.872 17.229 13.06% 12/15
>> [ 8] xlib poppler-reseau 1.775 1.857 3.89% 6/6
>> [ 9] xlib firefox-scrolling 563.500 654.048 21.18% 13/15
>> [ 10] xlib evolution 76.294 133.114 33.33% 13/15
>> [ 11] xlib firefox-talos-svg 19.806 22.824 19.78% 13/15
>>
>
>> That's pretty dire. Thankfully, the glyph cache is enabled by default
>> and works most of the time, but there are a few corner cases where it
>> might fall back and this seems like a pretty severe penalty for that
>> happening.
>
> Would it work to just call miGlyphs() instead of calling down through
> the function pointer? That's what it looks like exa does.
That breaks the wrap chain, but I suppose I could replace the Glyphs hook with
miGlyphs immediately after calling [w]fbScreenInit.
> Conceptually, calling miGlyphs() says "I want the behavior of
> miGlyphs()" and calling the pointer says "I want whatever the lower
> layer provides". For a hardware driver, especially one where framebuffer
> access is really expensive, calling miGlyphs() directly is more
> appropriate I think.
Assuming I can rely on miGlyphs being there, this seems annoying but not
horrible, so with reservations, Acked-by: Aaron Plattner <aplattner at nvidia.com>
-- Aaron
More information about the xorg-devel
mailing list