e_eom: modify to remove ecore drm dependency 30/153130/2
authorSung-Jin Park <sj76.park@samsung.com>
Wed, 27 Sep 2017 12:50:27 +0000 (21:50 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 28 Sep 2017 05:45:18 +0000 (05:45 +0000)
Change-Id: Ic3fee5b65362d232496f5b4f3a560e396d12ed11
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/bin/e_eom.c

index fe5828c9203e0c35987058faa2332af7639ed0ed..2fbca074c963baf400cf2dd6610e41bc776ee184 100644 (file)
 #define EOMDB(msg, ARG...) DBG("[EOM][DBG] " msg, ##ARG)
 
 #define EOM_NUM_ATTR 3
-#define EOM_CONNECT_CHECK_TIMEOUT 7.0
+#define EOM_CONNECT_CHECK_TIMEOUT 10.0
 #define EOM_DELAY_CHECK_TIMEOUT 4.0
 #define EOM_ROTATE_DELAY_TIMEOUT 0.4
 
+#define TDM_CONNECTOR_NAME_LEN 32
+
 #ifndef CLEAR
 #define CLEAR(x) memset(&(x), 0, sizeof (x))
 #endif
@@ -80,8 +82,7 @@ struct _E_Eom
    Eina_List *comp_object_intercept_hooks;
 
    /* Internal output data */
-   int main_output_state;
-   char *main_output_name;
+   Eina_Bool main_output_state;
    int width;
    int height;
    char check_first_boot;
@@ -228,6 +229,7 @@ static void _e_eom_cb_dequeuable(tbm_surface_queue_h queue, void *user_data);
 static void _e_eom_cb_pp(tdm_pp *pp, tbm_surface_h tsurface_src, tbm_surface_h tsurface_dst, void *user_data);
 static void _e_eom_presentation_pp_run(E_EomOutputPtr eom_output, tbm_surface_h src_surface, E_EomBufferPtr eom_buff, Eina_Bool primary);
 static E_EomOutputPtr _e_eom_output_get_by_id(int id);
+static Eina_Bool _e_eom_boot_connection_check(void *data);
 
 static E_EomOutputBufferPtr
 _e_eom_output_buff_create(E_EomOutputPtr eom_output, tbm_surface_h tbm_surface, E_EomEndShowingEventPtr cb_func, void *cb_user_data)
@@ -534,71 +536,27 @@ _e_eom_output_primary_layer_setup(E_EomOutputPtr eom_output)
 }
 
 static tbm_surface_h
-_e_eom_util_get_output_surface(const char *name)
+_e_eom_util_get_output_surface()
 {
-   Ecore_Drm_Output *primary_output = NULL;
-   Ecore_Drm_Device *dev;
-   const Eina_List *l;
    tbm_surface_h tbm = NULL;
-   tdm_output *tdm_output_obj = NULL;
-   tdm_layer *layer = NULL;
-   tdm_layer_capability capabilities = 0;
    tdm_error err = TDM_ERROR_NONE;
-   int count = 0, i = 0;
 
-   EINA_LIST_FOREACH(ecore_drm_devices_get(), l, dev)
-     {
-        primary_output = ecore_drm_device_output_name_find(dev, name);
-        if (primary_output != NULL)
-          break;
-     }
+   E_Output *output_primary = NULL;
+   E_Plane *fb_target = NULL;
 
-   if (primary_output == NULL)
-     {
-        EOMER("Get primary output fail.(%s)", name);
-        EINA_LIST_FOREACH(ecore_drm_devices_get(), l, dev)
-          {
-             primary_output = ecore_drm_output_primary_get(dev);
-             if (primary_output != NULL)
-               break;
-          }
+   output_primary = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output_primary, NULL);
 
-        if (primary_output == NULL)
-          {
-             EOMER("Get primary output fail.(%s)", name);
-             return NULL;
-          }
-     }
+   fb_target = e_output_fb_target_get(output_primary);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(fb_target, NULL);
 
-   tdm_output_obj = tdm_display_get_output(g_eom->dpy, 0, &err);
-   if (tdm_output_obj == NULL || err != TDM_ERROR_NONE)
-     {
-        EOMER("tdm_display_get_output 0 fail");
-        return NULL;
-     }
-   err = tdm_output_get_layer_count(tdm_output_obj, &count);
+   tbm = tdm_layer_get_displaying_buffer(fb_target->tlayer, &err);
    if (err != TDM_ERROR_NONE)
      {
-        EOMER("tdm_output_get_layer_count fail");
+        EOMER("tdm_layer_get_displaying_buffer fail");
         return NULL;
      }
 
