EXA and damage performance problem
Michel Dänzer
michel at daenzer.net
Thu Dec 1 03:47:14 PST 2011
On Die, 2011-11-29 at 14:33 +0100, Christoph Bartoschek wrote:
>
> [...] most of the time is spent in ExaCheckPolylines
> which is called by this chain:
>
>
> damagePolyRectangle -> miPolyRectangle -> exaPolylines -> ExaCheckPolylines
>
> I've measured the runtime of the steps in ExaCheckPolylines:
>
>
> void
> ExaCheckPolylines (DrawablePtr pDrawable, GCPtr pGC,
> int mode, int npt, DDXPointPtr ppt)
> {
> EXA_PRE_FALLBACK_GC(pGC);
> EXA_FALLBACK(("to %p (%c), width %d, mode %d, count %d\n",
> pDrawable, exaDrawableLocation(pDrawable),
> pGC->lineWidth, mode, npt));
>
> exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); // Step1: 55 s
> exaPrepareAccessGC (pGC); // Step2: 2.4 s
> pGC->ops->Polylines (pDrawable, pGC, mode, npt, ppt); // Step3: 2.4 s
> exaFinishAccessGC (pGC); // Step4: 2.2 s
> exaFinishAccess (pDrawable, EXA_PREPARE_DEST); // Step5: 2.2 s
> EXA_POST_FALLBACK_GC(pGC);
> }
>
> We see that exaPrepareAccess needs most of the time. Is that expected?
>
> Inside there are several operations on the damage region. This makes
> damagePolyRectangle a quadratic algorithm.
>
> For N rectangles the damage region has O(N) rectangles. And for each
> Rectangle there are operations on the damage region. The result is O(N^2).
>
> Is it necessary to call exaPrepareAccess for each of the rectangles?
>
> Has anyone an idea how to improeve this?
The best solution would probably be to fix EXA or the app to hit
hardware acceleration paths instead of software fallbacks.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Debian, X and DRI developer
More information about the xorg-devel
mailing list