[PATCH 2/3] present: Query the Window's CRTC every time

Chris Wilson chris at chris-wilson.co.uk
Thu May 28 02:07:46 PDT 2015


On Thu, May 28, 2015 at 05:56:15PM +0900, Michel Dänzer wrote:
> On 28.05.2015 17:38, Chris Wilson wrote:
> > On Thu, May 28, 2015 at 04:59:14PM +0900, Michel Dänzer wrote:
> >> The patch below is an alternative fix for the problem I'm seeing, while
> >> preserving the window CRTC for MSC waits when possible. Your
> >> description sounds like it might work for you as well, Chris. Can you
> >> try it?
> >>
> >>
> >> diff --git a/present/present.c b/present/present.c
> >> index a634601..dc58f25 100644
> >> --- a/present/present.c
> >> +++ b/present/present.c
> >> @@ -713,6 +713,7 @@ present_pixmap(WindowPtr window,
> >>      uint64_t                    ust;
> >>      uint64_t                    target_msc;
> >>      uint64_t                    crtc_msc;
> >> +    RRCrtcPtr                   new_crtc;
> >>      int                         ret;
> >>      present_vblank_ptr          vblank, tmp;
> >>      ScreenPtr                   screen = window->drawable.pScreen;
> >> @@ -734,7 +735,21 @@ present_pixmap(WindowPtr window,
> >>              target_crtc = present_get_crtc(window);
> >>      }
> >>
> >> -    present_get_ust_msc(screen, target_crtc, &ust, &crtc_msc);
> >> +    if (present_get_ust_msc(screen, target_crtc, &ust, &crtc_msc) != Success) {
> >> +        /* Maybe we need to try a different CRTC?
> >> +         */
> >> +        new_crtc = present_get_crtc(window);
> >> +
> >> +        if (new_crtc != target_crtc &&
> >> +            present_get_ust_msc(screen, new_crtc, &ust, &crtc_msc) == Success)
> >> +            target_crtc = new_crtc;
> >> +        else {
> >> +            /* Fall back to fake MSC handling
> >> +             */
> >> +            target_crtc = NULL;
> >> +            present_fake_get_ust_msc(screen, &ust, &crtc_msc);
> >> +        }
> >> +    }
> > 
> > It survived for one more CRTC change, but still feeds passed msc into
> > the wait_vblank.
> 
> By how much is it off? Does it cause a hang?

Just a few -1000 msc, which is a pretty long wait (it would be if we
honoured it at least).

> What's your test-case? Mine is the GNOME lock screen, i.e. basically
> DPMS off vs vblank waits and flips.

xf86-video-intel/test/present-test
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the xorg-devel mailing list