diff options
author | Ning Tang <ning.tang@intel.com> | 2012-12-27 15:36:35 +0800 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-01-10 16:53:29 -0500 |
commit | a0c8799a456ed04b0aee1f741f8e82201e631ce0 (patch) | |
tree | e185beb2bcfe61d6b844b9ff7a198aee61cc3ab6 | |
parent | b61f7d27738b73d27b03b8982b37ec78df52976e (diff) | |
download | weston-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.c | 36 |
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) |