[mutter] kms/update: Encapsulate custom page flip fields in object
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] kms/update: Encapsulate custom page flip fields in object
- Date: Fri, 22 Jan 2021 17:08:32 +0000 (UTC)
commit 8e235768daca1ec0c4f95d7d3c0da659781e732e
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Fri Jan 22 11:31:18 2021 +0100
kms/update: Encapsulate custom page flip fields in object
Makes more sense to pass around an encapsulated object with the relevant
data, than passing around a vfunc and a gpointer.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
src/backends/native/meta-kms-impl-device-simple.c | 49 ++++++++++-------------
src/backends/native/meta-kms-update-private.h | 15 +++++--
src/backends/native/meta-kms-update.c | 26 +++++++-----
3 files changed, 51 insertions(+), 39 deletions(-)
---
diff --git a/src/backends/native/meta-kms-impl-device-simple.c
b/src/backends/native/meta-kms-impl-device-simple.c
index d83b504ee3..3ffda075a5 100644
--- a/src/backends/native/meta-kms-impl-device-simple.c
+++ b/src/backends/native/meta-kms-impl-device-simple.c
@@ -527,14 +527,15 @@ typedef struct _RetryPageFlipData
MetaKmsPageFlipData *page_flip_data;
float refresh_rate;
uint64_t retry_time_us;
- MetaKmsCustomPageFlipFunc custom_page_flip_func;
- gpointer custom_page_flip_user_data;
+ MetaKmsCustomPageFlip *custom_page_flip;
} RetryPageFlipData;
static void
retry_page_flip_data_free (RetryPageFlipData *retry_page_flip_data)
{
g_assert (!retry_page_flip_data->page_flip_data);
+ g_clear_pointer (&retry_page_flip_data->custom_page_flip,
+ meta_kms_custom_page_flip_free);
g_free (retry_page_flip_data);
}
@@ -581,7 +582,7 @@ retry_page_flips (gpointer user_data)
int fd;
int ret;
MetaKmsPageFlipData *page_flip_data;
- MetaKmsCustomPageFlipFunc custom_page_flip_func;
+ MetaKmsCustomPageFlip *custom_page_flip;
if (is_timestamp_earlier_than (now_us,
retry_page_flip_data->retry_time_us))
@@ -590,15 +591,15 @@ retry_page_flips (gpointer user_data)
continue;
}
- custom_page_flip_func = retry_page_flip_data->custom_page_flip_func;
- if (custom_page_flip_func)
+ custom_page_flip = retry_page_flip_data->custom_page_flip;
+ if (custom_page_flip)
{
meta_topic (META_DEBUG_KMS,
"[simple] Retrying custom page flip on CRTC %u (%s)",
meta_kms_crtc_get_id (crtc),
meta_kms_impl_device_get_path (impl_device));
- ret = custom_page_flip_func (retry_page_flip_data->custom_page_flip_user_data,
- retry_page_flip_data->page_flip_data);
+ ret = custom_page_flip->func (custom_page_flip->user_data,
+ retry_page_flip_data->page_flip_data);
}
else
{
@@ -689,13 +690,12 @@ retry_page_flips (gpointer user_data)
}
static void
-schedule_retry_page_flip (MetaKmsImplDeviceSimple *impl_device_simple,
- MetaKmsCrtc *crtc,
- uint32_t fb_id,
- float refresh_rate,
- MetaKmsPageFlipData *page_flip_data,
- MetaKmsCustomPageFlipFunc custom_page_flip_func,
- gpointer custom_page_flip_user_data)
+schedule_retry_page_flip (MetaKmsImplDeviceSimple *impl_device_simple,
+ MetaKmsCrtc *crtc,
+ uint32_t fb_id,
+ float refresh_rate,
+ MetaKmsPageFlipData *page_flip_data,
+ MetaKmsCustomPageFlip *custom_page_flip)
{
RetryPageFlipData *retry_page_flip_data;
uint64_t now_us;
@@ -711,8 +711,7 @@ schedule_retry_page_flip (MetaKmsImplDeviceSimple *impl_device_simple,
.page_flip_data = page_flip_data,
.refresh_rate = refresh_rate,
.retry_time_us = retry_time_us,
- .custom_page_flip_func = custom_page_flip_func,
- .custom_page_flip_user_data = custom_page_flip_user_data,
+ .custom_page_flip = custom_page_flip,
};
if (!impl_device_simple->retry_page_flips_source)
@@ -892,8 +891,7 @@ dispatch_page_flip (MetaKmsImplDevice *impl_device,
META_KMS_IMPL_DEVICE_SIMPLE (impl_device);
MetaKmsCrtc *crtc;
MetaKmsPlaneAssignment *plane_assignment;
- MetaKmsCustomPageFlipFunc custom_page_flip_func;
- gpointer custom_page_flip_user_data;
+ g_autoptr (MetaKmsCustomPageFlip) custom_page_flip = NULL;
int fd;
int ret;
@@ -901,11 +899,9 @@ dispatch_page_flip (MetaKmsImplDevice *impl_device,
plane_assignment = meta_kms_update_get_primary_plane_assignment (update,
crtc);
- meta_kms_update_get_custom_page_flip_func (update,
- &custom_page_flip_func,
- &custom_page_flip_user_data);
+ custom_page_flip = meta_kms_update_take_custom_page_flip_func (update);
- if (!plane_assignment && !custom_page_flip_func)
+ if (!plane_assignment && !custom_page_flip)
{
MetaKmsDevice *device = meta_kms_impl_device_get_device (impl_device);
MetaKms *kms = meta_kms_device_get_kms (device);
@@ -925,14 +921,14 @@ dispatch_page_flip (MetaKmsImplDevice *impl_device,
}
fd = meta_kms_impl_device_get_fd (impl_device);
- if (custom_page_flip_func)
+ if (custom_page_flip)
{
meta_topic (META_DEBUG_KMS,
"[simple] Invoking custom page flip on CRTC %u (%s)",
meta_kms_crtc_get_id (crtc),
meta_kms_impl_device_get_path (impl_device));
- ret = custom_page_flip_func (custom_page_flip_user_data,
- page_flip_data);
+ ret = custom_page_flip->func (custom_page_flip->user_data,
+ page_flip_data);
}
else
{
@@ -981,8 +977,7 @@ dispatch_page_flip (MetaKmsImplDevice *impl_device,
fb_id,
refresh_rate,
page_flip_data,
- custom_page_flip_func,
- custom_page_flip_user_data);
+ g_steal_pointer (&custom_page_flip));
}
else
{
diff --git a/src/backends/native/meta-kms-update-private.h b/src/backends/native/meta-kms-update-private.h
index d3f298d5e3..1954c7a782 100644
--- a/src/backends/native/meta-kms-update-private.h
+++ b/src/backends/native/meta-kms-update-private.h
@@ -87,6 +87,12 @@ typedef struct _MetaKmsResultListener
gpointer user_data;
} MetaKmsResultListener;
+typedef struct _MetaKmsCustomPageFlip
+{
+ MetaKmsCustomPageFlipFunc func;
+ gpointer user_data;
+} MetaKmsCustomPageFlip;
+
void meta_kms_plane_feedback_free (MetaKmsPlaneFeedback *plane_feedback);
MetaKmsPlaneFeedback * meta_kms_plane_feedback_new_take_error (MetaKmsPlane *plane,
@@ -126,9 +132,7 @@ GList * meta_kms_update_get_crtc_gammas (MetaKmsUpdate *update);
gboolean meta_kms_update_is_power_save (MetaKmsUpdate *update);
-void meta_kms_update_get_custom_page_flip_func (MetaKmsUpdate *update,
- MetaKmsCustomPageFlipFunc *custom_page_flip_func,
- gpointer *custom_page_flip_user_data);
+MetaKmsCustomPageFlip * meta_kms_update_take_custom_page_flip_func (MetaKmsUpdate *update);
void meta_kms_update_drop_plane_assignment (MetaKmsUpdate *update,
MetaKmsPlane *plane);
@@ -140,7 +144,12 @@ void meta_kms_result_listener_notify (MetaKmsResultListener *listener,
void meta_kms_result_listener_free (MetaKmsResultListener *listener);
+void meta_kms_custom_page_flip_free (MetaKmsCustomPageFlip *custom_page_flip);
+
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaKmsPlaneFeedback,
meta_kms_plane_feedback_free)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaKmsCustomPageFlip,
+ meta_kms_custom_page_flip_free)
+
#endif /* META_KMS_UPDATE_PRIVATE_H */
diff --git a/src/backends/native/meta-kms-update.c b/src/backends/native/meta-kms-update.c
index 427a5b0090..175461126c 100644
--- a/src/backends/native/meta-kms-update.c
+++ b/src/backends/native/meta-kms-update.c
@@ -42,8 +42,7 @@ struct _MetaKmsUpdate
GList *connector_updates;
GList *crtc_gammas;
- MetaKmsCustomPageFlipFunc custom_page_flip_func;
- gpointer custom_page_flip_user_data;
+ MetaKmsCustomPageFlip *custom_page_flip;
GList *page_flip_listeners;
GList *result_listeners;
@@ -423,11 +422,16 @@ meta_kms_update_set_custom_page_flip (MetaKmsUpdate *update,
MetaKmsCustomPageFlipFunc func,
gpointer user_data)
{
+ MetaKmsCustomPageFlip *custom_page_flip;
+
g_assert (!meta_kms_update_is_locked (update));
g_assert (!update->power_save);
- update->custom_page_flip_func = func;
- update->custom_page_flip_user_data = user_data;
+ custom_page_flip = g_new0 (MetaKmsCustomPageFlip, 1);
+ custom_page_flip->func = func;
+ custom_page_flip->user_data = user_data;
+
+ update->custom_page_flip = custom_page_flip;
}
void
@@ -569,13 +573,16 @@ meta_kms_update_get_device (MetaKmsUpdate *update)
return update->device;
}
+MetaKmsCustomPageFlip *
+meta_kms_update_take_custom_page_flip_func (MetaKmsUpdate *update)
+{
+ return g_steal_pointer (&update->custom_page_flip);
+}
+
void
-meta_kms_update_get_custom_page_flip_func (MetaKmsUpdate *update,
- MetaKmsCustomPageFlipFunc *custom_page_flip_func,
- gpointer *custom_page_flip_user_data)
+meta_kms_custom_page_flip_free (MetaKmsCustomPageFlip *custom_page_flip)
{
- *custom_page_flip_func = update->custom_page_flip_func;
- *custom_page_flip_user_data = update->custom_page_flip_user_data;
+ g_free (custom_page_flip);
}
uint64_t
@@ -610,6 +617,7 @@ meta_kms_update_free (MetaKmsUpdate *update)
(GDestroyNotify) meta_kms_page_flip_listener_free);
g_list_free_full (update->connector_updates, g_free);
g_list_free_full (update->crtc_gammas, (GDestroyNotify) meta_kms_crtc_gamma_free);
+ g_clear_pointer (&update->custom_page_flip, meta_kms_custom_page_flip_free);
g_free (update);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]