[Pixman] performance of bilinear_interpolation

Siarhei Siamashka siarhei.siamashka at gmail.com
Tue Oct 1 18:28:00 PDT 2013

On Fri, 27 Sep 2013 16:42:08 +0100
Chris Wilson <chris at chris-wilson.co.uk> wrote:

> On Fri, Sep 27, 2013 at 01:17:45AM +0300, Siarhei Siamashka wrote:
> > Unfortunately, all that I could record so far is a broken trace :-(
> > Maybe somebody else will be more lucky? If anybody is interested, just
> > go to http://manichord.com/opensign/ffdebug/ffscroll.html in Firefox,
> > press ctrl-+ to zoom the page a bit and scroll it left/right for a
> > while. The Firefox browser needs to be launched by the cairo-trace tool.
> Lots of bugs in cairo-trace exposed by trying to record recent ff. :(
> All appear to be fixed, and I've upload a firefox-canvas-scroll.trace to
> the cairo-traces.git

Thanks for the fix. Firefox traces can be recorded now. I had a
look at the firefox-canvas-scroll trace, but it does not fully
represent this interesting use case. The trace has too much of
blt (which eclipses the other operations), and too little of

Profiling this trace shows:

33.18%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] sse2_blt.part.10
29.17%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] sse2_composite_over_8888_8888
15.86%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] sse2_fill
 8.63%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] bits_image_fetch_bilinear_affine_pad_x8r8g8b8
 3.76%  cairo-perf-trac  liblzo2.so.2.0.0      [.] lzo2a_decompress
 1.06%  cairo-perf-trac  libc-2.15.so          [.] __memcpy_ssse3

While running "perf record -p `pidof firefox" and profiling only the
scrolling part in Firefox (without any possible initial setup overhead)
seems to show no major blt usage:

25.67%  firefox  libpixman-1.so.0.31.1 [.] sse2_composite_over_8888_8888
24.86%  firefox  libpixman-1.so.0.31.1 [.] bits_image_fetch_bilinear_affine_pad_x8r8g8b8
14.84%  firefox  libpixman-1.so.0.31.1 [.] sse2_fill
 1.87%  firefox  libpixman-1.so.0.31.1 [.] sse2_blt.part.10
 0.82%  firefox  libc-2.15.so          [.] __memcpy_ssse3

I tried to record a new Firefox trace myself and also make it
shorter, so that it is usable on much slower embedded systems:


35.55%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] bits_image_fetch_bilinear_affine_pad_x8r8g8b8
18.83%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] sse2_composite_over_8888_8888
 7.71%  cairo-perf-trac  libc-2.15.so          [.] __memset_sse2
 7.23%  cairo-perf-trac  liblzo2.so.2.0.0      [.] lzo2a_decompress
 5.01%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] sse2_fill
 2.71%  cairo-perf-trac  libc-2.15.so          [.] __memcpy_ssse3
 2.48%  cairo-perf-trac  libpixman-1.so.0.31.1 [.] sse2_blt.part.10

Additionally, Firefox is configured to use client side software
rendering by setting gfx.xrender.enabled=false in about:config
(in order to make it behave more like it behaves in Android).

Best regards,
Siarhei Siamashka

More information about the Pixman mailing list