To prevent rendering of the specific client, it can make possible
cleanup of e_pixmap by each module when client buffer is changed.
Now, if ec->pixmap doesn't have a resource, e_comp_object_damage
function will not set cw->hwc_need_update value. It enables the
display server to block plane update during HWC state.
Change-Id: I283a43be73b605b334ad7be30c8a88e6efce109a
if (e_comp_is_on_overlay(cw->ec))
{
- cw->hwc_need_update = EINA_TRUE;
+ if (cw->ec)
+ {
+ /* It will not set hwc_need_update value if E modules already cleanup pixmap
+ * resource on the E_COMP_WL_HOOK_BUFFER_CHANGE hook function. It means that
+ * E module attempts to block screen update due to the particular policy.
+ */
+ if (e_pixmap_resource_get(cw->ec->pixmap))
+ cw->hwc_need_update = EINA_TRUE;
+ }
}
/* ignore overdraw */
{
[E_COMP_WL_HOOK_SHELL_SURFACE_READY] = NULL,
[E_COMP_WL_HOOK_SUBSURFACE_CREATE] = NULL,
+ [E_COMP_WL_HOOK_BUFFER_CHANGE] = NULL,
};
/* local functions */
_e_comp_wl_surface_state_size_update(ec, &ec->comp_data->pending);
e_comp_wl_map_size_cal_from_buffer(ec);
+ /* wm-policy module uses it */
+ _e_comp_wl_hook_call(E_COMP_WL_HOOK_BUFFER_CHANGE, ec);
+
ev->ec = ec;
e_object_ref(E_OBJECT(ec));
ecore_event_add(E_EVENT_CLIENT_BUFFER_CHANGE, ev,
{
E_COMP_WL_HOOK_SHELL_SURFACE_READY,
E_COMP_WL_HOOK_SUBSURFACE_CREATE,
+ E_COMP_WL_HOOK_BUFFER_CHANGE,
E_COMP_WL_HOOK_LAST,
} E_Comp_Wl_Hook_Point;