[PATCH weston 1.0] compositor-drm: Remove drm_disable_unused_sprites()
ning.tang at intel.com
ning.tang at intel.com
Wed Dec 26 23:36:35 PST 2012
From: Ning Tang <ning.tang at intel.com>
If a sprite is no longer used, it is disabled on the call to
drmModeSetPlane() when doing the output repaint, since its
pending_fb_id is 0.
This patch is a backport patch on weston 1.0.
Originally from Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
commit 3b2bd44d924744fa4635390e91afe569351e7d8d
Some platform has a heavy CPU load caused by redundant drmModeRmFB,
which is called in drm_disable_unused_sprites and would trigger drm_err.
Signed-off-by: Ning Tang <ning.tang at intel.com>
---
src/compositor-drm.c | 36 ------------------------------------
1 file changed, 36 deletions(-)
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index a2169dd..09d2734 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -183,8 +183,6 @@ struct drm_seat {
static void
drm_output_set_cursor(struct drm_output *output);
-static void
-drm_disable_unused_sprites(struct weston_output *output_base);
static int
drm_sprite_crtc_supported(struct weston_output *output_base, uint32_t supported)
@@ -423,8 +421,6 @@ drm_output_repaint(struct weston_output *output_base,
output->vblank_pending = 1;
}
- drm_disable_unused_sprites(&output->base);
-
return;
}
@@ -532,38 +528,6 @@ drm_surface_transform_supported(struct weston_surface *es)
return 1;
}
-static void
-drm_disable_unused_sprites(struct weston_output *output_base)
-{
- struct weston_compositor *ec = output_base->compositor;
- struct drm_compositor *c =(struct drm_compositor *) ec;
- struct drm_output *output = (struct drm_output *) output_base;
- struct drm_sprite *s;
- int ret;
-
- wl_list_for_each(s, &c->sprite_list, link) {
- if (s->pending_fb_id)
- continue;
-
- ret = drmModeSetPlane(c->drm.fd, s->plane_id,
- output->crtc_id, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0);
- if (ret)
- weston_log("failed to disable plane: %d: %s\n",
- ret, strerror(errno));
- drmModeRmFB(c->drm.fd, s->fb_id);
-
- if (s->surface) {
- s->surface = NULL;
- wl_list_remove(&s->destroy_listener.link);
- }
-
- assert(!s->pending_surface);
- s->fb_id = 0;
- s->pending_fb_id = 0;
- }
-}
-
/*
* This function must take care to damage any previously assigned surface
* if the sprite ends up binding to a different surface than in the
--
1.8.0.2
More information about the wayland-devel
mailing list