drm-timeline: Add meta_drm_timeline_is_signaled

v2: (Doğukan Korkmaztürk)
* Use drmSyncobjQuery instead of drmSyncobjTimelineWait.
* Fix libdrm function name in error message.
v3:
* Add separate boolean is_signaled out parameter. (Sebastian Wick)
* Use g_strerror instead of strerror.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3876>
This commit is contained in:
Michel Dänzer 2024-07-09 17:03:39 +02:00 committed by Marge Bot
parent 12d12eb278
commit a3515eecb6
2 changed files with 29 additions and 0 deletions

View File

@ -249,6 +249,30 @@ end:
return FALSE; return FALSE;
} }
gboolean
meta_drm_timeline_is_signaled (MetaDrmTimeline *timeline,
uint64_t sync_point,
gboolean *is_signaled,
GError **error)
{
uint64_t latest_signaled_point;
int ret;
ret = drmSyncobjQuery (timeline->drm, &timeline->drm_syncobj,
&latest_signaled_point, 1);
if (ret < 0)
{
g_set_error (error,
G_IO_ERROR,
G_IO_ERROR_FAILED,
"drmSyncobjQuery failed: %s", g_strerror (errno));
return FALSE;
}
*is_signaled = latest_signaled_point >= sync_point;
return TRUE;
}
static void static void
meta_drm_timeline_finalize (GObject *object) meta_drm_timeline_finalize (GObject *object)
{ {

View File

@ -45,3 +45,8 @@ gboolean meta_drm_timeline_set_sync_point (MetaDrmTimeline *timeline,
uint64_t sync_point, uint64_t sync_point,
int sync_fd, int sync_fd,
GError **error); GError **error);
gboolean meta_drm_timeline_is_signaled (MetaDrmTimeline *timeline,
uint64_t sync_point,
gboolean *is_signaled,
GError **error);