[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