e_comp_wl: flush the buffer by every commit 81/157081/4
authorSangjin Lee <lsj119@samsung.com>
Thu, 19 Oct 2017 08:20:39 +0000 (17:20 +0900)
committerSangjin Lee <lsj119@samsung.com>
Mon, 23 Oct 2017 09:57:17 +0000 (18:57 +0900)
If new buffer is commited after the surface was iconic,
server will send the flush event to client for reduce memory.
Also the point of flush moved to _e_vis_client_cb_evas_hide from e_client_iconify.
becase if a surface is on animation, iconify state should delay to stop animation.

Change-Id: I542046c7572ab08f40674cb30515c0d22dd5603d

src/bin/e_client.c
src/bin/e_comp_wl.c
src/bin/e_policy_visibility.c
src/bin/e_policy_visibility.h

index 2205614a5bc4d3bc54997140b174f0f5f5bb1dd4..c19473eeeeea652afa76c93e59344a566d9ebcd7 100644 (file)
@@ -5420,9 +5420,6 @@ e_client_iconify(E_Client *ec)
 
    _e_client_hook_call(E_CLIENT_HOOK_ICONIFY, ec);
 
-   if (ec->exp_iconify.buffer_flush)
-     e_pixmap_buffer_clear(ec->pixmap, EINA_FALSE);
-
    TRACE_DS_END();
 }
 
index a0769f0f11d51f4137c32f65722725f55e1038b6..413c32752f06622903cf11f9d510f09e24439d2e 100644 (file)
@@ -2736,6 +2736,13 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
      }
 
    state->buffer_viewport.changed = 0;
+
+   if (buffer &&
+       ec->exp_iconify.buffer_flush &&
+       e_policy_visibility_client_is_iconic(ec))
+     {
+        e_pixmap_buffer_clear(ec->pixmap, EINA_FALSE);
+     }
 }
 
 static void
index 569c05265562364eac17d1fef66947636501de1c..27adda4301941f48aaea3fc19cddd3efeef2c57f 100644 (file)
@@ -866,6 +866,9 @@ _e_vis_client_cb_evas_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Obj
    vc->state = ec->iconic ? E_VIS_ICONIFY_STATE_ICONIC : E_VIS_ICONIFY_STATE_UNICONIC;
    VS_DBG(ec, "\tUPDATE ICONIC STATE: %s", STATE_STR(vc));
    vc->prepare_emitted = 0;
+
+   if (ec->exp_iconify.buffer_flush)
+     e_pixmap_buffer_clear(ec->pixmap, EINA_FALSE);
 }
 
 static void
@@ -1836,6 +1839,14 @@ e_policy_visibility_client_defer_move(E_Client *ec, int x, int y)
    _e_vis_client_defer_move(vc, E_VIS_JOB_TYPE_DEFER_MOVE, x, y);
 }
 
+E_API Eina_Bool
+e_policy_visibility_client_is_iconic(E_Client *ec)
+{
+   E_VIS_CLIENT_GET_OR_RETURN_VAL(vc, ec, EINA_FALSE);
+
+   return _e_vis_client_is_iconic(vc);
+}
+
 E_API E_Pol_Vis_Hook *
 e_policy_visibility_hook_add(E_Pol_Vis_Hook_Type type, E_Pol_Vis_Hook_Cb cb, const void *data)
 {
index d140a89adb4d312c7b05397b4510afe644e0da37..b7ac385496a4c71858205025d94d104d01cd18ac 100644 (file)
@@ -31,6 +31,7 @@ E_API E_Vis_Grab                 *e_policy_visibility_client_grab_get(E_Client *
 E_API void                        e_policy_visibility_client_grab_release(E_Vis_Grab *grab);
 E_API E_Pol_Vis_Hook             *e_policy_visibility_hook_add(E_Pol_Vis_Hook_Type type, E_Pol_Vis_Hook_Cb cb, const void *data);
 E_API void                        e_policy_visibility_hook_del(E_Pol_Vis_Hook *h);
+E_API Eina_Bool                   e_policy_visibility_client_is_iconic(E_Client *ec);
 
 EINTERN void                      e_policy_visibility_client_defer_move(E_Client *ec, int x, int y);