int
tdm_helper_output_commit_per_vblank_enabled(tdm_output *output);
+/**
+ * @brief Get whether the vblank timer is expired or not for the output.
+ * @param[in] output An output the functionality has to be checked for
+ * @return -1 if error occurred, 1 if enabled, 0 if disabled.
+ */
+unsigned int
+tdm_helper_output_vblank_timer_expired(tdm_output *output);
+
#ifdef __cplusplus
}
#endif
return !!private_output->commit_per_vblank;
}
+EXTERN unsigned int
+tdm_helper_output_vblank_timer_expired(tdm_output *output)
+{
+ tdm_private_output *private_output = output;
+
+ TDM_RETURN_VAL_IF_FAIL(private_output != NULL, -1);
+
+ return private_output->vblank_timeout_timer_expired;
+}
\ No newline at end of file
TDM_RETURN_VAL_IF_FAIL(private_output != NULL, TDM_ERROR_OPERATION_FAILED);
- TDM_ERR("TDM output(%d) vblank TIMEOUT!!", private_output->pipe);
+ private_output->vblank_timeout_timer_expired++;
+
+ TDM_ERR("TDM output(%d) vblank TIMEOUT!! (%d time%s)",
+ private_output->pipe,
+ private_output->vblank_timeout_timer_expired,
+ (private_output->vblank_timeout_timer_expired > 1) ? "s" : "");
LIST_FOR_EACH_ENTRY(v, &private_output->vblank_handler_list, link) {
TDM_ERR("vblank_handler(%p) interval(%d) sync(%d) sent_to_frontend(%u) owner_tid(%d)",
return;
}
TDM_INFO("output(%d) create vblank timeout timer", private_output->pipe);
+ private_output->vblank_timeout_timer_expired = 0;
}
ret = tdm_event_loop_source_timer_update(private_output->vblank_timeout_timer, ms_delay);
int layer_waiting_vblank;
tdm_event_loop_source *vblank_timeout_timer;
+ unsigned int vblank_timeout_timer_expired;
struct list_head change_handler_list;