pid_t pid;
char name[TDM_NAME_LEN];
struct wl_resource *resource;
+ tdm_private_server *private_server;
} tdm_server_client_info;
static tdm_private_server *keep_private_server;
{
tdm_server_wait_info *found;
tdm_server_vblank_info *vblank_info;
+ tdm_private_output *private_output;
if (!keep_private_server)
return;
wl_tdm_vblank_send_done(vblank_info->resource, wait_info->req_id,
sequence, tv_sec, tv_usec, error);
- TDM_TRACE_ASYNC_END((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
+ private_output = vblank_info->output_info->output;
+ if (private_output->ttrace_vblank_client)
+ TDM_TRACE_ASYNC_END((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
destroy_wait(wait_info);
}
tdm_server_vblank_info *vblank_info = wl_resource_get_user_data(resource);
tdm_server_output_info *output_info = vblank_info->output_info;
tdm_private_server *private_server = output_info->private_server;
+ tdm_private_output *private_output = output_info->output;
tdm_server_wait_info *wait_info;
unsigned int enable_fake = 0;
tdm_error ret;
if (tdm_debug_module & TDM_DEBUG_VBLANK)
TDM_DBG("req_id(%d) wait", req_id);
- TDM_TRACE_ASYNC_BEGIN((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
+ private_output = vblank_info->output_info->output;
+ if (private_output->ttrace_vblank_client)
+ TDM_TRACE_ASYNC_BEGIN((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
ret = tdm_vblank_wait(vblank_info->vblank, req_sec, req_usec, interval, _tdm_server_cb_vblank, wait_info);
tdm_server_vblank_info *vblank_info = wl_resource_get_user_data(resource);
tdm_server_output_info *output_info = vblank_info->output_info;
tdm_private_server *private_server = output_info->private_server;
+ tdm_private_output *private_output = output_info->output;
tdm_server_wait_info *wait_info;
unsigned int enable_fake = 0;
tdm_error ret;
if (tdm_debug_module & TDM_DEBUG_VBLANK)
TDM_DBG("req_id(%d) wait", req_id);
- TDM_TRACE_ASYNC_BEGIN((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
+ private_output = vblank_info->output_info->output;
+ if (private_output->ttrace_vblank_client)
+ TDM_TRACE_ASYNC_BEGIN((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
ret = tdm_vblank_wait_seq(vblank_info->vblank, req_sec, req_usec, sequence, _tdm_server_cb_vblank, wait_info);
}
cinfo->resource = resource;
+ cinfo->private_server = data;
LIST_ADDTAIL(&cinfo->link, &client_list);
wl_client_get_credentials(client, &cinfo->pid, NULL, NULL);
return NULL;
}
+
+INTERN tdm_error
+tdm_server_enable_ttrace_vblank(tdm_display *dpy, tdm_output *output, int enable)
+{
+ tdm_server_client_info *cinfo = NULL;
+
+ LIST_FOR_EACH_ENTRY(cinfo, &client_list, link) {
+ tdm_private_server *private_server = cinfo->private_server;
+ tdm_server_output_info *output_info = NULL;
+
+ LIST_FOR_EACH_ENTRY(output_info, &private_server->output_list, link) {
+ tdm_server_vblank_info *vblank_info = NULL;
+ tdm_private_output *private_output = output_info->output;
+
+ if (output && output_info->output != output)
+ continue;
+
+ private_output->ttrace_vblank_client = enable;
+
+ LIST_FOR_EACH_ENTRY(vblank_info, &output_info->vblank_list, link) {
+ wl_tdm_vblank_send_ttrace(vblank_info->resource, enable);
+ }
+ }
+ }
+
+ return TDM_ERROR_NONE;
+}