e_comp: add render_list to e_comp
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 19 Nov 2018 10:06:22 +0000 (19:06 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Mon, 19 Nov 2018 11:51:31 +0000 (20:51 +0900)
clients that are composited at current frame are append to the render list.

Change-Id: Ib9a814b4d87a741420e9c1625326077d2054182a

src/bin/e_client.h
src/bin/e_comp.c
src/bin/e_comp.h
src/bin/e_comp_canvas.c
src/bin/e_comp_object.c

index 5bb3f1d3732e6e49b696c9e731a4dd2322e65557..712dd4b9a104169a3ad94501b092a38eeb73e143 100644 (file)
@@ -966,6 +966,8 @@ struct E_Client
         unsigned int serial : 1;
         Eina_List    *pending_geometry; // E_Client_Pending_Geometry
      } surface_sync;
+
+   Eina_Bool on_render_list : 1; // client is on the render list
 };
 
 #define e_client_focus_policy_click(ec) \
index 0be9f4c21ba7345be24bdf418eafa98a9bf000ce..eda987a1ec84b6292ae2ff870065750c2558fed9 100644 (file)
@@ -572,6 +572,17 @@ e_comp_client_post_update_add(E_Client *ec)
    e_object_ref(E_OBJECT(ec));
 }
 
+E_API void
+e_comp_client_render_list_add(E_Client *ec)
+{
+   if (ec->on_render_list) return;
+   ec->on_render_list = EINA_TRUE;
+   ERR("add render list ec:%p", ec);
+   e_comp->render_list = eina_list_append(e_comp->render_list, ec);
+   REFD(ec, 111);
+   e_object_ref(E_OBJECT(ec));
+}
+
 E_API E_Comp_Config *
 e_comp_config_get(void)
 {
index 4ed350a1df7cf4df3bc5a57619bcefa61d82c34b..fed12f8c4f7ff30bba1f96a59040ed68768b4696 100644 (file)
@@ -167,6 +167,8 @@ struct _E_Comp
    Eina_List      *connected_clients;
    Eina_List      *launchscrns; // list of dummy clients for launchscreen image.
 
+   Eina_List      *render_list;
+
    int norender;
 
    void           (*func_memory_dump) (void);
index 638ac85f51b671550d6962e5918161a227b5696f..f18148b0c387027f18489e4e490399fb1346e7b3 100644 (file)
@@ -28,6 +28,12 @@ _e_comp_canvas_render_post(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *ev
           e_pixmap_image_clear(ec->pixmap, 1);
         e_object_unref(E_OBJECT(ec));
      }
+
+   EINA_LIST_FREE(e_comp->render_list, ec)
+     {
+        ec->on_render_list = EINA_FALSE;
+        e_object_unref(E_OBJECT(ec));
+     }
 }
 
 ///////////////////////////////////
index 31dace890ed3e488728699fa5c66642ad7846e21..54423bc6220cc63d6dae8eb80b84b93a39f3be26 100644 (file)
@@ -1234,6 +1234,9 @@ _e_comp_object_pixels_noti(void *data, Evas_Object *obj EINA_UNUSED)
 
    if (e_object_is_del(E_OBJECT(ec))) return;
    if (cw->external_content) return;
+   if (!e_comp->hwc) return;
+
+   e_comp_client_render_list_add(cw->ec);
 
    if (!ec->hwc_window) return;