From f7a5a0a3bb4c3b904e8f2b297ea02a2f62735ccf Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 9 Jan 2018 16:30:00 +0900 Subject: [PATCH] monitor: enhance vblank_list information Change-Id: I0624e291be53f0abbf8d991969de3e6a6b353759 --- src/tdm_vblank.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/src/tdm_vblank.c b/src/tdm_vblank.c index 4816411..523ea4c 100644 --- a/src/tdm_vblank.c +++ b/src/tdm_vblank.c @@ -112,6 +112,7 @@ typedef struct _tdm_private_vblank { double vblank_gap; unsigned int quotient; + int last_interval; unsigned int last_seq; double last_time; @@ -310,6 +311,9 @@ _tdm_vblank_free_HW_wait(tdm_private_vblank *private_vblank, tdm_error error, un tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, w); tdm_display_unlock(private_vblank->dpy); + VDB("wait(%p) last(%.6f) sequence(%u) done (error:%d, call_cb:%u)", + w, 0, w->target_seq, error, call_cb); + if (call_cb && w->func) w->func(private_vblank, error, 0, 0, 0, w->user_data); @@ -498,6 +502,7 @@ tdm_vblank_create(tdm_display *dpy, tdm_output *output, tdm_error *error) private_vblank->output = output; private_vblank->check_HW_or_SW = 1; private_vblank->fps_changeable = 1; + private_vblank->last_interval = -1; _tdm_vblank_update_output_info(private_vblank); @@ -740,6 +745,8 @@ _tdm_vblank_sw_timer_update(tdm_private_vblank *private_vblank) VIN("Create SW timer"); } + private_vblank->last_interval = ms_delay; + ret = tdm_event_loop_source_timer_update(private_vblank->SW_timer, ms_delay); if (ret != TDM_ERROR_NONE) { tdm_display_unlock(private_vblank->dpy); @@ -883,6 +890,8 @@ _tdm_vblank_wait_HW(tdm_vblank_wait_info *wait_info) skip, hw_interval, wait_info->target_seq); } + private_vblank->last_interval = hw_interval; + if (private_vblank->add_front) ret = tdm_output_wait_vblank_add_front(private_vblank->output, hw_interval, 0, _tdm_vblank_cb_vblank_HW, wait_info); @@ -1242,21 +1251,45 @@ tdm_vblank_get_stamp(tdm_vblank *vblank) return private_vblank->stamp; } +static unsigned int +_tdm_vblank_get_waiting_count(tdm_private_vblank *private_vblank) +{ + tdm_vblank_wait_info *wait_info = NULL; + unsigned int count = 0; + + LIST_FOR_EACH_ENTRY(wait_info, &private_vblank->HW_wait_list, link) { + count++; + } + + LIST_FOR_EACH_ENTRY(wait_info, &private_vblank->SW_wait_list, link) { + count++; + } + + return count; +} + INTERN void tdm_vblank_get_vblank_list_information(tdm_display *dpy, char *reply, int *len) { tdm_private_vblank *v = NULL; + tdm_output_dpms dpms = TDM_OUTPUT_DPMS_OFF; + tdm_output *output = tdm_display_get_output(dpy, 0, NULL); + + if (output) + tdm_output_get_dpms(output, &dpms); TDM_SNPRINTF(reply, len, "[Client Vblank List]\n"); + TDM_SNPRINTF(reply, len, "* DPMS: %s\n", tdm_dpms_str(dpms)); TDM_SNPRINTF(reply, len, "* global fps: %u\n", vblank_global_fps); - TDM_SNPRINTF(reply, len, "---------------------------------------------------------------\n"); - TDM_SNPRINTF(reply, len, "name fps ignore offset fake process\n"); - TDM_SNPRINTF(reply, len, "---------------------------------------------------------------\n"); + TDM_SNPRINTF(reply, len, "----------------------------------------------------------------------------------\n"); + TDM_SNPRINTF(reply, len, "Name Type Wait Interval Sequence Fps Ignore Offset Fake Process\n"); + TDM_SNPRINTF(reply, len, "----------------------------------------------------------------------------------\n"); pthread_mutex_lock(&valid_list_lock); LIST_FOR_EACH_ENTRY(v, &valid_vblank_list, valid_link) { const char *proc_name = NULL; pid_t pid = 0; + unsigned int count; if (v->resource) { struct wl_client *client = wl_resource_get_client(v->resource); @@ -1266,9 +1299,18 @@ tdm_vblank_get_vblank_list_information(tdm_display *dpy, char *reply, int *len) } } - TDM_SNPRINTF(reply, len, "%-12s %u %u %d %u %s (pid: %u)\n", - v->name, v->fps, v->ignore_global_fps, v->offset, v->enable_fake, - (proc_name) ? proc_name : "Unknown", pid); + count = _tdm_vblank_get_waiting_count(v); + + TDM_SNPRINTF(reply, len, "%-8s(%p) ", v->name, v); + TDM_SNPRINTF(reply, len, "%-4s ", (v->last_type == VBLANK_EVENT_TYPE_HW) ? "HW" : "SW"); + TDM_SNPRINTF(reply, len, "%-4s ", (count > 0) ? "O" : " "); + TDM_SNPRINTF(reply, len, "%-8d ", v->last_interval); + TDM_SNPRINTF(reply, len, "%-8u ", v->last_seq); + TDM_SNPRINTF(reply, len, "%-3u ", v->fps); + TDM_SNPRINTF(reply, len, "%-6u ", v->ignore_global_fps); + TDM_SNPRINTF(reply, len, "%-6d ", v->offset); + TDM_SNPRINTF(reply, len, "%-4u ", v->enable_fake); + TDM_SNPRINTF(reply, len, "%s(pid:%d)\n", (proc_name) ? proc_name : "Unknown", pid); } pthread_mutex_unlock(&valid_list_lock); -- 2.7.4