summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNing Tang <ning.tang@intel.com>2012-12-27 15:36:35 +0800
committerKristian Høgsberg <krh@bitplanet.net>2013-01-10 16:53:29 -0500
commita0c8799a456ed04b0aee1f741f8e82201e631ce0 (patch)
treee185beb2bcfe61d6b844b9ff7a198aee61cc3ab6
parentb61f7d27738b73d27b03b8982b37ec78df52976e (diff)
downloadweston-a0c8799a456ed04b0aee1f741f8e82201e631ce0.tar.gz
compositor-drm: Remove drm_disable_unused_sprites()
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@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@intel.com>
-rw-r--r--src/compositor-drm.c36
1 files changed, 0 insertions, 36 deletions
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 1fa822ad..48b2685e 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -184,8 +184,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)
@@ -455,8 +453,6 @@ drm_output_repaint(struct weston_output *output_base,
output->vblank_pending = 1;
}
- drm_disable_unused_sprites(&output->base);
-
return;
}
@@ -564,38 +560,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;
- }
-}
-
static struct weston_plane *
drm_output_prepare_overlay_surface(struct weston_output *output_base,
struct weston_surface *es)