[hwc] adopt COMMIT_PER_VBLANK functionality for each ouptut
[platform/core/uifw/libtdm.git] / src / tdm_output.c
index 3dd945c..d445914 100644 (file)
@@ -690,7 +690,7 @@ tdm_output_cb_commit(tdm_output *output_backend, unsigned int sequence,
                TDM_INFO("handler(%p)", output_commit_handler);
        }
 
-       if (private_display->commit_type == TDM_COMMIT_TYPE_OUTPUT) {
+       if (private_output->commit_type == TDM_COMMIT_TYPE_OUTPUT) {
                /* In case of layer commit, the below will be handled in the layer commit callback */
                LIST_FOR_EACH_ENTRY(private_layer, &private_output->layer_list, link) {
                        if (private_layer->committed_buffer)
@@ -922,7 +922,7 @@ tdm_output_commit_internal(tdm_output *output, int sync, tdm_output_commit_handl
        /* TODO: this is ugly. But before using tdm_output_get_dpms_internal, we have
         * to check if all backends's DPMS operation has no problem.
         */
-       if (private_display->commit_per_vblank)
+       if (private_output->commit_per_vblank)
                tdm_output_get_dpms_internal(output, &dpms_value);
        else
                dpms_value = private_output->current_dpms_value;
@@ -999,15 +999,15 @@ tdm_output_commit(tdm_output *output, int sync, tdm_output_commit_handler func,
 
        _pthread_mutex_lock(&private_display->lock);
 
-       if (private_display->commit_type == TDM_COMMIT_TYPE_NONE)
-               private_display->commit_type = TDM_COMMIT_TYPE_OUTPUT;
-       else if (private_display->commit_type == TDM_COMMIT_TYPE_LAYER) {
+       if (private_output->commit_type == TDM_COMMIT_TYPE_NONE)
+               private_output->commit_type = TDM_COMMIT_TYPE_OUTPUT;
+       else if (private_output->commit_type == TDM_COMMIT_TYPE_LAYER) {
                TDM_ERR("Can't supported. Use tdm_layer_commit");
                _pthread_mutex_unlock(&private_display->lock);
                return TDM_ERROR_BAD_REQUEST;
        }
 
-       if (private_display->commit_per_vblank) {
+       if (private_output->commit_per_vblank) {
                TDM_ERR("Use tdm_layer_commit");
                _pthread_mutex_unlock(&private_display->lock);
                return TDM_ERROR_BAD_REQUEST;
@@ -1298,7 +1298,7 @@ tdm_output_get_dpms_internal(tdm_output *output, tdm_output_dpms *dpms_value)
        }
 
        /* TODO: this is ugly. But we have to check if all backends's DPMS operation has no problem. */
-       if (private_display->commit_per_vblank)
+       if (private_output->commit_per_vblank)
                if (*dpms_value != private_output->current_dpms_value) {
                        private_output->current_dpms_value = *dpms_value;
                        TDM_ERR("output(%d) dpms changed suddenly: %s",
@@ -1727,3 +1727,24 @@ tdm_output_need_validate_event_init(tdm_output *output)
 
        return ret;
 }
+
+INTERN tdm_error
+tdm_output_choose_commit_per_vblank_mode(tdm_private_output *private_output, int mode)
+{
+       if (!private_output)
+               return TDM_ERROR_INVALID_PARAMETER;
+
+       if (mode < 0 || mode > 2)
+               return TDM_ERROR_INVALID_PARAMETER;
+
+       private_output->commit_per_vblank = mode;
+
+       if (private_output->commit_per_vblank == 0)
+               TDM_INFO("commit per vblank: disable");
+       else if (private_output->commit_per_vblank == 1)
+               TDM_INFO("commit per vblank: enable (1 layer)");
+       else if (private_output->commit_per_vblank == 2)
+               TDM_INFO("commit per vblank: enable (previous commit)");
+
+       return TDM_ERROR_NONE;
+}