[Pixman] [RFC] Performance reporting capabilities for pixman?

Siarhei Siamashka siarhei.siamashka at gmail.com
Wed Oct 20 05:46:57 PDT 2010


On Wednesday 20 October 2010 13:40:26 Maarten Bosmans wrote:
> 2010/10/20 Siarhei Siamashka <siarhei.siamashka at gmail.com>:
> > Here is a work-in-progress branch with the initial variant slow path
> > reporting code:
> > http://cgit.freedesktop.org/~siamashka/pixman/log/?h=perfstat-wip
> 
> I tried to compile it for Window using mingw. It failed because
> pthread and syslog are unavailable.

Thanks for testing this early preview code. I actually never expected that
somebody would be interesting in it working in windows and had plans to
only implement it as an optional feature for linux. It's great that there
is demand for this functionality in the other systems too.

> I "solved" the pthread issue by commenting out all the mutex lines.
> (my application does all drawing from one thread) The right approach
> is probably to include a cross-platform mutex in pixman-compiler.h. At
> least the mingw part can be factored out from the existing
> PIXMAN_DEFINE_THREAD_LOCAL implementation.
> 
> For missing syslog, a patch is attached. If no syslog is present, perf
> stats are just printed to stdout. It obviously isn't a complete patch,
> as I have not altered the autotools machinery to check for syslog.h
> and set HAVE_SYSLOG_H. Also the definition of PERF_LOG is rather ugly,
> with the missing opening brace on places the macro is used. My C
> preprocessor skills aren't sufficient to make something nice of it.
> But at least the patch suggests the changes necessary to make the perf
> stats work on mingw.

I still wonder about what would be the right place for the output (especially
on windows). By using syslog, my intention was to make it easy to collect some
pixman usage data from X server. Maybe environment variables can select whether 
we are going to use syslog, stdout, stderr or anything else?

> > Anyway, here is an example of usage of this code at the moment. It would
> > be nice if somebody could also try it and provide some feedback. And
> > there is also a possibility that it may help to find some good candidate
> > for optimizations even now.
> 
> Below are the results for the six worst slow paths, on Windows. My app
> does scrolling text (pre rendered to a cairo image surface), with
> individual lines fading in and out when they come into the viewport.

Thanks for sharing the data. Maybe you can try to make a cairo trace from
your application somehow? So that it could be used as one of the standard
cairo benchmarks?

> Perhaps an extra empty line after the decoded result and before the
> next undecoded line would be better for readability.

Right, thanks.

> pixman slow path: op=1 s=00000002|002EAA77 m=00000000|00000000
> d=20020888|002E0AFF - 21/1260 (0,054 MPix)
> 
> SRC
>     pixbuf                null                  x8r8g8b8
>     -- src --             -- mask --            -- dest --
>     NARROW_FORMAT                               NARROW_FORMAT
>     NO_ACCESSORS                                NO_ACCESSORS
>     NO_ALPHA_MAP                                NO_ALPHA_MAP
>     UNIFIED_ALPHA                               UNIFIED_ALPHA
>     NO_NONE_REPEAT                              NO_NORMAL_REPEAT
>     NO_NORMAL_REPEAT                            NO_PAD_REPEAT
>     NO_REFLECT_REPEAT                           NO_REFLECT_REPEAT
>     NEAREST_FILTER                              NEAREST_FILTER
>     NO_CONVOLUTION_FILTER                       NO_CONVOLUTION_FILTER
>     AFFINE_TRANSFORM                            AFFINE_TRANSFORM
>     ID_TRANSFORM                                ID_TRANSFORM
>     X_UNIT_POSITIVE                             X_UNIT_POSITIVE
>     Y_UNIT_ZERO                                 Y_UNIT_ZERO
>     IS_OPAQUE                                   SAMPLES_OPAQUE

Actually as I see it now, 'solid' and 'pixbuf' are just decoded wrong, they are
likely not even BITS types of images. So the reported "slow paths" involving
these are somewhat bogus. Still checking that there are no redundant pixel data
copies anywhere may be useful (be able to fetch directly to destination).

> pixman slow path: op=5 s=20028888|002F0A7F m=00000000|00000000
> d=20028888|002E0A7F - 465/352935 (321,171 MPix)
> 
> IN
>     a8r8g8b8              null                  a8r8g8b8
>     -- src --             -- mask --            -- dest --
>     [...]
>     SAMPLES_COVER_CLIP
> pixman slow path: op=5 s=20028888|002E0A7F m=00000000|00000000
> d=20028888|002E0A7F - 465/352935 (169,056 MPix)
> 
> IN
>     a8r8g8b8              null                  a8r8g8b8
>     -- src --             -- mask --            -- dest --

These look like valid candidates for optimization (unless there are some other 
bugs) and may provide a good performance improvement for your application once
optimized. I only wonder why we have SAMPLES_COVER_CLIP flag set for the source
image in one case, but not in the other?

-- 
Best regards,
Siarhei Siamashka
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/pixman/attachments/20101020/de35debb/attachment-0001.pgp>


More information about the Pixman mailing list