[PATCH] Use new pixman_glyph_cache_t API that will be in pixman 0.28.0
Søren Sandmann
sandmann at cs.au.dk
Wed Sep 12 08:38:02 PDT 2012
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.
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.
Soren
More information about the xorg-devel
mailing list