#include "e_display_intern.h"
#include "e_view_intern.h"
#include "e_view_client_intern.h"
+#include "e_canvas_intern.h"
# include <Evas_Engine_GL_Tbm.h>
# include <Evas_Engine_Software_Tbm.h>
{
E_Hwc_Window_Target *root_target_hwc_window;
E_Hwc *hwc;
- int w, h;
hwc = target_hwc_window->hwc;
EINA_SAFETY_ON_NULL_RETURN(hwc);
root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
EINA_SAFETY_ON_NULL_RETURN(root_target_hwc_window);
- if (!root_target_hwc_window->ee) return;
- if (!root_target_hwc_window->evas) return;
+ if (!root_target_hwc_window->canvas) return;
- ecore_evas_geometry_get(root_target_hwc_window->ee, 0, 0, &w, &h);
- evas_damage_rectangle_add(root_target_hwc_window->evas, 0, 0, w, h);
+ e_canvas_damage_add(root_target_hwc_window->canvas);
}
static void
}
static void
-_e_hwc_windows_target_window_render_pre_cb(void *data, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
+_e_hwc_windows_canvas_cb_render_pre(struct wl_listener *listener, void *data)
{
E_Hwc_Window_Target *target_hwc_window = (E_Hwc_Window_Target *)data;
E_Hwc_Window *hwc_window, *target_window;
tbm_surface_h tsurface;
tbm_surface_queue_error_e tsq_err;
+ target_hwc_window = wl_container_of(listener, target_hwc_window, canvas_render_pre_listener);
+
hwc = target_hwc_window->hwc;
if (!e_hwc_windows_fence_enabled_get(hwc)) return;
}
static void
-_e_hwc_windows_target_window_render_flush_pre_cb(void *data, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- E_Hwc_Window_Target *target_hwc_window = (E_Hwc_Window_Target *)data;
- E_Hwc *hwc;
-
- hwc = target_hwc_window->hwc;
- if (!e_hwc_windows_fence_enabled_get(hwc)) return;
-
- if (target_hwc_window->end_render_sync)
- {
- e_egl_sync_destroy(target_hwc_window->end_render_sync);
- target_hwc_window->end_render_sync = NULL;
- }
-
- target_hwc_window->end_render_sync = e_egl_sync_fence_create();
- if (!target_hwc_window->end_render_sync)
- EHWSERR("Failed to create E_Egl_Sync", hwc);
-}
-
-static void
-_e_hwc_windows_target_window_render_flush_post_cb(void *data, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
+_e_hwc_windows_canvas_cb_render_post(struct wl_listener *listener, void *data)
{
- E_Hwc_Window_Target *target_hwc_window = (E_Hwc_Window_Target *)data;
+ E_Hwc_Window_Target *target_hwc_window;
E_Hwc_Window *hwc_window;
E_Comp_Wl_Buffer_Ref *buffer_ref;
E_Comp_Wl_Buffer *buffer;
E_Client *ec;
E_Comp_Wl_Client_Data *cdata;
+ target_hwc_window = wl_container_of(listener, target_hwc_window, canvas_render_post_listener);
+
EHWSTRACE("{%s} gets render_flush_post noti", NULL, target_hwc_window->hwc, e_hwc_window_name_get((E_Hwc_Window *)target_hwc_window));
if (!target_hwc_window->dequeued_tsurface)
target_hwc_window->dequeued_tsurface = NULL;
}
+static void
+_e_hwc_windows_canvas_cb_flush_pre(struct wl_listener *listener, void *data)
+{
+ E_Hwc_Window_Target *target_hwc_window;
+ E_Hwc *hwc;
+
+ target_hwc_window = wl_container_of(listener, target_hwc_window, canvas_render_flush_pre_listener);
+
+ hwc = target_hwc_window->hwc;
+ if (!e_hwc_windows_fence_enabled_get(hwc)) return;
+
+ if (target_hwc_window->end_render_sync)
+ {
+ e_egl_sync_destroy(target_hwc_window->end_render_sync);
+ target_hwc_window->end_render_sync = NULL;
+ }
+
+ target_hwc_window->end_render_sync = e_egl_sync_fence_create();
+ if (!target_hwc_window->end_render_sync)
+ EHWSERR("Failed to create E_Egl_Sync", hwc);
+}
+
static void
_e_hwc_windows_target_window_free(E_Hwc_Window_Target *target_hwc_window)
{
E_Hwc_Window *hwc_window = (E_Hwc_Window *)target_hwc_window;
E_Hwc_Window *present_sync_window, *presentation_cb_window;
- if (target_hwc_window->evas)
+ if (target_hwc_window->canvas)
{
- evas_event_callback_del(target_hwc_window->evas,
- EVAS_CALLBACK_RENDER_FLUSH_POST,
- _e_hwc_windows_target_window_render_flush_post_cb);
-
- evas_event_callback_del(target_hwc_window->evas,
- EVAS_CALLBACK_RENDER_FLUSH_PRE,
- _e_hwc_windows_target_window_render_flush_pre_cb);
-
- evas_event_callback_del(target_hwc_window->evas,
- EVAS_CALLBACK_RENDER_PRE,
- _e_hwc_windows_target_window_render_pre_cb);
+ wl_list_remove(&target_hwc_window->canvas_render_flush_pre_listener.link);
+ wl_list_remove(&target_hwc_window->canvas_render_post_listener.link);
+ wl_list_remove(&target_hwc_window->canvas_render_pre_listener.link);
}
if (target_hwc_window->event_hdlr)
and it is also needed for processing input event of evas
because input event is sent in manual_render */
if (!hwc->wait_commit)
- evas_norender(target_hwc_window->evas);
+ e_canvas_norender(target_hwc_window->canvas);
return EINA_TRUE;
}
{
TRACE_DS_BEGIN(MANUAL RENDER);
target_hwc_window->is_rendering = EINA_TRUE;
- ecore_evas_manual_render(target_hwc_window->ee);
+ e_canvas_render(target_hwc_window->canvas);
if (e_comp_gl_get())
{
egl_error = eglGetError();
}
EINTERN Eina_Bool
-e_hwc_windows_ecore_evas_set(E_Hwc *hwc, Ecore_Evas *ee)
+e_hwc_windows_canvas_set(E_Hwc *hwc, E_Canvas *canvas)
{
E_Hwc_Window_Target *target_hwc_window;
- Evas *evas;
- const char *name;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
target_hwc_window = hwc->root_target_hwc_window;
EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
- name = ecore_evas_engine_name_get(ee);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
-
- evas = ecore_evas_get(ee);
- EINA_SAFETY_ON_NULL_RETURN_VAL(evas, EINA_FALSE);
-
if (!_e_hwc_windows_target_window_queue_set(target_hwc_window))
{
EHWSERR("fail to _e_hwc_windows_target_window_queue_set", NULL);
return EINA_FALSE;
}
- if(!strcmp("gl_drm_tbm", name) ||
- !strcmp("drm_tbm", name) ||
- !strcmp("gl_tbm", name) ||
- !strcmp("software_tbm", name) ||
- !strcmp("gl_tbm_ES", name))
- {
- ecore_evas_manual_render_set(ee, 1);
- ecore_evas_show(ee);
- }
-
- target_hwc_window->ee = ee;
- target_hwc_window->evas = evas;
+ target_hwc_window->canvas = canvas;
target_hwc_window->event_fd = eventfd(0, EFD_NONBLOCK);
target_hwc_window->event_hdlr =
ecore_main_fd_handler_add(target_hwc_window->event_fd, ECORE_FD_READ,
_e_hwc_windows_target_window_render_finished_cb,
(void *)target_hwc_window, NULL, NULL);
- evas_event_callback_add(evas,
- EVAS_CALLBACK_RENDER_FLUSH_POST,
- _e_hwc_windows_target_window_render_flush_post_cb,
- target_hwc_window);
-
- evas_event_callback_add(evas,
- EVAS_CALLBACK_RENDER_FLUSH_PRE,
- _e_hwc_windows_target_window_render_flush_pre_cb,
- target_hwc_window);
+ target_hwc_window->canvas_render_pre_listener.notify = _e_hwc_windows_canvas_cb_render_pre;
+ e_canvas_render_pre_listener_add(canvas, &target_hwc_window->canvas_render_pre_listener);
- evas_event_callback_add(evas,
- EVAS_CALLBACK_RENDER_PRE,
- _e_hwc_windows_target_window_render_pre_cb,
- target_hwc_window);
+ target_hwc_window->canvas_render_post_listener.notify = _e_hwc_windows_canvas_cb_render_post;
+ e_canvas_render_post_listener_add(canvas, &target_hwc_window->canvas_render_post_listener);
- ecore_evas_manual_render(target_hwc_window->ee);
+ target_hwc_window->canvas_render_flush_pre_listener.notify = _e_hwc_windows_canvas_cb_flush_pre;
+ e_canvas_render_flush_pre_listener_add(canvas, &target_hwc_window->canvas_render_flush_pre_listener);
return EINA_TRUE;
}