#define WL_TBM_TRACE(fmt, ...)
#endif
-
+#define DEBUG_ID_LEN 1024
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
struct wayland_tbm_buffer {
tbm_fd sync_timeline;
int transform;
uint32_t serial;
+ int exported;
};
struct wayland_tbm_client_resource {
return NULL;
}
+void
+_wayland_tbm_server_update_export_debug_id(tbm_surface_h surface)
+{
+ struct wayland_tbm_user_data *ud = NULL;
+ struct wayland_tbm_buffer *pos;
+ char debug_id[DEBUG_ID_LEN] = {0, };
+ int len = DEBUG_ID_LEN;
+ pid_t pid;
+
+ ud = _wayland_tbm_server_get_user_data(surface);
+ if (!ud) return;
+
+ wl_list_for_each_reverse(pos, &ud->wayland_tbm_buffer_list, link_ref) {
+ char id[64] = {0, };
+ int id_len = 0;
+
+ if (!pos->wl_buffer) continue;
+ if (!pos->exported) continue;
+
+ wl_client_get_credentials(pos->client, &pid, NULL, NULL);
+ id_len = snprintf(id, sizeof(id), "%u(%u)", (unsigned int)wl_resource_get_id(pos->wl_buffer), pid);
+
+ len -= (id_len + 2);
+ if ((id_len > 0) && (len > 0)) {
+ strncat(debug_id, id, len - 2);
+ strncat(debug_id, " ", 2);
+ } else {
+ break;
+ }
+ }
+
+ if (debug_id[0] != '\0')
+ tbm_surface_internal_set_debug_data(surface, "export_id", debug_id);
+ else
+ tbm_surface_internal_set_debug_data(surface, "export_id", NULL);
+}
+
+void
+_wayland_tbm_server_set_debug_info(struct wayland_tbm_buffer *tbm_buffer)
+{
+ char debug_id[64] = {0, };
+ pid_t pid;
+
+ if (!tbm_buffer) return;
+ if (!tbm_buffer->surface) return;
+ if (!tbm_buffer->client) return;
+
+ wl_client_get_credentials(tbm_buffer->client, &pid, NULL, NULL);
+ tbm_surface_internal_set_debug_pid(tbm_buffer->surface, pid);
+ snprintf(debug_id, sizeof(debug_id), "%-4u", (unsigned int)wl_resource_get_id(tbm_buffer->wl_buffer));
+ tbm_surface_internal_set_debug_data(tbm_buffer->surface, "id ", debug_id);
+}
+
static void
_wayland_tbm_server_tbm_buffer_impl_destroy(struct wl_client *client, struct wl_resource *wl_buffer)
{
if (tbm_buffer->destroy_cb)
tbm_buffer->destroy_cb(tbm_buffer->surface, tbm_buffer->user_data);
- tbm_surface_internal_set_debug_data(tbm_buffer->surface, "id", NULL);
- tbm_surface_internal_set_debug_pid(tbm_buffer->surface, 0);
wl_list_remove(&tbm_buffer->link_ref);
+ if (tbm_buffer->exported) {
+ _wayland_tbm_server_update_export_debug_id(tbm_buffer->surface);
+ } else {
+ tbm_surface_internal_set_debug_data(tbm_buffer->surface, "id ", NULL);
+ tbm_surface_internal_set_debug_pid(tbm_buffer->surface, 0);
+ }
+
if (tbm_buffer->sync_timeline != -1)
close(tbm_buffer->sync_timeline);
struct wayland_tbm_buffer *tbm_buffer;
struct wayland_tbm_user_data *ud;
struct wl_client *wl_client;
- pid_t pid;
ud = _wayland_tbm_server_get_user_data(surface);
WL_TBM_RETURN_VAL_IF_FAIL(ud != NULL, NULL);
tbm_buffer->surface = surface;
tbm_buffer->client = wl_client;
tbm_buffer->wl_tbm = wl_tbm;
-
- /* set the debug_pid to the surface for debugging */
- wl_client_get_credentials(wl_client, &pid, NULL, NULL);
- tbm_surface_internal_set_debug_pid(surface, pid);
-
tbm_buffer->sync_timeline = -1;
return tbm_buffer;
struct wayland_tbm_buffer *tbm_buffer;
tbm_surface_info_s info = { 0, };
tbm_bo bos[TBM_SURF_PLANE_MAX];
- char debug_id[64] = {0, };
tbm_surface_h surface;
int i, numPlane;
return;
}
- snprintf(debug_id, sizeof(debug_id), "%u", (unsigned int)wl_resource_get_id(tbm_buffer->wl_buffer));
- tbm_surface_internal_set_debug_data(surface, "id", debug_id);
+ _wayland_tbm_server_set_debug_info(tbm_buffer);
#ifdef DEBUG_TRACE
pid_t pid;
struct wayland_tbm_buffer *tbm_buffer;
tbm_surface_info_s info = { 0, };
tbm_bo bos[TBM_SURF_PLANE_MAX];
- char debug_id[64] = {0, };
tbm_surface_h surface;
int i, numPlane;
goto done;
}
- snprintf(debug_id, sizeof(debug_id), "%u", (unsigned int)wl_resource_get_id(tbm_buffer->wl_buffer));
- tbm_surface_internal_set_debug_data(surface, "id", debug_id);
+ _wayland_tbm_server_set_debug_info(tbm_buffer);
#ifdef DEBUG_TRACE
pid_t pid;
tbm_surface_h surface)
{
struct wayland_tbm_buffer *tbm_buffer;
- char debug_id[64] = {0, };
WL_TBM_RETURN_VAL_IF_FAIL(wl_tbm != NULL, NULL);
WL_TBM_RETURN_VAL_IF_FAIL(surface != NULL, NULL);
return NULL;
}
- snprintf(debug_id, sizeof(debug_id), "%u",
- (unsigned int)wl_resource_get_id(tbm_buffer->wl_buffer));
- tbm_surface_internal_set_debug_data(surface, "id", debug_id);
+ tbm_buffer->exported = 1;
+
+ _wayland_tbm_server_update_export_debug_id(surface);
return tbm_buffer->wl_buffer;
}
{
struct wayland_tbm_buffer *tbm_buffer;
struct wl_resource *wl_tbm;
- char debug_id[64] = {0, };
WL_TBM_RETURN_VAL_IF_FAIL(cqueue != NULL, NULL);
WL_TBM_RETURN_VAL_IF_FAIL(cqueue->wl_tbm_queue != NULL, NULL);
tbm_buffer->detach_cb = detach_cb;
tbm_buffer->user_data = user_data;
tbm_buffer->flags = flags;
+ tbm_buffer->exported = 1;
if (!_wayland_tbm_server_export_surface(cqueue->wl_tbm,
tbm_buffer->wl_buffer,
wl_tbm_queue_send_buffer_attached(cqueue->wl_tbm_queue,
tbm_buffer->wl_buffer, flags);
- snprintf(debug_id, sizeof(debug_id), "%u",
- (unsigned int)wl_resource_get_id(tbm_buffer->wl_buffer));
- tbm_surface_internal_set_debug_data(surface, "id", debug_id);
+
+ _wayland_tbm_server_update_export_debug_id(surface);
return tbm_buffer->wl_buffer;
}