[PATCH 2/3 v3] compositor: turn off the idle timer when sleeping
Scott Moreau
oreaus at gmail.com
Sat Mar 16 09:38:08 PDT 2013
Hi Philipp,
Thanks for your attention to this. Pushed to gh next.
- Scott
On Sun, Mar 10, 2013 at 9:08 AM, Philipp Brüschweiler <blei42 at gmail.com> wrote:
> Also updates the drm, fbdev and rpi backend to use
> weston_compositor_set_sleeping() and not set the state manually.
>
> Fixes https://bugs.freedesktop.org/show_bug.cgi?id=61910 (rpi backend
> untested).
>
> v2: don't set DPMS state when switching VT.
> v3: move unrelated enum change into its own commit.
> ---
> src/compositor-drm.c | 2 +-
> src/compositor-fbdev.c | 2 +-
> src/compositor-rpi.c | 2 +-
> src/compositor.c | 12 +++++++++++-
> src/compositor.h | 2 ++
> 5 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index d933c92..59d5694 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -2027,7 +2027,7 @@ vt_func(struct weston_compositor *compositor, int event)
>
> compositor->focus = 0;
> ec->prev_state = compositor->state;
> - compositor->state = WESTON_COMPOSITOR_SLEEPING;
> + weston_compositor_set_sleeping(compositor);
>
> /* If we have a repaint scheduled (either from a
> * pending pageflip or the idle handler), make sure we
> diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
> index 070d187..2a01078 100644
> --- a/src/compositor-fbdev.c
> +++ b/src/compositor-fbdev.c
> @@ -791,7 +791,7 @@ vt_func(struct weston_compositor *base, int event)
>
> compositor->base.focus = 0;
> compositor->prev_state = compositor->base.state;
> - compositor->base.state = WESTON_COMPOSITOR_SLEEPING;
> + weston_compositor_set_sleeping(&compositor->base);
>
> /* If we have a repaint scheduled (from the idle handler), make
> * sure we cancel that so we don't try to pageflip when we're
> diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
> index d3767b9..9571e85 100644
> --- a/src/compositor-rpi.c
> +++ b/src/compositor-rpi.c
> @@ -1381,7 +1381,7 @@ vt_func(struct weston_compositor *base, int event)
>
> compositor->base.focus = 0;
> compositor->prev_state = compositor->base.state;
> - compositor->base.state = WESTON_COMPOSITOR_SLEEPING;
> + weston_compositor_set_sleeping(&compositor->base);
>
> /* If we have a repaint scheduled (either from a
> * pending pageflip or the idle handler), make sure we
> diff --git a/src/compositor.c b/src/compositor.c
> index 7df9658..5041f19 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -1619,12 +1619,22 @@ weston_compositor_wake(struct weston_compositor *compositor)
> }
>
> WL_EXPORT void
> -weston_compositor_sleep(struct weston_compositor *compositor)
> +weston_compositor_set_sleeping(struct weston_compositor *compositor)
> {
> if (compositor->state == WESTON_COMPOSITOR_SLEEPING)
> return;
>
> + wl_event_source_timer_update(compositor->idle_source, 0);
> compositor->state = WESTON_COMPOSITOR_SLEEPING;
> +}
> +
> +WL_EXPORT void
> +weston_compositor_sleep(struct weston_compositor *compositor)
> +{
> + if (compositor->state == WESTON_COMPOSITOR_SLEEPING)
> + return;
> +
> + weston_compositor_set_sleeping(compositor);
> weston_compositor_dpms(compositor, WESTON_DPMS_OFF);
> }
>
> diff --git a/src/compositor.h b/src/compositor.h
> index 5d939ab..0a9eb81 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -592,6 +592,8 @@ weston_compositor_unlock(struct weston_compositor *compositor);
> void
> weston_compositor_wake(struct weston_compositor *compositor);
> void
> +weston_compositor_set_sleeping(struct weston_compositor *compositor);
> +void
> weston_compositor_sleep(struct weston_compositor *compositor);
> void
> weston_compositor_update_drag_surfaces(struct weston_compositor *compositor);
> --
> 1.8.1.5
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list