Bug 21376

Summary: [UXA] Trapezoid performance regression
Product: xorg Reporter: Clemens Eisserer <linuxhippy>
Component: Driver/intelAssignee: Carl Worth <cworth>
Status: RESOLVED FIXED QA Contact: Xorg Project Team <xorg-team>
Severity: normal    
Priority: medium CC: eric
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:

Description Clemens Eisserer 2009-04-24 04:54:55 UTC
Applications using trapezoids a lot show a significant performance degradation on my system.

E.g. QGears archives 80fps on EXA (with intel-2.2.1 / xorg-1.3), however with UXA I only get ~7-10fps.
FireFox-3.1-beta3 renders the SVG (zoomed to fit in the window) in 50ms on XAA, however it takes 500ms on UXA: http://upload.wikimedia.org/wikipedia/commons/6/63/Periodic_table_%28german%29_4.svg

Oprofile shows that most time is spent inside pixman_rasterize_edge, however that code hasn't changed. I suspect some kind of suboptimal cache-setting to be the root of the slowdown.

My system is:
- Fedora Rawhide
- intel-2.7
- kernel-2.6.29.1
- xorg-1.6.1
- intel-945gm
Comment 1 Carl Worth 2009-06-22 11:17:15 UTC
Hi Clemens,

I made a performance improvement for trapezoids that made it into 2.7.99.901, (see below). Could you test this and let me know if the performance improvement is sufficient for you?

Thanks,

-Carl

commit accdbd23676d812d2345f86d8e3ee62f108841ff
Author: Carl Worth <cworth@cworth.org>
Date:   Fri May 29 15:34:20 2009 -0700

    UXA: Rasterize trapezoids to system memory, not a pixmap
    
    Since we're only doing software rasterization right now, anyway, it
    makes more sense to just rasterize to system memory and then upload
    to a pixmap once complete. This avoids expensive read-modify-write
    cycles.
    
    This results in a 2.4x speedup for a real-world test case that's
    heavy on trapezoids, which is swfdec running on the following file:
    
    http://michalevy.com/wp-content/uploads/Giant%20Steps%202007.swf
    
    Many thanks to Chris Wilson for his cairo-traces repository and
    cairo-perf-trace tool which makes it so easy to measure things
    like this.