[PATCH 3/3] exa/mixed: Exclude frontbuffer from deferred pixmap handling.

Maarten Maathuis madman2003 at gmail.com
Thu Jan 27 11:42:00 PST 2011


On Thu, Jan 27, 2011 at 8:40 PM, Maarten Maathuis <madman2003 at gmail.com> wrote:
> - Apps like xterm can trigger a lot of fallback rendering.
> - This can lead to (annoyingly) high latencies, because you
>  have to wait for the block handler.
> - You need a driver that doesn't directly access the front
>  buffer to trigger this (NV50+ nouveau for example).
> - Repeatingly doing dmesg on an xterm with a bitmap font
>  will reveal that you never see part of the text.
> - I have recieved at least one complaint in the past of slow
>  terminal performance, which was related to core font
>  rendering.
> - This does sacrifice some throughput, roughly 33% slower.
>
> Reviewed-by: Michel Dänzer <michel at daenzer.net>
> Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
> ---
>  exa/exa_migration_mixed.c |   17 +++++++++++++----
>  1 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
> index fb47151..4f49905 100644
> --- a/exa/exa_migration_mixed.c
> +++ b/exa/exa_migration_mixed.c
> @@ -138,6 +138,7 @@ void
>  exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure)
>  {
>     PixmapPtr pPixmap = closure;
> +    ScreenPtr pScreen = pPixmap->drawable.pScreen;
>     ExaPixmapPriv(pPixmap);
>
>     /* Move back results of software rendering on system memory copy of mixed driver
> @@ -149,10 +150,18 @@ exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure)
>     if (!pExaPixmap->use_gpu_copy && exaPixmapHasGpuCopy(pPixmap)) {
>        ExaScreenPriv(pPixmap->drawable.pScreen);
>
> -       if (pExaScr->deferred_mixed_pixmap &&
> -           pExaScr->deferred_mixed_pixmap != pPixmap)
> -           exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
> -       pExaScr->deferred_mixed_pixmap = pPixmap;
> +       /* Front buffer: Don't wait for the block handler to copy back the data.
> +        * This avoids annoying latency if you encounter a lot of software rendering.
> +        */
> +       if (pPixmap == pScreen->GetScreenPixmap(pScreen))
> +               exaMoveInPixmap_mixed(pPixmap);
> +       else {
> +               if (pExaScr->deferred_mixed_pixmap &&
> +                   pExaScr->deferred_mixed_pixmap != pPixmap)
> +                   exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
> +
> +               pExaScr->deferred_mixed_pixmap = pPixmap;
> +       }
>     }
>  }
>
> --
> 1.7.4.rc2
>
>

Are list patches still accepted or do i need to figure out how to get
a personal git repo, so they can be pulled?

-- 
Far away from the primal instinct, the song seems to fade away, the
river get wider between your thoughts and the things we do and say.


More information about the xorg-devel mailing list