e_plane_renderer: remove event lock and always check can acquire 58/91258/9
authorSangjin Lee <lsj119@samsung.com>
Thu, 6 Oct 2016 11:37:59 +0000 (20:37 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Thu, 6 Oct 2016 13:40:37 +0000 (22:40 +0900)
in nocomp mode if client doesn't update buffer.

we want share only event fd in queue acquirable cb and event acquirable event cb

Change-Id: I36b20ad9a65affd9ce64b45d645dd8c573be2256

src/bin/e_plane.c
src/bin/e_plane_renderer.c
src/bin/e_plane_renderer.h

index 4cd4677..ba851d2 100644 (file)
@@ -242,43 +242,31 @@ _e_plane_surface_from_client_acquire_reserved(E_Plane *plane)
    renderer_client = e_plane_renderer_client_get(ec);
    EINA_SAFETY_ON_NULL_RETURN_VAL(renderer_client, NULL);
 
-   if (!e_comp_object_hwc_update_exists(ec->frame)) return NULL;
+   if (e_comp_object_hwc_update_exists(ec->frame))
+     {
+        e_comp_object_hwc_update_set(ec->frame, EINA_FALSE);
 
-   e_comp_object_hwc_update_set(ec->frame, EINA_FALSE);
+        if (plane_trace_debug)
+           ELOGF("E_PLANE", "Plane:%p Display Client", ec->pixmap, ec, plane);
 
-   if (plane_trace_debug)
-     ELOGF("E_PLANE", "Plane:%p Display Client", ec->pixmap, ec, plane);
+        if (!e_plane_renderer_surface_queue_clear(renderer))
+           ERR("fail to e_plane_renderer_surface_queue_clear");
 
-   if (!e_plane_renderer_surface_queue_clear(renderer))
-     {
-        ERR("fail to e_plane_renderer_surface_queue_clear");
-        return NULL;
-     }
-
-    /* acquire the surface from the client_queue */
-   tsurface = e_plane_renderer_client_surface_recieve(renderer_client);
-   if (!tsurface)
-     {
-        ERR("fail to e_plane_renderer_client_surface_recieve");
-        return NULL;
-     }
+        /* acquire the surface from the client_queue */
+        tsurface = e_plane_renderer_client_surface_recieve(renderer_client);
+        if (!tsurface)
+           ERR("fail to e_plane_renderer_client_surface_recieve");
 
-   /* enqueue the surface to the layer_queue */
-   if (!e_plane_renderer_surface_queue_enqueue(plane->renderer, tsurface))
-     {
-        e_plane_renderer_surface_send(renderer, ec, tsurface);
-        ERR("fail to e_plane_renderer_surface_queue_enqueue");
-        return NULL;
+        /* enqueue the surface to the layer_queue */
+        if (!e_plane_renderer_surface_queue_enqueue(plane->renderer, tsurface))
+          {
+              e_plane_renderer_surface_send(renderer, ec, tsurface);
+              ERR("fail to e_plane_renderer_surface_queue_enqueue");
+          }
      }
 
    /* aquire */
    tsurface = e_plane_renderer_surface_queue_acquire(plane->renderer);
-   if (!tsurface)
-     {
-        e_plane_renderer_surface_send(renderer, ec, tsurface);
-        ERR("fail e_plane_renderer_surface_queue_acquire");
-        return NULL;
-     }
 
    return tsurface;
 }
index 6768e8b..31fdcc6 100644 (file)
@@ -241,24 +241,13 @@ _e_plane_renderer_surface_find_disp_surface(E_Plane_Renderer *renderer, tbm_surf
 static void
 _e_plane_renderer_cb_acquirable(tbm_surface_queue_h surface_queue, void *data)
 {
-    E_Plane_Renderer *renderer = (E_Plane_Renderer *)data;
-    int ret;
+    int fd = (int)data;
     uint64_t value = 1;
+    int ret;
 
-    EINA_SAFETY_ON_NULL_RETURN(renderer);
-
-    pthread_mutex_lock(&renderer->event_lock);
-
-    if (!renderer->ee) goto end;
-    if (renderer->event_fd < 0) goto end;
-    if (!renderer->event_hdlr) goto end;
-
-    ret = write(renderer->event_fd, &value, sizeof(value));
+    ret = write(fd, &value, sizeof(value));
     if (ret == -1)
        ERR("failed to send acquirable event:%m");
-
-end:
-    pthread_mutex_unlock(&renderer->event_lock);
 }
 
 static void
@@ -473,27 +462,15 @@ e_plane_renderer_shutdown(void)
 static Eina_Bool
 _e_plane_renderer_cb_queue_acquirable_event(void *data, Ecore_Fd_Handler *fd_handler)
 {
-   E_Plane *plane = (E_Plane *)data;
-   E_Plane_Renderer *renderer = NULL;
-   char buffer[64];
    int len;
+   int fd;
+   char buffer[64];
 
-   if (!plane) return ECORE_CALLBACK_RENEW;
-
-   renderer = plane->renderer;
-
-   if (!renderer) return ECORE_CALLBACK_RENEW;
-   if (renderer->event_fd < 0) return ECORE_CALLBACK_RENEW;
-   if (plane->ec) return ECORE_CALLBACK_RENEW;
-
-   pthread_mutex_lock(&renderer->event_lock);
-
-   len = read(renderer->event_fd, buffer, sizeof(buffer));
+   fd = ecore_main_fd_handler_fd_get(fd_handler);
+   len = read(fd, buffer, sizeof(buffer));
    if (len == -1)
       ERR("failed to read queue acquire event fd:%m");
 
-   pthread_mutex_unlock(&renderer->event_lock);
-
    return ECORE_CALLBACK_RENEW;
 }
 
@@ -517,7 +494,7 @@ e_plane_renderer_new(E_Plane *plane)
         ecore_evas_manual_render_set(renderer->ee, 1);
         renderer->event_fd = eventfd(0, EFD_NONBLOCK);
         renderer->event_hdlr = ecore_main_fd_handler_add(renderer->event_fd, ECORE_FD_READ,
-                               _e_plane_renderer_cb_queue_acquirable_event, plane, NULL, NULL);
+                               _e_plane_renderer_cb_queue_acquirable_event, NULL, NULL, NULL);
      }
 
    return renderer;
