e_dpms: send dpms set request result event with no missing 92/221892/3
authorJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 8 Jan 2020 07:10:39 +0000 (16:10 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 8 Jan 2020 08:52:53 +0000 (08:52 +0000)
send dpms event by each request but do not guarantee sequence.

set result success:
send E_DPMS_MANAGER_ERROR_NONE event.

set result fail:
send E_DPMS_MANAGER_ERROR_INVALID_PERMISSION event if dpms set fail.
send E_DPMS_MANAGER_ERROR_ALREADY_DONE event if do dpms set with same mode value.

Change-Id: Icd4c0ab21f53bc74341a4cc6588f21e6f6938b27
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/bin/e_dpms.c

index 5cc055b..7c7f9c4 100644 (file)
@@ -44,6 +44,7 @@ typedef struct _E_Dpms
    E_Output *e_output;
    E_Output_Hook *dpms_change_hook;
    E_Dpms_Mode mode;
+   int request_count;
 } E_Dpms;
 
 static Eldbus_Message *
@@ -185,8 +186,6 @@ _e_dpms_delay(void *data)
 
    dpms = (E_Dpms *)data;
 
-   delay_timer = NULL;
-
    e_output_dpms = e_output_dpms_get(dpms->e_output);
    if (e_output_dpms != dpms->mode)
      {
@@ -195,10 +194,20 @@ _e_dpms_delay(void *data)
         dpms->mode = e_output_dpms;
      }
 
-   tizen_dpms_manager_send_set_state(gresource, dpms->mode, E_DPMS_MANAGER_ERROR_NONE);
-   INF("DPMS:tizen_dpms_manager send set event by timer(res:%p, output:%p, dpms:%d)", gresource, dpms->e_output, dpms->mode);
+   if (dpms->request_count != 0)
+     {
+        tizen_dpms_manager_send_set_state(gresource, dpms->mode, E_DPMS_MANAGER_ERROR_NONE);
+        INF("DPMS:tizen_dpms_manager send set event by timer(res:%p, output:%p, dpms:%d)", gresource, dpms->e_output, dpms->mode);
+        dpms->request_count--;
+     }
 
-   return ECORE_CALLBACK_CANCEL;
+   if (dpms->request_count == 0)
+     {
+        delay_timer = NULL;
+        return ECORE_CALLBACK_CANCEL;
+     }
+   else
+     return ECORE_CALLBACK_RENEW;
 }
 
 static void
@@ -214,12 +223,20 @@ _e_tizen_dpms_cb_output_dpms_change(void *data, E_Output *output)
 
    e_output_dpms = e_output_dpms_get(output);
 
-   if (delay_timer)
-   ecore_timer_del(delay_timer);
-   delay_timer = NULL;
-   INF("DPMS:tizen_dpms_manager set dpms async cb(res:%p, output:%p, dpms:%d)",
-       gresource, dpms->e_output, e_output_dpms);
-   tizen_dpms_manager_send_set_state(gresource, e_output_dpms, E_DPMS_MANAGER_ERROR_NONE);
+   if (dpms->request_count != 0)
+     {
+        INF("DPMS:tizen_dpms_manager set dpms async cb(res:%p, output:%p, dpms:%d)",
+            gresource, dpms->e_output, e_output_dpms);
+        tizen_dpms_manager_send_set_state(gresource, e_output_dpms, E_DPMS_MANAGER_ERROR_NONE);
+        dpms->request_count--;
+     }
+
+   if (dpms->request_count == 0)
+     {
+        if (delay_timer)
+          ecore_timer_del(delay_timer);
+        delay_timer = NULL;
+     }
 }
 
 static E_Dpms *
@@ -309,13 +326,25 @@ _e_tizen_dpms_manager_cb_set_dpms(struct wl_client *client, struct wl_resource *
 
    ret = e_output_dpms_set(dpms->e_output, mode);
    if (ret)
-     INF("DPMS:tizen_dpms_manager set dpms(res:%p, output:%p, dpms:%d, %d)", resource, dpms->e_output, mode, dpms->mode);
+     {
+        INF("DPMS:tizen_dpms_manager set dpms(res:%p, output:%p, dpms:%d, %d)", resource, dpms->e_output, mode, dpms->mode);
+        dpms->request_count++;
+     }
    else
      {
-        ERR("DPMS:tizen_dpms_manager set dpms fail(res:%p, output:%p, dpms=%d)", resource, dpms->e_output, mode);
-        ecore_timer_del(delay_timer);
-        delay_timer = NULL;
-        tizen_dpms_manager_send_set_state(resource, dpms->mode, E_DPMS_MANAGER_ERROR_INVALID_PERMISSION);
+        if (e_output_dpms_get(dpms->e_output) == dpms)
+          tizen_dpms_manager_send_set_state(resource, dpms->mode, E_DPMS_MANAGER_ERROR_ALREADY_DONE);
+        else
+          tizen_dpms_manager_send_set_state(resource, dpms->mode, E_DPMS_MANAGER_ERROR_INVALID_PERMISSION);
+
+        ERR("DPMS:tizen_dpms_manager set dpms fail(res:%p, output:%p, dpms:%d, %d)",
+            resource, dpms->e_output, mode, dpms->mode);
+
+        if (dpms->request_count == 0)
+          {
+             ecore_timer_del(delay_timer);
+             delay_timer = NULL;
+          }
      }
 }