e_hwc_window: set client type when e_comp_client_override_add 90/208290/2 accepted/tizen/unified/20190625.051508 submit/tizen/20190624.092820
authorChangyeon Lee <cyeon.lee@samsung.com>
Fri, 21 Jun 2019 06:40:38 +0000 (15:40 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 24 Jun 2019 09:53:48 +0000 (09:53 +0000)
Change-Id: I23da16a414bb00aa3731ae20df67eff0c95b4e39

src/bin/e_comp.c
src/bin/e_hwc_window.c
src/bin/e_hwc_window.h
src/bin/e_hwc_window_queue.c

index 4caff60..cad8475 100644 (file)
@@ -1383,8 +1383,10 @@ e_comp_hwc_end(const char *location)
 EINTERN void
 e_comp_hwc_client_end(E_Client *ec, const char *location)
 {
-   E_Zone *zone;
-   E_Output *output;
+   E_Zone *zone = NULL;
+   E_Output *output = NULL;
+   E_Hwc *hwc = NULL;
+   E_Hwc_Window *hwc_window = NULL;
 
    EINA_SAFETY_ON_NULL_RETURN(ec);
 
@@ -1394,5 +1396,18 @@ e_comp_hwc_client_end(E_Client *ec, const char *location)
    output = e_output_find(zone->output_id);
    EINA_SAFETY_ON_NULL_RETURN(output);
 
-   e_hwc_planes_client_end(output->hwc, ec, location);
+   hwc = output->hwc;
+   EINA_SAFETY_ON_NULL_RETURN(hwc);
+
+   if (hwc->hwc_policy == E_HWC_POLICY_PLANES)
+     {
+        e_hwc_planes_client_end(output->hwc, ec, location);
+     }
+   else if (hwc->hwc_policy == E_HWC_POLICY_WINDOWS)
+     {
+        hwc_window = ec->hwc_window;
+        EINA_SAFETY_ON_NULL_RETURN(hwc_window);
+
+        e_hwc_window_client_type_override(hwc_window);
+     }
 }
index a77c3f1..7af38b0 100644 (file)
@@ -1731,6 +1731,20 @@ e_hwc_window_buffer_set(E_Hwc_Window *hwc_window, tbm_surface_h tsurface, E_Hwc_
    _e_hwc_window_buffer_set(&hwc_window->buffer, tsurface,queue);
 }
 
+EINTERN void
+e_hwc_window_client_type_override(E_Hwc_Window *hwc_window)
+{
+   EINA_SAFETY_ON_NULL_RETURN(hwc_window);
+
+   if (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT) return;
+
+   e_hwc_window_device_state_available_update(hwc_window);
+   e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_CLIENT, EINA_TRUE);
+   e_hwc_window_rendered_window_update(hwc_window);
+
+   EHWTRACE("set client override", hwc_window->ec, hwc_window);
+}
+
 EINTERN const char*
 e_hwc_window_state_string_get(E_Hwc_Window_State hwc_window_state)
 {
index 489afaf..6652da2 100644 (file)
@@ -202,6 +202,7 @@ EINTERN const char             *e_hwc_window_name_get(E_Hwc_Window *hwc_window);
 EINTERN void                    e_hwc_window_name_set(E_Hwc_Window *hwc_window);
 EINTERN Eina_Bool               e_hwc_window_set_property(E_Hwc_Window *hwc_window, unsigned int id, const char *name, tdm_value value, Eina_Bool force);
 EINTERN Eina_Bool               e_hwc_window_get_property(E_Hwc_Window *hwc_window, unsigned int id, tdm_value *value);
+EINTERN void                    e_hwc_window_client_type_override(E_Hwc_Window *hwc_window);
 
 EINTERN E_Hwc_Window_Hook      *e_hwc_window_hook_add(E_Hwc_Window_Hook_Point hookpoint, E_Hwc_Window_Hook_Cb func, const void *data);
 EINTERN void                    e_hwc_window_hook_del(E_Hwc_Window_Hook *ch);
index 5fa16c4..2e9e2d0 100644 (file)
@@ -763,7 +763,8 @@ _e_hwc_window_queue_cb_buffer_change(void *data, E_Client *ec)
 
    hwc_window = ec->hwc_window;
    if (!hwc_window) return;
-   if (hwc_window->queue) return;
+   if ((hwc_window->queue) && (e_hwc_window_device_state_available_get(hwc_window)))
+     return;
 
    comp_buffer = _comp_wl_buffer_get(ec);
    if (!comp_buffer) return;