@@ -634,18 +611,17 @@ e_plane_renderer_del(E_Plane_Renderer *renderer)
      {
         WRN("Delete renderer for canvas");
 
-        pthread_mutex_lock(&renderer->event_lock);
-
         if (renderer->event_hdlr)
-           ecore_main_fd_handler_del(renderer->event_hdlr);
+          {
+             ecore_main_fd_handler_del(renderer->event_hdlr);
+             renderer->event_hdlr = NULL;
+          }
 
         if (renderer->event_fd)
           {
              close(renderer->event_fd);
              renderer->event_fd = -1;
           }
-
-        pthread_mutex_unlock(&renderer->event_lock);
      }
 
    if (plane->reserved_memory)
@@ -1056,7 +1032,7 @@ e_plane_renderer_surface_queue_set(E_Plane_Renderer *renderer, tbm_surface_queue
 
    if (renderer->ee)
      {
-        tsq_err = tbm_surface_queue_add_acquirable_cb(renderer->tqueue, _e_plane_renderer_cb_acquirable, (void *)renderer);
+        tsq_err = tbm_surface_queue_add_acquirable_cb(renderer->tqueue, _e_plane_renderer_cb_acquirable, (void *)renderer->event_fd);
         if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
           {
              ERR("fail to add dequeuable cb");
index f8aad01..fcf28fd 100644 (file)
@@ -43,7 +43,6 @@ struct _E_Plane_Renderer {
 
    Ecore_Fd_Handler   *event_hdlr;
    int                 event_fd;
-   pthread_mutex_t     event_lock;
 };
 
 EINTERN Eina_Bool                  e_plane_renderer_init(void);