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;
}
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
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;
}
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;
{
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)
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");