if committing buffer is released to queue, compositor can render on displaying buffer
Change-Id: Ia300a9a2c021ca9b0b9d886b2ae861ffc448aaf4
return EINA_FALSE;
}
+EINTERN Eina_Bool
+e_hwc_window_display_or_commit_buffer_check(E_Hwc_Window *hwc_window, tbm_surface_h tsurface)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tsurface, EINA_FALSE);
+
+ if (hwc_window->display.buffer.tsurface == tsurface) return EINA_TRUE;
+
+ if (!hwc_window->commit_data) return EINA_FALSE;
+ if (hwc_window->commit_data->buffer.tsurface == tsurface) return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
EINTERN Eina_Bool
e_hwc_window_buffer_fetch(E_Hwc_Window *hwc_window)
{
if (tsurface == hwc_window->buffer.tsurface) return EINA_FALSE;
}
- if (hwc_window->buffer.tsurface && hwc_window->buffer.queue &&
- hwc_window->buffer.tsurface != hwc_window->display.buffer.tsurface)
+ if ((hwc_window->buffer.tsurface) && (hwc_window->buffer.queue) &&
+ (!e_hwc_window_display_or_commit_buffer_check(hwc_window, hwc_window->buffer.tsurface)))
{
queue_buffer = e_hwc_window_queue_buffer_find(hwc_window->buffer.queue, hwc_window->buffer.tsurface);
if (queue_buffer)
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 Eina_Bool e_hwc_window_display_or_commit_buffer_check(E_Hwc_Window *hwc_window, tbm_surface_h tsurface);
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);
return EINA_FALSE;
}
- if (hwc_window->buffer.tsurface &&
- hwc_window->buffer.tsurface != hwc_window->display.buffer.tsurface)
+ if ((hwc_window->buffer.tsurface) &&
+ (!e_hwc_window_display_or_commit_buffer_check(hwc_window, hwc_window->buffer.tsurface)))
{
queue_buffer = e_hwc_window_queue_buffer_find(hwc_window->buffer.queue, hwc_window->buffer.tsurface);
if (queue_buffer)
if (!hwc_window->buffer.tsurface) return EINA_FALSE;
- if (hwc_window->buffer.tsurface != hwc_window->display.buffer.tsurface)
+ if (!e_hwc_window_display_or_commit_buffer_check(hwc_window, hwc_window->buffer.tsurface))
{
queue_buffer = e_hwc_window_queue_buffer_find(hwc_window->buffer.queue, hwc_window->buffer.tsurface);
if (queue_buffer)