<div dir="ltr">Hi Pekka,<div><br><div>Thanks for the information, I will talk to my mentor Daniel and try to find out</div><div>what I can do about this.</div><div><br></div><div>Cheers,</div><div>Zhao Junwang</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 17, 2015 at 2:08 PM, Pekka Paalanen <span dir="ltr"><<a href="mailto:ppaalanen@gmail.com" target="_blank">ppaalanen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, 16 Jul 2015 20:20:39 +0800<br>
John Hunter <<a href="mailto:zhjwpku@gmail.com">zhjwpku@gmail.com</a>> wrote:<br>
<br>
> From: Zhao Junwang <<a href="mailto:zhjwpku@gmail.com">zhjwpku@gmail.com</a>><br>
><br>
> This supports the asynchronous commits, required for page-flipping<br>
> Since it's virtual hw it's ok to commit async stuff right away, we<br>
> never have to wait for vblank.<br>
<br>
Hi,<br>
<br>
in theory, yes. This is what a patch to bochs implemented not too long<br>
ago, so AFAIK you are only replicating the existing behaviour.<br>
<br>
However, if userspace doing an async commit (or sync, I suppose) does<br>
not incur any waits in the kernel in e.g. sending the page flip event,<br>
then flip driven programs (e.g. a Wayland compositor, say, Weston)<br>
will be running its rendering loop as a busy-loop, because the kernel<br>
does not throttle it to the (virtual) display refresh rate.<br>
<br>
This will cause maximal CPU usage and poor user experience as<br>
everything else needs to fight for CPU time and event dispatch to get<br>
through, like input.<br>
<br>
I would hope someone could do a follow-up to implement a refresh cycle<br>
emulation based on a clock. Userspace expects page flips to happen at<br>
most at refresh rate when asking for vblank-synced flips. It's only<br>
natural for userspace to drive its rendering loop based on the vblank<br>
cycle.<br>
<br>
<br>
Thanks,<br>
pq<br>
<br>
> Cc: Maarten Lankhorst <<a href="mailto:maarten.lankhorst@linux.intel.com">maarten.lankhorst@linux.intel.com</a>><br>
> Cc: Daniel Vetter <<a href="mailto:daniel.vetter@ffwll.ch">daniel.vetter@ffwll.ch</a>><br>
> Signed-off-by: Zhao Junwang <<a href="mailto:zhjwpku@gmail.com">zhjwpku@gmail.com</a>><br>
> ---<br>
>  drivers/gpu/drm/bochs/bochs_mm.c |    9 ++++++++-<br>
>  1 file changed, 8 insertions(+), 1 deletion(-)<br>
><br>
> diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c<br>
> index c1d819c..37ac2ca 100644<br>
> --- a/drivers/gpu/drm/bochs/bochs_mm.c<br>
> +++ b/drivers/gpu/drm/bochs/bochs_mm.c<br>
> @@ -545,8 +545,15 @@ bochs_user_framebuffer_create(struct drm_device *dev,<br>
>       return &bochs_fb->base;<br>
>  }<br>
><br>
> +static int bochs_atomic_commit(struct drm_device *dev,<br>
> +                          struct drm_atomic_state *a,<br>
> +                          bool async)<br>
> +{<br>
> +     return drm_atomic_helper_commit(dev, a, false);<br>
> +}<br>
> +<br>
>  const struct drm_mode_config_funcs bochs_mode_funcs = {<br>
>       .fb_create = bochs_user_framebuffer_create,<br>
>       .atomic_check = drm_atomic_helper_check,<br>
> -     .atomic_commit = drm_atomic_helper_commit,<br>
> +     .atomic_commit = bochs_atomic_commit,<br>
>  };<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Best regards<br></div><div>Junwang Zhao</div><div>Microprocessor Research and Develop Center</div><div>Department of Computer Science &Technology</div><div>Peking University</div><div>Beijing, 100871, PRC</div></div></div>
</div>