From 694d3c7f46f8db5ba68751e684c6a940a3ed1780 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Fri, 4 Mar 2022 10:44:57 +0900 Subject: [PATCH] backend/tdm: Split commit function into small functions No functional changes. It improves readability. Change-Id: I0b95360f5dc54e7023ab3f54c3b9cf2057a82686 --- src/libds/backend/tdm/output.c | 135 ++++++++++++++++++++++++----------------- 1 file changed, 79 insertions(+), 56 deletions(-) diff --git a/src/libds/backend/tdm/output.c b/src/libds/backend/tdm/output.c index a67c618..bc931d7 100644 --- a/src/libds/backend/tdm/output.c +++ b/src/libds/backend/tdm/output.c @@ -11,6 +11,9 @@ static bool tdm_output_init_modes(struct ds_tdm_output *output); static void tdm_output_destroy(struct ds_tdm_output *output); static void tdm_output_init_hwc(struct ds_tdm_output *output); static bool tdm_output_update_mode(struct ds_tdm_output *output); +static bool tdm_output_set_pending_fb(struct ds_tdm_output *output, + struct ds_buffer *ds_buffer); +static bool tdm_output_hwc_commit(struct ds_tdm_output *output); struct ds_tdm_output * create_tdm_output(struct ds_tdm_backend *tdm, tdm_output *tdm_output) @@ -167,25 +170,10 @@ tdm_output_attach_back_buffer(struct ds_tdm_output *output, output->back_buffer = buffer; } -static void -tdm_output_hwc_commit_handler(tdm_hwc *hwc, unsigned int sequence, - unsigned int tv_sec, unsigned int tv_usec, void *user_data) -{ - struct ds_tdm_output *output; - - output = user_data; - - tdm_output_update_front_buffer(output); - - wl_signal_emit(&output->base.events.frame, &output->base); -} - static bool tdm_output_iface_commit(struct ds_output *ds_output) { struct ds_tdm_output *output; - struct ds_tdm_buffer *buffer; - struct ds_buffer *ds_buffer; output = tdm_output_from_output(ds_output); @@ -197,51 +185,19 @@ tdm_output_iface_commit(struct ds_output *ds_output) } if (ds_output->pending.committed & DS_OUTPUT_STATE_BUFFER) { - tdm_region fb_damage; - tdm_error err; - uint32_t num_changes; - - ds_buffer = ds_output->pending.buffer; - buffer = get_or_create_tdm_buffer(output->backend, ds_buffer); - if (!buffer) - return false; - - memset(&fb_damage, 0, sizeof(fb_damage)); - err = tdm_hwc_set_client_target_buffer(output->tdm.hwc, - buffer->surface, fb_damage); - if (err != TDM_ERROR_NONE) { - ds_err("Could not set hwc client target buffer"); - ds_buffer_unlock(buffer->buffer); - return false; - } - - err = tdm_hwc_validate(output->tdm.hwc, NULL, 0, &num_changes); - if (err != TDM_ERROR_NONE) { - ds_err("Could not hwc validate"); - ds_buffer_unlock(buffer->buffer); - return false; - } - - err = tdm_hwc_accept_validation(output->tdm.hwc); - if (err != TDM_ERROR_NONE) { - ds_err("Could not hwc accept validation"); - ds_buffer_unlock(buffer->buffer); - return false; - } + if (!tdm_output_set_pending_fb(output, ds_output->pending.buffer)) + ds_err("Could not update buffer"); + } - err = tdm_hwc_commit(output->tdm.hwc, 0, tdm_output_hwc_commit_handler, - output); - if (err != TDM_ERROR_NONE) { - ds_err("Could not hwc commit"); - ds_buffer_unlock(buffer->buffer); - return false; + if (!tdm_output_hwc_commit(output)) { + ds_err("Could not commit tdm output"); + if (output->back_buffer) { + tdm_buffer_release(output->back_buffer); } - - tdm_output_attach_back_buffer(output, buffer); - - ds_dbg("Swap Buffer!!!!!"); } + ds_dbg("Swap Buffer!!!!!"); + return true; } @@ -346,3 +302,70 @@ tdm_output_update_mode(struct ds_tdm_output *output) return true; } + +static bool +tdm_output_set_pending_fb(struct ds_tdm_output *output, + struct ds_buffer *ds_buffer) +{ + struct ds_tdm_buffer *buffer; + tdm_region fb_damage; + tdm_error err; + + buffer = get_or_create_tdm_buffer(output->backend, ds_buffer); + if (!buffer) + return false; + + memset(&fb_damage, 0, sizeof(fb_damage)); + err = tdm_hwc_set_client_target_buffer(output->tdm.hwc, + buffer->surface, fb_damage); + if (err != TDM_ERROR_NONE) { + ds_err("Could not set hwc client target buffer"); + ds_buffer_unlock(buffer->buffer); + return false; + } + + tdm_output_attach_back_buffer(output, buffer); + + return true; +} + +static void +tdm_output_hwc_commit_handler(tdm_hwc *hwc, unsigned int sequence, + unsigned int tv_sec, unsigned int tv_usec, void *user_data) +{ + struct ds_tdm_output *output; + + output = user_data; + + tdm_output_update_front_buffer(output); + + wl_signal_emit(&output->base.events.frame, &output->base); +} + +static bool +tdm_output_hwc_commit(struct ds_tdm_output *output) +{ + tdm_error err; + uint32_t num_changes; + + err = tdm_hwc_validate(output->tdm.hwc, NULL, 0, &num_changes); + if (err != TDM_ERROR_NONE) { + ds_err("Could not hwc validate"); + return false; + } + + err = tdm_hwc_accept_validation(output->tdm.hwc); + if (err != TDM_ERROR_NONE) { + ds_err("Could not hwc accept validation"); + return false; + } + + err = tdm_hwc_commit(output->tdm.hwc, 0, tdm_output_hwc_commit_handler, + output); + if (err != TDM_ERROR_NONE) { + ds_err("Could not hwc commit"); + return false; + } + + return true; +} -- 2.7.4