-   for (i = 0; i < count; i++)
-     {
-        layer = tdm_output_get_layer(tdm_output_obj, i, NULL);
-        tdm_layer_get_capabilities(layer, &capabilities);
-        if (capabilities & TDM_LAYER_CAPABILITY_PRIMARY)
-          {
-             tbm = tdm_layer_get_displaying_buffer(layer, &err);
-             if (err != TDM_ERROR_NONE)
-               {
-                  EOMER("tdm_layer_get_displaying_buffer fail");
-                  return NULL;
-               }
-             break;
-          }
-     }
-
    return tbm;
 }
 
@@ -1243,7 +1201,7 @@ _e_eom_pp_run(E_EomOutputPtr eom_output, Eina_Bool first_run)
    E_EomOutputPpPtr pp_primary = NULL;
    Eina_Bool ret = EINA_FALSE;
 
-   if (g_eom->main_output_state == 0)
+   if (g_eom->main_output_state == EINA_FALSE)
      return;
 
    /* If a client has committed its buffer stop mirror mode */
@@ -1283,7 +1241,7 @@ _e_eom_pp_run(E_EomOutputPtr eom_output, Eina_Bool first_run)
         if (eom_trace_debug)
           EOMDB("============================>  PP  START   tbm_buff:%p", dst_surface);
 
-        src_surface = _e_eom_util_get_output_surface(g_eom->main_output_name);
+        src_surface = _e_eom_util_get_output_surface();
         tdm_err = TDM_ERROR_OPERATION_FAILED;
         EINA_SAFETY_ON_NULL_GOTO(src_surface, error);
 
