e_hwc_windows: add timeout log of tdm_hwc_commit_handler 85/294285/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 12 Jun 2023 10:28:16 +0000 (19:28 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 15 Jun 2023 11:28:59 +0000 (20:28 +0900)
log is printed when tdm_hwc_commit_handler is not called
until 5 seconds are over.

Change-Id: Icbdfb98d480849064d94e4a350bad6c3633dbdee

src/bin/e_hwc_windows.c
src/bin/e_hwc_windows.h

index e6ec8f9..9446470 100644 (file)
@@ -6,6 +6,8 @@
 # include <sys/eventfd.h>
 # include <pixman.h>
 
+#define E_HWC_WINDOW_COMMIT_HANDLER_LOG_TIMEOUT 5.0
+
 #define DBG_EVALUATE 1
 #define DEFAULT_MAX_TRANSITION_FAILURES 3;
 
@@ -438,6 +440,12 @@ _e_hwc_windows_commit_handler(tdm_hwc *thwc, unsigned int sequence,
    hwc = wins_commit_data->hwc;
    EINA_SAFETY_ON_NULL_RETURN(hwc);
 
+   if (wins_commit_data->commit_handler_log_timeout_set)
+     {
+        EHWSERR("Timeout commit handler is called wins_commit_data:%p",
+                hwc, wins_commit_data);
+     }
+
    EHWSTRACE("!!!!!!!! HWC Commit Handler !!!!!!!!", NULL, hwc);
    TRACE_DS_MARK(_e_hwc_windows_commit_handler);
 
@@ -456,7 +464,8 @@ _e_hwc_windows_commit_handler_timeout(void *data)
 
    if (!wins_commit_data) return ECORE_CALLBACK_CANCEL;
 
-   EHWSERR("Timeout wait commit", wins_commit_data->hwc);
+   EHWSERR("Timeout wait commit wins_commit_data:%p",
+           wins_commit_data->hwc, wins_commit_data);
 
    wins_commit_data->commit_handler_timer = NULL;
 
@@ -465,11 +474,25 @@ _e_hwc_windows_commit_handler_timeout(void *data)
    return ECORE_CALLBACK_CANCEL;
 }
 
+static Eina_Bool
+_e_hwc_windows_commit_handler_log_timeout(void *data)
+{
+   E_Hwc_Windows_Commit_Data *wins_commit_data = (E_Hwc_Windows_Commit_Data *)data;
+
+   if (!wins_commit_data) return ECORE_CALLBACK_CANCEL;
+
+   EHWSERR("Timeout wait commit wins_commit_data:%p",
+           wins_commit_data->hwc, wins_commit_data);
+
+   wins_commit_data->commit_handler_timer = NULL;
+   wins_commit_data->commit_handler_log_timeout_set = EINA_TRUE;
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
 static void
 _e_hwc_windows_commit_handler_timer_set(E_Hwc *hwc, E_Hwc_Windows_Commit_Data *wins_commit_data, Eina_Bool set)
 {
-   if (!e_comp->commit_handler_timer.use) return;
-
    if (wins_commit_data->commit_handler_timer)
      {
         ecore_timer_del(wins_commit_data->commit_handler_timer);
@@ -477,9 +500,21 @@ _e_hwc_windows_commit_handler_timer_set(E_Hwc *hwc, E_Hwc_Windows_Commit_Data *w
      }
 
    if (set)
-     wins_commit_data->commit_handler_timer = ecore_timer_add(e_comp->commit_handler_timer.interval,
-                                                              _e_hwc_windows_commit_handler_timeout,
-                                                              wins_commit_data);
+     {
+        if (e_comp->commit_handler_timer.use)
+          {
+             wins_commit_data->commit_handler_timer = ecore_timer_add(e_comp->commit_handler_timer.interval,
+                                                                      _e_hwc_windows_commit_handler_timeout,
+                                                                      wins_commit_data);
+          }
+        else
+          {
+             wins_commit_data->commit_handler_timer = ecore_timer_add(E_HWC_WINDOW_COMMIT_HANDLER_LOG_TIMEOUT,
+                                                                      _e_hwc_windows_commit_handler_log_timeout,
+                                                                      wins_commit_data);
+             wins_commit_data->commit_handler_log_timeout_set = EINA_FALSE;
+          }
+     }
 }
 
 static E_Hwc_Windows_Commit_Data *
index 1745044..4e474b4 100644 (file)
@@ -26,6 +26,7 @@ struct _E_Hwc_Windows_Commit_Data {
    E_Hwc *hwc;
 
    Ecore_Timer *commit_handler_timer;
+   Eina_Bool commit_handler_log_timeout_set;
 
    Eina_Bool use_vblank_handler;
    Eina_Bool vblank_done;