#define E_HWC_WINDOW_COMMIT_HANDLER_LOG_TIMEOUT 5.0
#define DBG_EVALUATE 1
-#define DEFAULT_MAX_TRANSITION_FAILURES 3;
#ifndef CLEAR
#define CLEAR(x) memset(&(x), 0, sizeof (x))
E_Comp_Wl_Tizen_Hwc_Feedback_List feedback_list;
- Eina_List *rendered_windows;
Eina_List *rendered_buffers;
};
}
static void
-_e_hwc_windows_comp_info_rendered_windows_set(E_Hwc_Windows_Comp_Info *comp_info,
- Eina_List *rendered_windows)
-{
- E_Hwc_Window *hwc_window;
-
- EINA_SAFETY_ON_NULL_RETURN(comp_info);
-
- if (comp_info->rendered_windows == rendered_windows)
- return;
-
- if (comp_info->rendered_windows)
- {
- if (eina_list_count(comp_info->rendered_windows))
- {
- EINA_LIST_FREE(comp_info->rendered_windows, hwc_window)
- e_hwc_window_unref(hwc_window);
- }
- }
-
- comp_info->rendered_windows = rendered_windows;
-}
-
-static void
_e_hwc_windows_comp_info_free(void *data EINA_UNUSED, void *event)
{
E_Hwc_Windows_Comp_Info *comp_info;
EINA_LIST_FREE(comp_info->pending_update_list, update)
e_hwc_window_pending_update_data_dequeue_cancel(update->hwc_window, update);
- _e_hwc_windows_comp_info_rendered_windows_set(comp_info, NULL);
_e_hwc_windows_comp_info_rendered_buffers_set(comp_info, NULL);
e_presentation_time_container_finish(&comp_info->presentation_container);
tv_usec);
e_hwc_window_presentation_callback_call(hwc_window);
- /* it is possible that other hwc_window is freed in
- * _e_hwc_windows_rendered_windows_free.
- * we must don't call commit_data_release of target_window in list.
- */
e_hwc_window_commit_data_release(hwc_window, wins_commit_data->target_commit_data);
}
e_hwc_window_presentation_time_feedback_discard(hwc_window_target);
e_hwc_window_presentation_callback_call(hwc_window_target);
- /* it is possible that other hwc_window is freed in
- * _e_hwc_windows_rendered_windows_free.
- * we must don't call commit_data_release of target_window in list.
- */
EHWSTRACE("!!!!!!!! HWC OffScreen Commit !!!!!!!!", NULL, hwc);
e_hwc_window_commit_data_release(hwc_window_target, commit_data);
}
}
}
-static Eina_List *
-_e_hwc_windows_target_window_rendered_windows_get(tbm_surface_h target_tsurface)
-{
- E_Hwc_Windows_Comp_Info *comp_info;
-
- if (!target_tsurface) return NULL;
-
- comp_info = _e_hwc_windows_comp_info_get(target_tsurface);
- if (!comp_info) return NULL;
-
- return comp_info->rendered_windows;
-}
-
EINTERN void
e_hwc_windows_target_window_force_render(E_Hwc_Window_Target *target_hwc_window)
{
_e_hwc_windows_root_target_buffer_fetch(E_Hwc *hwc)
{
E_Hwc_Window_Target *target_hwc_window;
- E_Hwc_Window *hwc_window, *hw;
+ E_Hwc_Window *hwc_window;
tbm_surface_h tsurface;
- Eina_List *rendered_windows;
E_Hwc_Window_Queue_Buffer *queue_buffer;
E_Hwc_Windows_Comp_Info *comp_info;
E_Hwc_Window_Queue *queue;
- uint32_t n_thw = 0;
- const Eina_List *l;
- int i;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
e_hwc_window_queue_buffer_reference(&hwc_window->current.queue_buffer_ref, queue_buffer);
e_hwc_window_buffer_set(&hwc_window->current.buffer, tsurface, queue, 0);
e_hwc_window_info_update(hwc_window);
-
- if (ehws_trace)
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(hwc_window->current.buffer.tsurface);
- n_thw = eina_list_count(rendered_windows);
- if (n_thw)
- {
- EHWSTRACE("FET {%s} ts:%p state:%s has hwc_windows to render below",
- NULL, hwc, e_hwc_window_name_get(hwc_window), hwc_window->current.buffer.tsurface,
- e_hwc_window_state_string_get(hwc_window->state));
-
- i = 0;
- EINA_LIST_FOREACH(rendered_windows, l, hw)
- {
- EHWSTRACE(" (%d) ehw:%p ts:%p - {%s} state:%s zpos:%d deleted:%s",
- hwc_window->ec, hwc, i++, hw, hw->current.buffer.tsurface, e_hwc_window_name_get(hw),
- e_hwc_window_state_string_get(hw->state), hwc_window->zpos,
- (hwc_window->is_deleted ? "yes" : "no"));
- }
- }
- else
- EHWSTRACE("FET {%s} ts:%p state:%s has no hwc_windows to render",
- NULL, hwc, e_hwc_window_name_get(hwc_window), hwc_window->current.buffer.tsurface,
- e_hwc_window_state_string_get(hwc_window->state));
- }
}
else
{
return EINA_TRUE;
}
-static Eina_Bool
-_e_hwc_windows_target_window_rendered_windows_find(Eina_List *rendered_windows, E_Hwc_Window *hwc_window)
-{
- E_Hwc_Window *hw;
- int n_thw;
- const Eina_List *l;
-
- if (!rendered_windows) return EINA_FALSE;
- if (!hwc_window) return EINA_FALSE;
-
- n_thw = eina_list_count(rendered_windows);
- if (!n_thw) return EINA_FALSE;
-
- EINA_LIST_FOREACH(rendered_windows, l, hw)
- {
- if (hw == hwc_window)
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_e_hwc_windows_target_window_rendered_window_has_no(E_Hwc *hwc, E_Hwc_Window *hwc_window, Eina_Bool all_target)
-{
- Eina_List *rendered_windows;
- E_Hwc_Window_Target *target_hwc_window, *root_target_hwc_window;
- E_Hwc_Window *target_window;
- tbm_surface_h target_tsurface;
- const Eina_List *l;
-
- target_hwc_window = hwc->target_hwc_window;
- EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
-
- root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
- EINA_SAFETY_ON_NULL_RETURN_VAL(root_target_hwc_window, EINA_FALSE);
-
- target_window = (E_Hwc_Window *)target_hwc_window;
- if (e_hwc_window_state_get(target_window) != E_HWC_WINDOW_STATE_DEVICE) return EINA_FALSE;
-
- target_tsurface = target_hwc_window->hwc_window.current.buffer.tsurface;
- if (!target_tsurface) return EINA_FALSE;
-
- if (all_target)
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(target_tsurface);
- if (!_e_hwc_windows_target_window_rendered_windows_find(rendered_windows, hwc_window))
- return EINA_TRUE;
-
- EINA_LIST_FOREACH(root_target_hwc_window->rendering_tsurfaces, l, target_tsurface)
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(target_tsurface);
- if (!_e_hwc_windows_target_window_rendered_windows_find(rendered_windows, hwc_window))
- return EINA_TRUE;
- }
- }
- else
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(target_tsurface);
- if (!_e_hwc_windows_target_window_rendered_windows_find(rendered_windows, hwc_window))
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_e_hwc_windows_target_window_rendered_window_has(E_Hwc *hwc, E_Hwc_Window *hwc_window, Eina_Bool all_target)
-{
- Eina_List *rendered_windows, *new_list;
- E_Hwc_Window_Target *target_hwc_window, *root_target_hwc_window;;
- E_Hwc_Window *target_window;
- E_Hwc_Window *hw;
- tbm_surface_h target_tsurface;
- const Eina_List *l, *ll;
- int n_thw;
-
- target_hwc_window = hwc->target_hwc_window;
- EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
-
- root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
- EINA_SAFETY_ON_NULL_RETURN_VAL(root_target_hwc_window, EINA_FALSE);
-
- target_window = (E_Hwc_Window *)target_hwc_window;
- if (e_hwc_window_state_get(target_window) != E_HWC_WINDOW_STATE_DEVICE) return EINA_FALSE;
-
- target_tsurface = target_hwc_window->hwc_window.current.buffer.tsurface;
- if (!target_tsurface) return EINA_FALSE;
-
- if (all_target)
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(target_tsurface);
-
- new_list = eina_list_clone(rendered_windows);
-
- EINA_LIST_FOREACH(root_target_hwc_window->rendering_tsurfaces, l, target_tsurface)
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(target_tsurface);
-
- EINA_LIST_FOREACH(rendered_windows, ll, hw)
- {
- if (!eina_list_data_find(new_list, hw))
- new_list = eina_list_append(new_list, hw);
- }
- }
-
- n_thw = eina_list_count(new_list);
- if (n_thw)
- {
- EINA_LIST_FOREACH(new_list, l, hw)
- {
- if (hw == hwc_window)
- {
- eina_list_free(new_list);
- return EINA_TRUE;
- }
- }
- }
-
- eina_list_free(new_list);
- }
- else
- {
- rendered_windows = _e_hwc_windows_target_window_rendered_windows_get(target_tsurface);
-
- n_thw = eina_list_count(rendered_windows);
- if (n_thw)
- {
- EINA_LIST_FOREACH(rendered_windows, l, hw)
- if (hw == hwc_window) return EINA_TRUE;
- }
- }
-
- return EINA_FALSE;
-}
-
static E_Client *
_e_hwc_windows_client_get_from_object(Evas_Object *o, Eina_Bool *effect_client)
{
{
comp_info->skip = EINA_FALSE;
_e_hwc_windows_comp_info_rendered_buffers_set(comp_info, NULL);
- _e_hwc_windows_comp_info_rendered_windows_set(comp_info, NULL);
}
}
}
_e_hwc_windows_target_window_tbm_surface_queue_set(E_Hwc_Window_Target *target_hwc_window, tbm_surface_queue_h tqueue)
{
E_Hwc_Window_Queue *queue;
- int queue_size = 0;
EINA_SAFETY_ON_NULL_RETURN_VAL(tqueue, EINA_FALSE);
((E_Hwc_Window *)target_hwc_window)->queue_destroy_listener.notify = _e_hwc_windows_target_cb_queue_destroy;
((E_Hwc_Window *)target_hwc_window)->queue = queue;
- queue_size = e_hwc_window_queue_size_get(queue);
- if (queue_size)
- {
- target_hwc_window->max_transition_failures =
- e_hwc_window_queue_size_get(((E_Hwc_Window *)target_hwc_window)->queue);
- }
- else
- {
- target_hwc_window->max_transition_failures = DEFAULT_MAX_TRANSITION_FAILURES;
- }
-
/* as evas_renderer has finished its work (to provide a composited buffer) it enqueues
* the result buffer into this queue and acquirable cb gets called; this cb does nothing
* except the writing into the event_fd object, this writing causes the new ecore_main loop
((E_Hwc_Window *)target_hwc_window)->queue_destroy_listener.notify = _e_hwc_windows_target_cb_queue_destroy;
((E_Hwc_Window *)target_hwc_window)->queue = queue;
- target_hwc_window->max_transition_failures = DEFAULT_MAX_TRANSITION_FAILURES;
-
return EINA_TRUE;
}
E_Comp_Wl_Buffer *buffer;
E_Hwc_Windows_Comp_Info *comp_info;
Eina_List *rendered_buffers = NULL;
- Eina_List *rendered_windows;
Eina_List *visible_windows;
- Eina_List *l;
Eina_Bool fence_enabled;
E_Hwc_Window_Queue_Type queue_type;
E_Client *ec;
fence_enabled = e_hwc_windows_fence_enabled_get(target_hwc_window->hwc);
- EINA_LIST_FOREACH(target_hwc_window->rendered_windows, l, hwc_window)
+ EINA_LIST_FREE(target_hwc_window->rendered_windows, hwc_window)
{
- if (!hwc_window->on_rendered_target) continue;
+ if (!hwc_window->on_rendered_target)
+ {
+ e_hwc_window_unref(hwc_window);
+ continue;
+ }
hwc_window->on_rendered_target = EINA_FALSE;
ec = hwc_window->ec;
- if (!ec) continue;
+ if (!ec)
+ {
+ e_hwc_window_unref(hwc_window);
+ continue;
+ }
cdata = e_client_cdata_get(ec);
if (cdata)
if (!buffer)
buffer = _e_hwc_windows_comp_wl_buffer_get(hwc_window);
- if (!buffer) continue;
+ if (!buffer)
+ {
+ e_hwc_window_unref(hwc_window);
+ continue;
+ }
/* if reference buffer created by server, server deadlock is occurred.
beacause tbm_surface_internal_unref is called in user_data delete callback.
tbm_surface doesn't allow it.
*/
- if (!buffer->resource) continue;
+ if (!buffer->resource)
+ {
+ e_hwc_window_unref(hwc_window);
+ continue;
+ }
if ((fence_enabled) && (buffer->buffer_release) && (target_hwc_window->end_render_sync))
{
if (!e_explicit_sync_buffer_release_fence_fd_set(buffer->buffer_release, fence_fd))
close(fence_fd);
+ e_hwc_window_unref(hwc_window);
continue;
}
else
}
buffer_ref = E_NEW(E_Comp_Wl_Buffer_Ref, 1);
- if (!buffer_ref) continue;
+ if (!buffer_ref)
+ {
+ e_hwc_window_unref(hwc_window);
+ continue;
+ }
e_comp_wl_buffer_reference(buffer_ref, buffer);
rendered_buffers = eina_list_append(rendered_buffers, buffer_ref);
+
+ e_hwc_window_unref(hwc_window);
}
- rendered_windows = eina_list_clone(target_hwc_window->rendered_windows);
- _e_hwc_windows_comp_info_rendered_windows_set(comp_info, rendered_windows);
_e_hwc_windows_comp_info_rendered_buffers_set(comp_info, rendered_buffers);
- eina_list_free(target_hwc_window->rendered_windows);
target_hwc_window->rendered_windows = NULL;
target_hwc_window->dequeued_tsurface = NULL;
}
}
static Eina_Bool
-_e_hwc_windows_transition_check(E_Hwc *hwc)
-{
- E_Hwc_Window *hwc_window;
- E_Hwc_Window_Target *target_hwc_window, *root_target_hwc_window;
- Eina_Bool transition = EINA_FALSE;
- const Eina_List *l;
- Eina_Bool display_state_changed = EINA_FALSE;
- Eina_Bool target_window_changed = EINA_FALSE;
- Eina_Bool client_to_none_transition = EINA_FALSE;
- E_Hwc_Window_Queue_Type queue_type;
-
- target_hwc_window = hwc->target_hwc_window;
- EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
-
- root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
- EINA_SAFETY_ON_NULL_RETURN_VAL(root_target_hwc_window, EINA_FALSE);
-
- queue_type = e_hwc_window_queue_type_get(((E_Hwc_Window *)root_target_hwc_window)->queue);
- if (queue_type == E_HWC_WINDOW_QUEUE_TYPE_GBM_SURFACE) return EINA_FALSE;
-
- EINA_LIST_FOREACH(hwc->hwc_windows, l, hwc_window)
- {
- E_Hwc_Window_Transition window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_NONE;
-
- if (e_hwc_window_is_target(hwc_window)) continue;
- if (e_hwc_window_is_video(hwc_window)) continue;
-
- if ((hwc_window->state == hwc_window->accepted_state) &&
- (e_hwc_window_transition_get(hwc_window) == E_HWC_WINDOW_TRANSITION_NONE_TO_NONE))
- continue;
-
- if (hwc_window->transition_failures > root_target_hwc_window->max_transition_failures)
- continue;
-
- if ((((E_Hwc_Window *)target_hwc_window)->display.buffer.tsurface) ==
- (((E_Hwc_Window *)target_hwc_window)->current.buffer.tsurface))
- transition = EINA_TRUE;
- else
- target_window_changed = EINA_TRUE;
-
- /* DEVICE -> CLIENT */
- if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT);
-
- if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
- window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT;
-
- display_state_changed = EINA_TRUE;
- }
- /* DEVICE -> NONE */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE;
-
- display_state_changed = EINA_TRUE;
- }
- /* CURSOR -> CLIENT */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT);
-
- if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
- window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT;
-
- display_state_changed = EINA_TRUE;
- }
- /* CURSOR -> NONE */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE;
-
- display_state_changed = EINA_TRUE;
- }
- /* CLIENT -> DEVICE */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_DEVICE))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE;
-
- display_state_changed = EINA_TRUE;
- }
- /* CLIENT -> CURSOR */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_CURSOR))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR;
-
- display_state_changed = EINA_TRUE;
- }
- /* NONE -> DEVICE */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_DEVICE))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE;
-
- display_state_changed = EINA_TRUE;
- }
- /* NONE -> CURSOR */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_CURSOR))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR;
-
- display_state_changed = EINA_TRUE;
- }
- /* CLIENT -> NONE */
- else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
- {
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE);
-
- if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
- window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE;
- }
- else if ((e_hwc_window_transition_get(hwc_window) != E_HWC_WINDOW_TRANSITION_NONE_TO_NONE) &&
- (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
- {
- if (_e_hwc_windows_target_window_rendered_window_has_no(hwc, hwc_window, EINA_TRUE))
- {
- window_transition = e_hwc_window_transition_get(hwc_window);
- transition = EINA_TRUE;
- }
- }
-
- if (window_transition)
- {
- if (target_window_changed)
- {
- hwc_window->transition_failures++;
- EHWSINF("Increase hwc_window:%p transition failures:%d",
- hwc_window->ec, hwc, hwc_window, hwc_window->transition_failures);
- }
-
- if (window_transition == E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE)
- {
- client_to_none_transition = EINA_TRUE;
- continue;
- }
-
- transition = EINA_TRUE;
- }
- }
-
- if ((display_state_changed) && (client_to_none_transition))
- transition = EINA_TRUE;
-
- if (transition && target_window_changed)
- EHWSINF("hwc transition display_state_change:%d client_to_none_transition:%d",
- NULL, hwc, display_state_changed, client_to_none_transition);
-
- return transition;
-}
-
-static Eina_Bool
_e_hwc_windows_present_sync_check(E_Hwc *hwc)
{
E_Hwc_Window_Target *target_hwc_window;
+ E_Hwc_Window_Target *root_target_hwc_window;
if (!hwc->present_sync) return EINA_FALSE;
{
if ((((E_Hwc_Window *)target_hwc_window)->display.buffer.tsurface) ==
(((E_Hwc_Window *)target_hwc_window)->current.buffer.tsurface))
- return EINA_TRUE;
+ {
+ root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
+ if (root_target_hwc_window)
+ {
+ if (!eina_list_count(root_target_hwc_window->rendering_tsurfaces))
+ e_hwc_windows_target_window_force_render(target_hwc_window);
+ }
+
+ return EINA_TRUE;
+ }
}
hwc->present_sync = EINA_FALSE;
/* update the accepted_state */
state = e_hwc_window_state_get(hwc_window);
e_hwc_window_accepted_state_set(hwc_window, state);
- e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_NONE);
/* notify the hwc_window that it will be displayed on hw layer */
if (!hwc_window->queue && !e_hwc_window_is_video(hwc_window))
{
if (e_hwc_window_is_target(hwc_window)) continue;
- e_hwc_window_ref(hwc_window);
- }
-
- EINA_LIST_FOREACH_SAFE(hwc->hwc_windows, l, ll, hwc_window)
- {
- if (e_hwc_window_is_target(hwc_window)) continue;
-
/* fetch the window buffer */
if (e_hwc_window_buffer_fetch(hwc_window))
update_changes = EINA_TRUE;
update_changes = EINA_TRUE;
}
- EINA_LIST_FOREACH_SAFE(hwc->hwc_windows, l, ll, hwc_window)
- {
- if (e_hwc_window_is_target(hwc_window)) continue;
-
- e_hwc_window_unref(hwc_window);
- }
-
if (hwc->primary_output)
_e_hwc_windows_root_target_buffer_fetch(hwc);
_e_hwc_windows_below_transparent_window_update(hwc);
- /* skip the target_buffer when the window is on trainsition of the composition */
- if ((hwc_mode != E_HWC_MODE_FULL) &&
- (!hwc->pp_set) && (display_mode != E_OUTPUT_DISPLAY_MODE_MIRROR) &&
- (_e_hwc_windows_transition_check(hwc)))
- {
- _e_hwc_windows_target_window_buffer_skip(hwc);
-
- if (!hwc->transition)
- {
- e_hwc_windows_target_window_force_render(hwc->target_hwc_window);
- hwc->transition = EINA_TRUE;
- }
-
- goto re_evaluate;
- }
-
if (_e_hwc_windows_present_sync_check(hwc))
{
EHWSTRACE(" Not accpet display sync", NULL, hwc);
goto re_evaluate;
}
- hwc->transition = EINA_FALSE;
hwc->re_evaluate = EINA_FALSE;
return EINA_TRUE;
if (!output->hwc) continue;
snprintf(info_str, sizeof(info_str),
- "HWC:%p mode:%d wait_commit:%d deactive:%d transition:%d norender:%d mirror_source:%d",
- hwc, hwc->hwc_mode, hwc->wait_commit, hwc->hwc_deactive, hwc->transition, hwc->norender,
+ "HWC:%p mode:%d wait_commit:%d deactive:%d norender:%d mirror_source:%d",
+ hwc, hwc->hwc_mode, hwc->wait_commit, hwc->hwc_deactive, hwc->norender,
eina_list_count(hwc->mirror_dst_hwc) ? 1 : 0);
eldbus_message_iter_basic_append(line_array, 's', info_str);
"==========================================================================================="
"===============================================================================================");
eldbus_message_iter_basic_append(line_array, 's',
- " No Win_ID Hwc_win zpos ST AC_ST ACTI TRANSI tsurface src_size src_pos"
+ " No Win_ID Hwc_win zpos ST AC_ST ACTI tsurface src_size src_pos"
" FMT dst_pos TRANSF DP_tsurface Queue wl_tbm_queue vis_skip restriction");
eldbus_message_iter_basic_append(line_array, 's',
"==========================================================================================="
flip = ' ';
snprintf(info_str, sizeof(info_str),
- "%3d 0x%08zx 0x%08zx %4d %s %s %s %s 0x%08zx %04dx%04d %04dx%04d+%04d+%04d"
+ "%3d 0x%08zx 0x%08zx %4d %s %s %s 0x%08zx %04dx%04d %04dx%04d+%04d+%04d"
" %4s %04dx%04d+%04d+%04d %c%3d 0x%08zx 0x%08zx 0x%08zx %6s %s",
++idx,
e_client_util_win_get(hwc_window->ec),
e_hwc_window_state_string_get(hwc_window->state),
e_hwc_window_state_string_get(hwc_window->accepted_state),
hwc_window->accepted_state ? "A" : "D",
- e_hwc_window_transition_string_get(hwc_window->transition),
(uintptr_t)hwc_window->current.buffer.tsurface,
hwc_window->current.info.src_config.size.h,
hwc_window->current.info.src_config.size.v,
if (!output->hwc) continue;
snprintf(info_str, sizeof(info_str),
- "HWC:%p mode:%d wait_commit:%d deactive:%d transition:%d norender:%d mirror_source:%d",
- hwc, hwc->hwc_mode, hwc->wait_commit, hwc->hwc_deactive, hwc->transition, hwc->norender,
+ "HWC:%p mode:%d wait_commit:%d deactive:%d norender:%d mirror_source:%d",
+ hwc, hwc->hwc_mode, hwc->wait_commit, hwc->hwc_deactive, hwc->norender,
eina_list_count(hwc->mirror_dst_hwc) ? 1 : 0);
eldbus_message_iter_basic_append(line_array, 's', info_str);
_e_hwc_windows_target_window_buffer_skip(hwc);
+ e_hwc_windows_target_window_force_render(hwc->target_hwc_window);
+
EHWSINF("Present sync", NULL, hwc);
return EINA_TRUE;