benchmarking X11 on embedded systems
using the official benchmarking tool of EFL to test X11 performance
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-maskto 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.
NEWS