[PATCH 2/3] Add an id field to outputs

Kristian Hoegsberg hoegsberg at gmail.com
Fri Apr 20 10:16:27 PDT 2012


On Thu, Apr 19, 2012 at 10:50:08PM -0400, cdahlin at redhat.com wrote:
> From: Casey Dahlin <cdahlin at redhat.com>
> 
> All outputs now have a unique integer ID, allocated from a bitfield pool in the
> compositor.

Committed this one with a few edits as described below.

> Signed-off-by: Casey Dahlin <cdahlin at redhat.com>
> ---
>  src/compositor.c |   15 +++++++++++++++
>  src/compositor.h |    4 ++++
>  2 files changed, 19 insertions(+), 0 deletions(-)
> 
> diff --git a/src/compositor.c b/src/compositor.c
> index 3065f81..798b1e1 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -2303,6 +2303,17 @@ weston_output_move(struct weston_output *output, int x, int y)
>  				  output->current->height);
>  }
>  
> +static void
> +output_allocate_id(struct weston_output *output)
> +{
> +	output->id = 0;
> +
> +	while ((1 << output->id) & output->compositor->output_id_pool)
> +		output->id++;
> +
> +	output->compositor->output_id_pool |= 1 << output->id;
> +}
> +

We can just use ffs(~pool) - 1 to find the first available id here.
With that this function is down to just two lines so I folded it back
into weston_output_init.

>  WL_EXPORT void
>  weston_output_init(struct weston_output *output, struct weston_compositor *c,
>  		   int x, int y, int width, int height, uint32_t flags)
> @@ -2331,6 +2342,8 @@ weston_output_init(struct weston_output *output, struct weston_compositor *c,
>  
>  	wl_list_init(&output->frame_callback_list);
>  
> +	output_allocate_id(output);
> +
>  	output->global =
>  		wl_display_add_global(c->wl_display, &wl_output_interface,
>  				      output, bind_output);
> @@ -2359,6 +2372,8 @@ weston_compositor_init(struct weston_compositor *ec, struct wl_display *display)
>  	wl_signal_init(&ec->unlock_signal);
>  	ec->launcher_sock = weston_environment_get_fd("WESTON_LAUNCHER_SOCK");
>  
> +	ec->output_id_pool = 0;
> +
>  	if (!wl_display_add_global(display, &wl_compositor_interface,
>  				   ec, compositor_bind))
>  		return -1;
> diff --git a/src/compositor.h b/src/compositor.h
> index 93284c5..183c4e7 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -73,6 +73,8 @@ enum dpms_enum {
>  };
>  
>  struct weston_output {
> +	uint32_t id;
> +
>  	struct wl_list link;
>  	struct wl_global *global;
>  	struct weston_compositor *compositor;
> @@ -234,6 +236,8 @@ struct weston_compositor {
>  
>  	struct screenshooter *screenshooter;
>  	int launcher_sock;
> +
> +	uint32_t output_id_pool;
>  };
>  
>  #define MODIFIER_CTRL	(1 << 8)
> -- 
> 1.7.7.6
> 


More information about the wayland-devel mailing list