Skip to content

Instantly share code, notes, and snippets.

@Blei
Last active December 14, 2015 18:19
Show Gist options
  • Save Blei/5128541 to your computer and use it in GitHub Desktop.
Save Blei/5128541 to your computer and use it in GitHub Desktop.
From 995bc862ee398257ffd97d48d6d62fcd9107db2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20Br=C3=BCschweiler?= <blei42@gmail.com>
Date: Sun, 10 Mar 2013 14:12:49 +0100
Subject: [PATCH 1/2] compositor: remove unused field option_idle_time
---
src/compositor.c | 1 -
src/compositor.h | 3 +--
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/compositor.c b/src/compositor.c
index a2860fd..7df9658 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3497,7 +3497,6 @@ int main(int argc, char *argv[])
sigaction(SIGSEGV, &segv_action, NULL);
segv_compositor = ec;
- ec->option_idle_time = idle_time;
ec->idle_time = idle_time;
setenv("WAYLAND_DISPLAY", socket_name, 1);
diff --git a/src/compositor.h b/src/compositor.h
index 4a0c1e3..5d939ab 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -322,8 +322,7 @@ struct weston_compositor {
uint32_t state;
struct wl_event_source *idle_source;
uint32_t idle_inhibit;
- int option_idle_time; /* default timeout, s */
- int idle_time; /* effective timeout, s */
+ int idle_time; /* timeout, s */
/* Repaint state. */
struct wl_array vertices;
--
1.8.1.5
From df30808a98ea83f6095fde68b89c4cd5a6da32de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20Br=C3=BCschweiler?= <blei42@gmail.com>
Date: Sun, 10 Mar 2013 14:55:31 +0100
Subject: [PATCH 2/2] compositor: turn off the idle timer when sleeping
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.
---
src/compositor-drm.c | 2 +-
src/compositor-fbdev.c | 2 +-
src/compositor-rpi.c | 4 ++--
src/compositor.c | 12 +++++++++++-
src/compositor.h | 2 ++
5 files changed, 17 insertions(+), 5 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..8163d85 100644
--- a/src/compositor-rpi.c
+++ b/src/compositor-rpi.c
@@ -577,7 +577,7 @@ rpi_element_dmx_move(struct rpi_element *element,
&dst_rect,
&src_rect,
DISPMANX_NO_HANDLE,
- DISPMANX_NO_ROTATE);
+ VC_IMAGE_ROT0);
DBG("element %p move\n", element);
}
@@ -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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment