e_comp: add e_comp_is_on_overlay 13/69413/4
authorJuyeon Lee <juyeonne.lee@samsung.com>
Fri, 13 May 2016 05:59:16 +0000 (14:59 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Fri, 13 May 2016 08:43:49 +0000 (01:43 -0700)
client to check if it is on hw composing

Change-Id: I35bc7ee6459936d81648bca975485181fa062c88

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

index 43b5e496312b5c08d95e7113704e54a48232163f..6906dd29133891c016e9c1aa1564d46b62c68aa6 100644 (file)
@@ -637,7 +637,7 @@ _e_comp_cb_update(void)
    else
      ecore_animator_freeze(e_comp->render_animator);
    DBG("UPDATE ALL");
-   if (e_comp->nocomp) goto nocomp;
+   if (e_comp->nocomp || e_comp->selcomp) goto hwcompose;
    if (conf->grab && (!e_comp->grabbed))
      {
         if (e_comp->grab_cb) e_comp->grab_cb();
@@ -670,7 +670,8 @@ _e_comp_cb_update(void)
      }
    if (e_comp->updates && (!e_comp->update_job))
      ecore_animator_thaw(e_comp->render_animator);
-nocomp:
+
+hwcompose:
    // TO DO :
    // query if selective HWC plane can be used
    if (!e_comp_gl_get() && !e_comp->hwc)
@@ -707,7 +708,7 @@ nocomp:
           {
              if (e_comp->nocomp && e_comp->nocomp_ec)
                {
-                  if (ec != e_comp->nocomp_ec)
+                  if (!e_comp_is_on_overlay(ec))
                     e_comp_nocomp_end("_e_comp_cb_update : nocomp_ec != ec");
                }
              else if ((!e_comp->nocomp) && (!e_comp->nocomp_override))
@@ -1791,3 +1792,28 @@ e_comp_hook_del(E_Comp_Hook *ch)
    else
      _e_comp_hooks_delete++;
 }
+
+EINTERN Eina_Bool
+e_comp_is_on_overlay(E_Client *ec)
+{
+   if (!ec) return EINA_FALSE;
+   if (e_comp->nocomp)
+     {
+        return e_comp->nocomp_ec == ec;
+     }
+   else if (e_comp->selcomp)
+     {
+        Eina_List *l, *ll;
+        E_Output_Screen * screen;
+        E_Plane *ep;
+
+        if (!ec->zone) return EINA_FALSE;
+        screen = ec->zone->screen;
+        EINA_LIST_FOREACH_SAFE(screen->planes, l, ll, ep)
+          {
+             E_Client *overlay_ec = ep->ec;
+             if (overlay_ec == ec) return EINA_TRUE;
+          }
+     }
+   return EINA_FALSE;
+}
index 85d5601932dd8f8541b0f690d0c37984bdd5836f..4782d829b89349bdbac4b513a575c8f8268ecc3b 100644 (file)
@@ -286,5 +286,7 @@ E_API void e_comp_post_update_purge(E_Client *ec);
 
 E_API E_Comp_Hook *e_comp_hook_add(E_Comp_Hook_Point hookpoint, E_Comp_Hook_Cb func, const void *data);
 E_API void e_comp_hook_del(E_Comp_Hook *ph);
+EINTERN Eina_Bool e_comp_is_on_overlay(E_Client *ec);
+
 #endif
 #endif
index f337403e810a57a6ea395d77e20a3514a6b646e9..08db68bf1969e4a3d1d6c1f03535f2e3275f6820 100644 (file)
@@ -260,7 +260,7 @@ _e_comp_object_cb_mirror_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
      evas_object_smart_callback_call(cw->smart_obj, "visibility_force", cw->ec);
    cw->force_visible++;
 
-   if (e_comp->hwc && e_comp->nocomp_ec != cw->ec)
+   if (e_comp->hwc && !e_comp_is_on_overlay(cw->ec))
      e_comp_nocomp_end(__FUNCTION__);
 }
 
@@ -1476,7 +1476,7 @@ _e_comp_intercept_lower(void *data, Evas_Object *obj)
    evas_object_lower(obj);
    evas_object_data_del(obj, "client_restack");
    if (!cw->visible) goto end;
-   if (e_comp->hwc &&e_comp->nocomp_ec == cw->ec) e_comp_nocomp_end(__FUNCTION__);
+   if (e_comp->hwc && e_comp_is_on_overlay(cw->ec)) e_comp_nocomp_end(__FUNCTION__);
    e_comp_render_queue();
    e_comp_shape_queue();
    _e_comp_object_transform_bg_stack_update(obj);
@@ -1527,7 +1527,7 @@ _e_comp_intercept_raise(void *data, Evas_Object *obj)
           e_client_raise_latest_set(cw->ec); //modify raise list if necessary
      }
    if (!cw->visible) goto end;
-   if (e_comp->hwc &&e_comp->nocomp_ec != cw->ec)
+   if (e_comp->hwc && !e_comp_is_on_overlay(cw->ec))
       e_comp_nocomp_end(__FUNCTION__);
    e_comp_render_queue();
    e_comp_shape_queue();
@@ -1586,7 +1586,7 @@ _e_comp_intercept_hide(void *data, Evas_Object *obj)
                e_comp_object_effect_set(obj, NULL);
           }
      }
-   if (e_comp->hwc &&e_comp->nocomp_ec == cw->ec) e_comp_nocomp_end(__FUNCTION__);
+   if (e_comp->hwc && e_comp_is_on_overlay(cw->ec)) e_comp_nocomp_end(__FUNCTION__);
    if (cw->animating) return;
    /* if we have no animations running, go ahead and hide */
    cw->defer_hide = 0;