[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