benchmarking X11 on embedded systems


using the official benchmarking tool of EFL to test X11 performance

Originally posted on - 13 Oct, 2008


We often read that X11 is slow because it’s a server-client architecture, because it uses a protocol to exchange commands and more, saying that it’s unusable for embedded systems. However proofs fail to show.

Today we did benchmark X11, framebuffer, DirectFB on our Freescale i.MX31 development board to measure impact and not surprisingly to us but maybe to lots of people, X11 did well.

UPDATE: The charts are about frames per second (FPS), so more is better.

UPDATE (2): Take x11-16 values with a grain of salt, it’s faster than everything, including FB because it’s already in the correct bit-depth and does not require the 32->16bpp conversion. We don’t have native 16bpp engines for FB, DirectFB and that’s why these are not measured.

As you can see, the client-server approach adds no huge penalty as some would say.

Now some considerations and explanations about the benchmark:

  • Measured using expedite tool that in turn uses evas as canvas.
  • all systems are not accelerated, X is running under Xfbdev, DirectFB also is running on software.
  • screen bit depth is 16 bits per pixel (bpp) so conversion was necessary in all systems except of x11-16 which runs at that bit-depth by default. Evas is compiled with --enable-no-dither-mask to disable dithering while converting, it will look a bit uglier than with a huge dither mask (128x128) or even the small (4x4), but runs faster. This is also the reason why x11-16 is much faster than everything else.
  • Evas uses Xshm (X-Shared Memory) extension to transfer pixmaps, instead of piping them through the socket.
  • Evas does dirty-area optimization, so it will apply clips to images before blits to reduce number of painted pixels.

If you don’t know expedite, a description of each test follows:

Image Blend Unscaled
Uses 128 copies of a 120x160 image with alpha channel, these images are laid on on top of each other and move like a snake. That means that for some pixels that have the 128 images overlapping it will have to draw these 128 times, doing the alpha-interpolation.
Image Blend Solid Unscaled
Uses 128 copies of a 120x160 image without alpha channel (solid), these images are laid on on top of each other and move like a snake. Unlike Image Blend Unscaled you never paint the same pixel twice, but you have to do some extra work to know how to avoid that drawing (dirty-area optimization).
Image Blend Nearest Scaled
Similar to Image Blend Unscaled, but also doing scale of all images using nearest-scale algorithm.
Image Blend Nearest Solid Scaled
Similar to Image Blend Solid Unscaled, but also doing scale of all images using nearest-scale algorithm.
Image Crossfade
Fade from one 720x420 solid image to another, just like the slide show effects
Text Basic
Uses 128 text objects with solid color, these are moving and overlapping.
Text Styles
Just like Text Basic, but using various effects like glow, shadow, border, soft shadow...
Text Styles Different Strings
Similarto Text Styles, but using different phrases with different sizes.
Text Change
128 text objects using solid color that instead of moving they change their contents.
Textblock Basic
A single textblock object with multi-line and multi-style text inside, this block is moving around the canvas.
Textblock Intl
Similar to Textblock Basic, but using various languages.
Rect Blend
128 semi-transparent rectangles moving randomly. If these 128 objects overlap, that pixel will be repainted up to 128 times, doing alpha interpolation
Rect Solid
128 opaque (solid) rectangles moving randomly. No pixel will be repainted more than once, but we need to do some extra work to calculate that.
Image Blend Occlude
These tests use 128 images with a mix of opaque and semi-transparent images that interleave each other, the opaque images will automatically create and occlusion area, avoiding pixels under it to be repainted.