[PATCH weston v5 14/14] compositor-drm: Add drm-backend log debug scope

Pekka Paalanen ppaalanen at gmail.com
Tue Aug 7 12:09:38 UTC 2018


On Fri, 20 Jul 2018 20:03:35 +0100
Daniel Stone <daniels at collabora.com> wrote:

> Add a 'drm-debug' scope which prints verbose information about the DRM
> backend's repaint cycle, including the decision tree on how views are
> assigned (or not) to planes.
> 
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
>  libweston/compositor-drm.c | 233 ++++++++++++++++++++++++++++++++-----
>  1 file changed, 206 insertions(+), 27 deletions(-)
> 

Hi,

lots of output from this one, nice!


> diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
> index 653d13e0c..2cadf036c 100644
> --- a/libweston/compositor-drm.c
> +++ b/libweston/compositor-drm.c
> @@ -51,6 +51,7 @@
>  
>  #include "compositor.h"
>  #include "compositor-drm.h"
> +#include "weston-debug.h"
>  #include "shared/helpers.h"
>  #include "shared/timespec-util.h"
>  #include "gl-renderer.h"
> @@ -73,6 +74,9 @@
>  #define GBM_BO_USE_CURSOR GBM_BO_USE_CURSOR_64X64
>  #endif
>  
> +#define drm_debug(b, ...) \
> +	weston_debug_scope_printf((b)->debug, __VA_ARGS__)
> +
>  #define MAX_CLONED_CONNECTORS 4
>  
>  /**
> @@ -302,6 +306,8 @@ struct drm_backend {
>  	bool shutting_down;
>  
>  	bool aspect_ratio_supported;
> +
> +	struct weston_debug_scope *debug;
>  };
>  
>  struct drm_mode {
> @@ -2358,6 +2364,9 @@ crtc_add_prop(drmModeAtomicReq *req, struct drm_output *output,
>  
>  	ret = drmModeAtomicAddProperty(req, output->crtc_id, info->prop_id,
>  				       val);
> +	drm_debug(output->backend, "\t\t\t[CRTC:%d] %d (%s) -> %lld (0x%llx)\n",
> +		  output->crtc_id, info->prop_id, info->name,
> +		  (unsigned long long) val, (unsigned long long) val);

This is using %lld to print (unsigned long long), should it not be %llu
instead?

All the property ids are unsigned as well, so %d -> %u?

>  	return (ret <= 0) ? -1 : 0;
>  }
>  
> @@ -2373,6 +2382,9 @@ connector_add_prop(drmModeAtomicReq *req, struct drm_head *head,
>  
>  	ret = drmModeAtomicAddProperty(req, head->connector_id,
>  				       info->prop_id, val);
> +	drm_debug(head->backend, "\t\t\t[CONN:%d] %d (%s) -> %lld (0x%llx)\n",
> +		  head->connector_id, info->prop_id, info->name,
> +		  (unsigned long long) val, (unsigned long long) val);

%d -> %u
%lld -> %llu

>  	return (ret <= 0) ? -1 : 0;
>  }
>  
> @@ -2388,6 +2400,9 @@ plane_add_prop(drmModeAtomicReq *req, struct drm_plane *plane,
>  
>  	ret = drmModeAtomicAddProperty(req, plane->plane_id, info->prop_id,
>  				       val);
> +	drm_debug(plane->backend, "\t\t\t[PLANE:%d] %d (%s) -> %lld (0x%llx)\n",
> +		  plane->plane_id, info->prop_id, info->name,
> +		  (unsigned long long) val, (unsigned long long) val);

%d -> %u
%lld -> %llu

>  	return (ret <= 0) ? -1 : 0;
>  }
>  
> @@ -2406,6 +2421,9 @@ drm_mode_ensure_blob(struct drm_backend *backend, struct drm_mode *mode)
>  	if (ret != 0)
>  		weston_log("failed to create mode property blob: %m\n");
>  
> +	drm_debug(backend, "\t\t\t[atomic] created new mode blob %ld for %s",
> +		  (unsigned long) mode->blob_id, mode->mode_info.name);

%ld -> %u without the cast?

There are more of these kinds below, should I point them out?


> +
>  	return ret;
>  }

...

> @@ -2969,10 +3010,15 @@ drm_repaint_begin(struct weston_compositor *compositor)
>  {
>  	struct drm_backend *b = to_drm_backend(compositor);
>  	struct drm_pending_state *ret;
> +	char *scene_graph = weston_compositor_print_scene_graph(compositor);

Maybe you'd want to make the call to
weston_compositor_print_scene_graph() conditional on the debug scope
being enabled? To not incur the work while not being debugged.

>  
>  	ret = drm_pending_state_alloc(b);
>  	b->repaint_data = ret;
>  
> +	drm_debug(b, "[repaint] Beignning repaint; pending_state %p\n", ret);

Typoed "Beginning".


> +	drm_debug(b, "%s", scene_graph);
> +	free(scene_graph);
> +
>  	return ret;
>  }
>  

...

> @@ -3531,12 +3691,20 @@ drm_assign_planes(struct weston_output *output_base, void *repaint_data)
>  	struct weston_view *ev;
>  	struct weston_plane *primary = &output_base->compositor->primary_plane;
>  
> +	drm_debug(b, "\t[repaint] preparing state for output %s (%d)\n",
> +		  output_base->name, output_base->id);
> +
>  	if (!b->sprites_are_broken) {
>  		state = drm_output_propose_state(output_base, pending_state,
>  						 DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY);
> -		if (!state)
> +		if (!state) {
> +			drm_debug(b, "\t[repaint] could not build planes-only "
> +				     "state, trying mixed\n");
>  			state = drm_output_propose_state(output_base, pending_state,
>  							 DRM_OUTPUT_PROPOSE_STATE_MIXED);

Should there be a note if mixed mode failed?

> +		}
> +	} else {
> +		drm_debug(b, "\t[state] no overlay plane support\n");
>  	}
>  
>  	if (!state)

Looks good aside from the minor details.


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180807/4bdf521b/attachment.sig>


More information about the wayland-devel mailing list