From: Changyeon Lee Date: Tue, 21 Jul 2020 05:28:22 +0000 (+0900) Subject: e_hwc_windows: check to change of cursor buffer and info in commit_data_acquire X-Git-Tag: submit/tizen/20200729.055340~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6367f3a75dfe527eb90362b2f20edd69736765f6;p=platform%2Fupstream%2Fenlightenment.git e_hwc_windows: check to change of cursor buffer and info in commit_data_acquire Change-Id: I62e017be2ea882b8390f8591195181cf9808de54 --- diff --git a/src/bin/e_hwc_window.c b/src/bin/e_hwc_window.c index 3556b628c2..7f1e9e3bb2 100644 --- a/src/bin/e_hwc_window.c +++ b/src/bin/e_hwc_window.c @@ -1401,16 +1401,22 @@ e_hwc_window_commit_data_acquire(E_Hwc_Window *hwc_window) { E_Hwc_Window_Commit_Data *commit_data = NULL; - if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) - { + if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) + { + if (!hwc_window->cursor.buffer) return EINA_FALSE; + if ((hwc_window->cursor.buffer == hwc_window->display.buffer_ref.buffer) && + (!memcmp(&hwc_window->info, &hwc_window->display.info, sizeof(tdm_hwc_window_info)))) + return EINA_FALSE; + commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1); EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, EINA_FALSE); + memcpy(&commit_data->info, &hwc_window->info, sizeof(tdm_hwc_window_info)); e_comp_wl_buffer_reference(&commit_data->buffer_ref, _e_hwc_window_comp_wl_buffer_get(hwc_window)); - } - else if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE || - hwc_window->accepted_state == E_HWC_WINDOW_STATE_VIDEO) + } + else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) || + (hwc_window->accepted_state == E_HWC_WINDOW_STATE_VIDEO)) { if (!hwc_window->buffer.tsurface) return EINA_FALSE; if ((hwc_window->buffer.tsurface == hwc_window->display.buffer.tsurface) && @@ -1422,7 +1428,16 @@ e_hwc_window_commit_data_acquire(E_Hwc_Window *hwc_window) } else { - if (!hwc_window->display.buffer.tsurface) return EINA_FALSE; + if (e_hwc_window_is_cursor(hwc_window)) + { + if (!hwc_window->display.buffer_ref.buffer) + return EINA_FALSE; + } + else + { + if (!hwc_window->display.buffer.tsurface) + return EINA_FALSE; + } commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1); EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, EINA_FALSE); @@ -1522,6 +1537,18 @@ e_hwc_window_commit_data_release(E_Hwc_Window *hwc_window) if (e_hwc_window_is_cursor(hwc_window)) { + if (hwc_window->commit_data->buffer_ref.buffer) + { + e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref, + hwc_window->commit_data->buffer_ref.buffer); + memcpy(&hwc_window->display.info, &hwc_window->commit_data->info, sizeof(tdm_hwc_window_info)); + } + else + { + e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref, NULL); + CLEAR(hwc_window->display.info); + } + e_comp_wl_buffer_reference(&hwc_window->commit_data->buffer_ref, NULL); free(hwc_window->commit_data); hwc_window->commit_data = NULL;