e_info: add -hwc_wins commit 05/241305/6
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 19 Aug 2020 04:52:12 +0000 (13:52 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Tue, 25 Aug 2020 05:27:23 +0000 (14:27 +0900)
print commit infomation of hwc windows

Change-Id: I9382767b378335cfe0f2e20129a9d73a7218f52a

src/bin/e_hwc_windows.c
src/bin/e_hwc_windows.h
src/bin/e_info_client.c
src/bin/e_info_shared_types.h

index 37aca270fba31a0870df0a403ebaae5bf675652f..6f65ad8b126780799a3c707712302f753214c962 100644 (file)
@@ -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
index 0b6cbe1f95d062e3fed327d570584a4fca9393d7..59cad79f18b2f5a69151d93d38c532057d5f7954 100644 (file)
@@ -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 {
index 898882d988127bada44e11dd9de03499d54cd8c6..1c867081d466c3a627dc62b4ba37ea974db480a1 100644 (file)
@@ -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
index 5aca4940057fb258070bf9258c2d8b6046e7173a..791b2188fc2c0d9c94b1521a5d5e73d37c6c7555 100644 (file)
@@ -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                                                                        */