From: Changyeon Lee Date: Wed, 19 Aug 2020 04:52:12 +0000 (+0900) Subject: e_info: add -hwc_wins commit X-Git-Tag: submit/tizen/20200825.082113~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b4c40766673970ee2d96c0e6a6a3f4123a1d95a9;p=platform%2Fupstream%2Fenlightenment.git e_info: add -hwc_wins commit print commit infomation of hwc windows Change-Id: I9382767b378335cfe0f2e20129a9d73a7218f52a --- diff --git a/src/bin/e_hwc_windows.c b/src/bin/e_hwc_windows.c index 37aca270fb..6f65ad8b12 100644 --- a/src/bin/e_hwc_windows.c +++ b/src/bin/e_hwc_windows.c @@ -3609,6 +3609,88 @@ _e_hwc_windows_window_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug eldbus_message_iter_container_close(iter, line_array); } +static void +_e_hwc_windows_window_debug_commit_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug_Cmd cmd) +{ + Eldbus_Message_Iter *line_array; + E_Comp_Screen *e_comp_screen = NULL; + E_Output *output = NULL; + E_Hwc *hwc = NULL; + Eina_List *l, *l2; + int idx = 0; + int commit_idx = 0; + char info_str[1024]; + E_Hwc_Windows_Commit_Data *wins_commit_data = NULL; + E_Hwc_Window_Commit_Data *commit_data = NULL; + + e_comp_screen = e_comp->e_comp_screen; + + eldbus_message_iter_arguments_append(iter, "as", &line_array); + if (!e_comp_screen) + { + eldbus_message_iter_basic_append(line_array, + 's', + "e_comp_screen not initialized.."); + eldbus_message_iter_container_close(iter, line_array); + return; + } + + EINA_LIST_FOREACH(e_comp_screen->outputs, l, output) + { + if (!output) continue; + if (!output->config.enabled) continue; + if (!output->tdm_hwc) continue; + + hwc = output->hwc; + if (!output->hwc) continue; + + snprintf(info_str, sizeof(info_str), + "HWC:%p mode:%d wait_commit:%d deactive:%d transition:%d norender:%d", + hwc, hwc->hwc_mode, hwc->wait_commit, hwc->hwc_deactive, hwc->transition, hwc->norender); + eldbus_message_iter_basic_append(line_array, 's', info_str); + + eldbus_message_iter_basic_append(line_array, 's', + "===========================================================================================" + "====================="); + EINA_LIST_FOREACH(hwc->wins_commit_data_list, l, wins_commit_data) + { + snprintf(info_str, sizeof(info_str), + "[%2d] Wins_Commit_Data(%p) target_commit_data(%p) commit_data_list(%p)", + ++idx, wins_commit_data, wins_commit_data->target_commit_data, wins_commit_data->commit_data_list); + eldbus_message_iter_basic_append(line_array, 's', info_str); + + commit_idx = 0; + + if (wins_commit_data->target_commit_data) + { + snprintf(info_str, sizeof(info_str), + " └─ [%2d] Commit_Data(%p) hwc_window(%p):target tsurface(%p) queue(%p)", + ++commit_idx, wins_commit_data->target_commit_data, + wins_commit_data->target_commit_data->hwc_window, + wins_commit_data->target_commit_data->buffer.tsurface, + wins_commit_data->target_commit_data->buffer.queue); + eldbus_message_iter_basic_append(line_array, 's', info_str); + } + + EINA_LIST_FOREACH(wins_commit_data->commit_data_list, l2, commit_data) + { + snprintf(info_str, sizeof(info_str), + " └─ [%2d] Commit_Data(%p) hwc_window(%p):win(0x%zx) tsurface(%p) queue(%p)", + ++commit_idx, commit_data, commit_data->hwc_window, + e_client_util_win_get(commit_data->hwc_window->ec), + commit_data->buffer.tsurface, commit_data->buffer.queue); + eldbus_message_iter_basic_append(line_array, 's', info_str); + } + } + + eldbus_message_iter_basic_append(line_array, 's', + "===========================================================================================" + "====================="); + } + + eldbus_message_iter_container_close(iter, line_array); +} + EINTERN void e_hwc_windows_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug_Cmd cmd) { @@ -3616,6 +3698,8 @@ e_hwc_windows_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug_Cmd cmd e_hwc_window_queue_debug_info_get(iter); else if (cmd >= E_HWC_WINS_DEBUG_CMD_VIS && cmd <= E_HWC_WINS_DEBUG_CMD_NO) _e_hwc_windows_window_debug_info_get(iter, cmd); + else if (cmd == E_HWC_WINS_DEBUG_CMD_COMMIT) + _e_hwc_windows_window_debug_commit_info_get(iter, cmd); } EINTERN Eina_Bool diff --git a/src/bin/e_hwc_windows.h b/src/bin/e_hwc_windows.h index 0b6cbe1f95..59cad79f18 100644 --- a/src/bin/e_hwc_windows.h +++ b/src/bin/e_hwc_windows.h @@ -17,6 +17,7 @@ typedef enum E_HWC_WINS_DEBUG_CMD_VD, E_HWC_WINS_DEBUG_CMD_NO, E_HWC_WINS_DEBUG_CMD_QUEUE, + E_HWC_WINS_DEBUG_CMD_COMMIT, } E_Hwc_Wins_Debug_Cmd; struct _E_Hwc_Windows_Commit_Data { diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index 898882d988..1c867081d4 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -5355,6 +5355,8 @@ _e_info_client_proc_hwc_wins(int argc, char **argv) cmd = E_HWC_WINS_DEBUG_CMD_NO; else if (eina_streq(argv[2], "queue")) cmd = E_HWC_WINS_DEBUG_CMD_QUEUE; + else if (eina_streq(argv[2], "commit")) + cmd = E_HWC_WINS_DEBUG_CMD_COMMIT; else if (eina_streq(argv[2], "help") || eina_streq(argv[2], "usage")) goto usage; else diff --git a/src/bin/e_info_shared_types.h b/src/bin/e_info_shared_types.h index 5aca494005..791b2188fc 100644 --- a/src/bin/e_info_shared_types.h +++ b/src/bin/e_info_shared_types.h @@ -258,6 +258,7 @@ typedef enum "\tvd : print VIDEO accepted state hwc window info\n" \ "\tno : print NONE accepted state hwc window info\n" \ "\tqueue : print hwc window queue info\n" \ + "\tcommit : print hwc window commit info\n" \ "Example:\n" \ "\twinfo -hwc_wins\n" \ "\twinfo -hwc_wins all\n" \ @@ -266,7 +267,8 @@ typedef enum "\twinfo -hwc_wins cs\n" \ "\twinfo -hwc_wins vd\n" \ "\twinfo -hwc_wins no\n " \ - "\twinfo -hwc_wins queue\n " + "\twinfo -hwc_wins queue\n " \ + "\twinfo -hwc_wins commit\n " /* -------------------------------------------------------------------------- */ /* FPS */