EINA_SAFETY_ON_NULL_GOTO(target_hwc_window, fail);
((E_Hwc_Window *)target_hwc_window)->is_target = EINA_TRUE;
- /* the target hwc_window is always displayed on hw layer */
- ((E_Hwc_Window *)target_hwc_window)->type = TDM_COMPOSITION_NONE;
- ((E_Hwc_Window *)target_hwc_window)->state = E_HWC_WINDOW_STATE_NONE;
+ ((E_Hwc_Window *)target_hwc_window)->state = E_HWC_WINDOW_STATE_DEVICE;
((E_Hwc_Window *)target_hwc_window)->output_hwc = output_hwc;
target_hwc_window->ee = e_comp->ee;
}
#endif
-#if 0
-/* whether an hwc_window exists on a target_buffer which is currently set at the target_window */
-static Eina_Bool
-_e_hwc_window_is_on_target_window(E_Hwc_Window *hwc_window)
-{
- Eina_List *ee_rendered_hw_list = NULL;
- E_Hwc_Window_Target *target_hwc_window;
- E_Hwc_Window *hw;
- const Eina_List *l;
- tbm_surface_h target_tsurface;
-
- target_hwc_window = _e_hwc_window_target_window_get(hwc_window);
- EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
-
- target_tsurface = target_hwc_window->hwc_window.tsurface;
-
- tbm_surface_internal_get_user_data(target_tsurface, ee_rendered_hw_list_key, (void**)&ee_rendered_hw_list);
-
- EINA_LIST_FOREACH(ee_rendered_hw_list, l, hw)
- if (hw == hwc_window) return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_e_hwc_window_is_device_to_client_transition(E_Hwc_Window *hwc_window)
-{
- E_Hwc_Window_Target *target_hwc_window;
-
- if (hwc_window->is_deleted) return EINA_FALSE;
-
- target_hwc_window = _e_hwc_window_target_window_get(hwc_window);
- EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
-
- if (((E_Hwc_Window *)target_hwc_window)->state == E_HWC_WINDOW_STATE_NONE) return EINA_FALSE;
- if (!hwc_window->is_device_to_client_transition) return EINA_FALSE;
- if (e_hwc_window_is_target(hwc_window)) return EINA_FALSE;
- if (_e_hwc_window_is_on_target_window(hwc_window)) return EINA_FALSE;
-
- return EINA_TRUE;
-}
-#endif
-
EINTERN Eina_Bool
e_hwc_window_init(E_Output_Hwc *output_hwc)
{
return NULL;
}
- error = tdm_hwc_window_set_composition_type(hwc_window->thwc_window, TDM_COMPOSITION_NONE);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(error != TDM_ERROR_NONE, NULL);
-
- hwc_window->state = E_HWC_WINDOW_STATE_NONE;
- hwc_window->type = TDM_COMPOSITION_NONE;
-
/* cursor window */
if (e_policy_client_is_cursor(ec))
hwc_window->is_cursor = EINA_TRUE;
/* evaluate the hwc_windows */
static Eina_Bool
-_e_output_hwc_windows_evaluate(E_Output_Hwc *output_hwc)
+_e_output_hwc_windows_evaluate(E_Output_Hwc *output_hwc, Eina_List *visible_windows_list)
{
E_Output_Hwc_Mode hwc_mode = E_OUTPUT_HWC_MODE_NONE;
E_Hwc_Window *target_window = (E_Hwc_Window *)output_hwc->target_hwc_window;
- Eina_List *visible_windows_list = NULL;
ELOGF("HWC-WINS", "====================== Output HWC Apply (evaluate) ======================", NULL, NULL);
- /* evaulate the current states */
- visible_windows_list = _e_output_hwc_windows_states_evaluate(output_hwc);
-
/* evaulate the compositions with the states*/
if (_e_output_hwc_windows_composition_evaulate(output_hwc, visible_windows_list))
ELOGF("HWC-WINS", " Succeed the compsition_evaulation.", NULL, NULL);
else
ELOGF("HWC-WINS", " Need the comopsition re-evaulation.", NULL, NULL);
-
- if (visible_windows_list)
- eina_list_free(visible_windows_list);
-
/* update the activate/decativate state */
_e_output_hwc_windows_activation_states_update(output_hwc);
Eina_List *l;
E_Output *output = NULL;
tdm_error error = TDM_ERROR_NONE;
+ Eina_List *visible_windows_list = NULL;
EINA_SAFETY_ON_NULL_RETURN_VAL(output_hwc, EINA_FALSE);
return EINA_TRUE;
}
+ /* evaulate the current states */
+ visible_windows_list = _e_output_hwc_windows_states_evaluate(output_hwc);
+
if (_e_output_hwc_windows_update_changes(output_hwc) ||
output_hwc->hwc_mode == E_OUTPUT_HWC_MODE_NONE)
{
- if (!_e_output_hwc_windows_evaluate(output_hwc))
+ if (!_e_output_hwc_windows_evaluate(output_hwc, visible_windows_list))
{
ELOGF("HWC-WINS", "Evaluation is not completed. No Commit at this time.", NULL, NULL);
/* update the previous states. */
_e_output_hwc_windows_prev_states_update(output_hwc);
- return EINA_TRUE;
+ goto fail;
}
EINA_LIST_FOREACH(output_hwc->hwc_windows, l, hwc_window)
if (!_e_output_hwc_windows_pp_commit(output_hwc))
{
ERR("_e_output_hwc_windows_pp_commit failed.");
- return EINA_FALSE;
+ goto fail;
}
}
else
{
ERR("tdm_output_commit failed.");
_e_output_hwc_windows_commit_handler(output->toutput, 0, 0, 0, output_hwc);
- return EINA_FALSE;
+ goto fail;
}
output_hwc->wait_commit = EINA_TRUE;
_e_output_hwc_windows_prev_states_update(output_hwc);
}
+ if (visible_windows_list)
+ eina_list_free(visible_windows_list);
+
return EINA_TRUE;
+
+fail:
+
+ if (visible_windows_list)
+ eina_list_free(visible_windows_list);
+
+ return EINA_FALSE;
}
EINTERN Eina_Bool