@@ -1373,7 +1331,7 @@ _e_eom_cb_pp(tdm_pp *pp, tbm_surface_h tsurface_src, tbm_surface_h tsurface_dst,
    if (pp_primary->queue == NULL)
      return;
 
-   if (g_eom->main_output_state == 0)
+   if (g_eom->main_output_state == EINA_FALSE)
      {
         tbm_surface_queue_release(pp_primary->queue, tsurface_dst);
         return;
@@ -1453,7 +1411,7 @@ _e_eom_cb_pp_presentation(E_EomOutputPtr eom_output, E_EomPpDataPtr ppdata, E_Eo
 
    E_FREE(ppdata);
 
-   if (g_eom->main_output_state == 0)
+   if (g_eom->main_output_state == EINA_FALSE)
      {
         tbm_surface_queue_release(eom_pp->queue, tsurface);
         return;
@@ -1578,7 +1536,7 @@ _e_eom_presentation_pp_run(E_EomOutputPtr eom_output, tbm_surface_h src_surface,
    E_EomOutputPpPtr eom_pp = NULL;
    E_EomPpDataPtr ppdata = NULL;
 
-   if (g_eom->main_output_state == 0)
+   if (g_eom->main_output_state == EINA_FALSE)
      return;
 
    if (eom_output->state == WAIT_PRESENTATION)
@@ -2161,13 +2119,13 @@ _e_eom_cb_tdm_output_status_change(tdm_output *output, tdm_output_change_type ty
    tdm_output_conn_status status, status_check;
    tdm_error ret = TDM_ERROR_NONE;
    const char *tmp_name;
-   char new_name[DRM_CONNECTOR_NAME_LEN];
+   char new_name[TDM_CONNECTOR_NAME_LEN];
    E_EomOutputPtr eom_output = NULL, eom_output_tmp = NULL;
    Eina_List *l;
 
    g_eom->check_first_boot = 1;
 
-   if (type == TDM_OUTPUT_CHANGE_DPMS || g_eom->main_output_state == 0)
+   if (type == TDM_OUTPUT_CHANGE_DPMS || g_eom->main_output_state == EINA_FALSE)
      return;
 
    if (g_eom->outputs)
@@ -2225,6 +2183,30 @@ _e_eom_cb_tdm_output_status_change(tdm_output *output, tdm_output_change_type ty
      }
 }
 
+static void
+_e_eom_main_output_info_get()
+{
+   E_Output *output_primary = NULL;
+   int w, h;
+
+   output_primary = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
+   EINA_SAFETY_ON_NULL_RETURN(output_primary);
+
+   if (e_output_connected(output_primary))
+     {
+        e_output_size_get(output_primary, &w, &h);
+        g_eom->width = w;
+        g_eom->height = h;
+        g_eom->main_output_state = EINA_TRUE;
+     }
+   else
+     {
+        g_eom->width = 0;
+        g_eom->height = 0;
+        g_eom->main_output_state = EINA_FALSE;
+     }
+}
+
 static Eina_Bool
 _e_eom_output_init(tdm_display *dpy)
 {
@@ -2355,12 +2337,16 @@ _e_eom_init_internal()
    g_eom->bufmgr = e_comp->e_comp_screen->bufmgr;
    EINA_SAFETY_ON_NULL_GOTO(g_eom->bufmgr, err);
 
+   _e_eom_main_output_info_get();
+
    if (_e_eom_output_init(g_eom->dpy) != EINA_TRUE)
      {
         EOMER("_e_eom_output_init fail");
         goto err;
      }
 
+   g_eom->timer = ecore_timer_add(EOM_CONNECT_CHECK_TIMEOUT, _e_eom_boot_connection_check, NULL);
+
    return EINA_TRUE;
 
 err:
@@ -2960,23 +2946,6 @@ _e_eom_cb_wl_bind(struct wl_client *client, void *data, uint32_t version, uint32
    EOMDB("=======================>  BIND CLIENT");
 }
 
-static Eina_Bool
-_e_eom_cb_ecore_drm_activate(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
-{
-
-   Ecore_Drm_Event_Activate *e = NULL;
-
-   if ((!event) || (!data))
-     return ECORE_CALLBACK_PASS_ON;
-
-   e = event;
-   (void) e;
-
-   EOMDB("e->active:%d", e->active);
-
-   return ECORE_CALLBACK_PASS_ON;
-}
-
 static Eina_Bool
 _e_eom_boot_connection_check(void *data)
 {
@@ -2986,7 +2955,7 @@ _e_eom_boot_connection_check(void *data)
    tdm_output_conn_status status = TDM_OUTPUT_CONN_STATUS_DISCONNECTED;
    tdm_error ret = TDM_ERROR_NONE;
    const char *tmp_name;
-   char new_name[DRM_CONNECTOR_NAME_LEN];
+   char new_name[TDM_CONNECTOR_NAME_LEN];
    Eina_List *l;
 
    if (g_eom->check_first_boot != 0)
@@ -3047,52 +3016,6 @@ _e_eom_boot_connection_check(void *data)
    return ECORE_CALLBACK_CANCEL;
 }
 
-static Eina_Bool
-_e_eom_cb_ecore_drm_output(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
-{
-   Ecore_Drm_Event_Output *e = NULL;
-   char buff[PATH_MAX];
-
-   if (!(e = event)) return ECORE_CALLBACK_PASS_ON;
-
-   EOMDB("id:%d (x,y,w,h):(%d,%d,%d,%d) (w_mm,h_mm):(%d,%d) refresh:%d subpixel_order:%d transform:%d make:%s model:%s name:%s plug:%d",
-         e->id, e->x, e->y, e->w, e->h, e->phys_width, e->phys_height, e->refresh, e->subpixel_order, e->transform, e->make, e->model, e->name, e->plug);
-
-   snprintf(buff, sizeof(buff), "%s", e->name);
-
-   /* main output */
-   if (e->id == 0)
-     {
-        if (e->plug == 1)
-          {
-             g_eom->width = e->w;
-             g_eom->height = e->h;
-             if (g_eom->main_output_name == NULL)
-               g_eom->main_output_name = strdup(buff);
-
-             g_eom->main_output_state = 1;
-
-             if (g_eom->check_first_boot == 0)
-               {
-                  if (g_eom->timer)
-                    ecore_timer_del(g_eom->timer);
-                  g_eom->timer = ecore_timer_add(EOM_CONNECT_CHECK_TIMEOUT, _e_eom_boot_connection_check, NULL);
-               }
-          }
-        else
-          {
-             g_eom->width = -1;
-             g_eom->height = -1;
-             if (g_eom->main_output_name)
-               free(g_eom->main_output_name);
-
-             g_eom->main_output_state = 0;
-          }
-     }
-
-   return ECORE_CALLBACK_PASS_ON;
-}
-
 static E_EomClientPtr
 _e_eom_client_get_current_by_ec(E_Client *ec)
 {
@@ -3476,13 +3399,10 @@ _e_eom_init()
 
    g_eom->angle = 0;
    g_eom->rotate_state = ROTATE_NONE;
-   g_eom->main_output_name = NULL;
 
    ret = _e_eom_init_internal();
    EINA_SAFETY_ON_FALSE_GOTO(ret == EINA_TRUE, err);
 
-   E_LIST_HANDLER_APPEND(g_eom->handlers, ECORE_DRM_EVENT_ACTIVATE, _e_eom_cb_ecore_drm_activate, g_eom);
-   E_LIST_HANDLER_APPEND(g_eom->handlers, ECORE_DRM_EVENT_OUTPUT, _e_eom_cb_ecore_drm_output, g_eom);
    E_LIST_HANDLER_APPEND(g_eom->handlers, E_EVENT_CLIENT_BUFFER_CHANGE, _e_eom_cb_client_buffer_change, NULL);
 #ifdef SUPPORT_ROTATE
    /* TODO: add if def _F_ZONE_WINDOW_ROTATION_ */