devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=da59ad61f25a5a295efc8e83ccfecc5e2b92eb52

commit da59ad61f25a5a295efc8e83ccfecc5e2b92eb52
Author: Chris Michael <cp.mich...@samsung.com>
Date:   Wed Apr 9 09:34:18 2014 +0100

    ecore-wl: Optimize opaque region setting for surface and reduce
    unnecessary calls to surface commit.
    
    @bugfix: We don't need to call surface_commit if we are just setting
    the opaque (or input) region(s). This reduces some overhead on the
    compositor side (and thus reduces useless redraws). Also, optimize
    opaque_region_set to not Reset to the same region; we do this by
    storing the opaque region into the window structure, and on calls to
    opaque_region_set we can compare those values and not re-apply the
    same opaque region.
    
    Signed-off-by: Chris Michael <cp.mich...@samsung.com>
---
 src/lib/ecore_wayland/ecore_wl_window.c | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/lib/ecore_wayland/ecore_wl_window.c 
b/src/lib/ecore_wayland/ecore_wl_window.c
index 1275635..92b656e 100644
--- a/src/lib/ecore_wayland/ecore_wl_window.c
+++ b/src/lib/ecore_wayland/ecore_wl_window.c
@@ -416,8 +416,11 @@ ecore_wl_window_transparent_set(Ecore_Wl_Window *win, 
Eina_Bool transparent)
 
    if (!win) return;
    win->transparent = transparent;
-   ecore_wl_window_opaque_region_set(win, win->opaque.x, win->opaque.y, 
-                                     win->opaque.w, win->opaque.h);
+   if (!win->transparent)
+     ecore_wl_window_opaque_region_set(win, win->opaque.x, win->opaque.y, 
+                                       win->opaque.w, win->opaque.h);
+   else
+     ecore_wl_window_opaque_region_set(win, win->opaque.x, win->opaque.y, 0, 
0);
 }
 
 EAPI Eina_Bool
@@ -437,8 +440,11 @@ ecore_wl_window_alpha_set(Ecore_Wl_Window *win, Eina_Bool 
alpha)
 
    if (!win) return;
    win->alpha = alpha;
-   ecore_wl_window_opaque_region_set(win, win->opaque.x, win->opaque.y, 
-                                     win->opaque.w, win->opaque.h);
+   if (!win->alpha)
+     ecore_wl_window_opaque_region_set(win, win->opaque.x, win->opaque.y, 
+                                       win->opaque.w, win->opaque.h);
+   else
+     ecore_wl_window_opaque_region_set(win, win->opaque.x, win->opaque.y, 0, 
0);
 }
 
 EAPI Eina_Bool
@@ -613,7 +619,7 @@ ecore_wl_window_input_region_set(Ecore_Wl_Window *win, int 
x, int y, int w, int
           wl_surface_set_input_region(win->surface, NULL);
      }
 
-   ecore_wl_window_commit(win);
+   /* ecore_wl_window_commit(win); */
 }
 
 /* @since 1.8 */
@@ -626,10 +632,16 @@ ecore_wl_window_opaque_region_set(Ecore_Wl_Window *win, 
int x, int y, int w, int
 
    win->opaque.x = x;
    win->opaque.y = y;
-   win->opaque.w = w;
-   win->opaque.h = h;
+   if ((w > 0) && (h > 0))
+     {
+        if ((win->opaque.w == w) && (win->opaque.h == h))
+          return;
+
+        win->opaque.w = w;
+        win->opaque.h = h;
+     }
 
-   if ((!win->transparent) && (!win->alpha))
+   if (((w > 0) && (h > 0)) && ((!win->transparent) && (!win->alpha)))
      {
         struct wl_region *region = NULL;
 
@@ -658,7 +670,7 @@ ecore_wl_window_opaque_region_set(Ecore_Wl_Window *win, int 
x, int y, int w, int
    else
      wl_surface_set_opaque_region(win->surface, NULL);
 
-   ecore_wl_window_commit(win);
+   /* ecore_wl_window_commit(win); */
 }
 
 /* @since 1.8 */

-- 


Reply via email to