kms/impl-device: Let process() always take ownership of the update
This allows more freedom how to handle the update in the backends. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
This commit is contained in:
parent
f9802ca2a4
commit
6d043e6a8f
@ -1013,7 +1013,10 @@ meta_kms_impl_device_process_update (MetaKmsImplDevice *impl_device,
|
|||||||
MetaKmsResourceChanges changes = META_KMS_RESOURCE_CHANGE_NONE;
|
MetaKmsResourceChanges changes = META_KMS_RESOURCE_CHANGE_NONE;
|
||||||
|
|
||||||
if (!ensure_device_file (impl_device, &error))
|
if (!ensure_device_file (impl_device, &error))
|
||||||
|
{
|
||||||
|
meta_kms_update_free (update);
|
||||||
return meta_kms_feedback_new_failed (NULL, g_steal_pointer (&error));
|
return meta_kms_feedback_new_failed (NULL, g_steal_pointer (&error));
|
||||||
|
}
|
||||||
|
|
||||||
meta_kms_impl_device_hold_fd (impl_device);
|
meta_kms_impl_device_hold_fd (impl_device);
|
||||||
feedback = klass->process_update (impl_device, update, flags);
|
feedback = klass->process_update (impl_device, update, flags);
|
||||||
@ -1021,6 +1024,8 @@ meta_kms_impl_device_process_update (MetaKmsImplDevice *impl_device,
|
|||||||
changes = meta_kms_impl_device_predict_states (impl_device, update);
|
changes = meta_kms_impl_device_predict_states (impl_device, update);
|
||||||
meta_kms_impl_device_unhold_fd (impl_device);
|
meta_kms_impl_device_unhold_fd (impl_device);
|
||||||
|
|
||||||
|
meta_kms_update_free (update);
|
||||||
|
|
||||||
if (changes != META_KMS_RESOURCE_CHANGE_NONE)
|
if (changes != META_KMS_RESOURCE_CHANGE_NONE)
|
||||||
{
|
{
|
||||||
MetaKms *kms = meta_kms_device_get_kms (priv->device);
|
MetaKms *kms = meta_kms_device_get_kms (priv->device);
|
||||||
|
@ -282,12 +282,8 @@ meta_kms_post_pending_update_sync (MetaKms *kms,
|
|||||||
if (!update)
|
if (!update)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
feedback = meta_kms_device_process_update_sync (device, update, flags);
|
|
||||||
|
|
||||||
result_listeners = meta_kms_update_take_result_listeners (update);
|
result_listeners = meta_kms_update_take_result_listeners (update);
|
||||||
|
feedback = meta_kms_device_process_update_sync (device, update, flags);
|
||||||
meta_kms_update_free (update);
|
|
||||||
|
|
||||||
meta_kms_feedback_dispatch_result (feedback, kms, result_listeners);
|
meta_kms_feedback_dispatch_result (feedback, kms, result_listeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1276,7 +1276,6 @@ meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen,
|
|||||||
kms_feedback =
|
kms_feedback =
|
||||||
meta_kms_device_process_update_sync (kms_device, test_update,
|
meta_kms_device_process_update_sync (kms_device, test_update,
|
||||||
META_KMS_UPDATE_FLAG_TEST_ONLY);
|
META_KMS_UPDATE_FLAG_TEST_ONLY);
|
||||||
meta_kms_update_free (test_update);
|
|
||||||
|
|
||||||
result = meta_kms_feedback_get_result (kms_feedback);
|
result = meta_kms_feedback_get_result (kms_feedback);
|
||||||
return result == META_KMS_FEEDBACK_PASSED;
|
return result == META_KMS_FEEDBACK_PASSED;
|
||||||
|
@ -285,7 +285,6 @@ meta_test_kms_device_mode_set (void)
|
|||||||
feedback = meta_kms_device_process_update_sync (device, update,
|
feedback = meta_kms_device_process_update_sync (device, update,
|
||||||
META_KMS_UPDATE_FLAG_NONE);
|
META_KMS_UPDATE_FLAG_NONE);
|
||||||
meta_kms_feedback_unref (feedback);
|
meta_kms_feedback_unref (feedback);
|
||||||
meta_kms_update_free (update);
|
|
||||||
|
|
||||||
g_assert_nonnull (meta_kms_crtc_get_current_state (crtc));
|
g_assert_nonnull (meta_kms_crtc_get_current_state (crtc));
|
||||||
crtc_state = copy_crtc_state (meta_kms_crtc_get_current_state (crtc));
|
crtc_state = copy_crtc_state (meta_kms_crtc_get_current_state (crtc));
|
||||||
@ -350,7 +349,6 @@ meta_test_kms_device_power_save (void)
|
|||||||
feedback = meta_kms_device_process_update_sync (device, update,
|
feedback = meta_kms_device_process_update_sync (device, update,
|
||||||
META_KMS_UPDATE_FLAG_NONE);
|
META_KMS_UPDATE_FLAG_NONE);
|
||||||
meta_kms_feedback_unref (feedback);
|
meta_kms_feedback_unref (feedback);
|
||||||
meta_kms_update_free (update);
|
|
||||||
|
|
||||||
g_assert_true (meta_kms_crtc_is_active (crtc));
|
g_assert_true (meta_kms_crtc_is_active (crtc));
|
||||||
|
|
||||||
@ -388,7 +386,6 @@ meta_test_kms_device_power_save (void)
|
|||||||
feedback = meta_kms_device_process_update_sync (device, update,
|
feedback = meta_kms_device_process_update_sync (device, update,
|
||||||
META_KMS_UPDATE_FLAG_NONE);
|
META_KMS_UPDATE_FLAG_NONE);
|
||||||
meta_kms_feedback_unref (feedback);
|
meta_kms_feedback_unref (feedback);
|
||||||
meta_kms_update_free (update);
|
|
||||||
|
|
||||||
g_assert_true (meta_kms_crtc_is_active (crtc));
|
g_assert_true (meta_kms_crtc_is_active (crtc));
|
||||||
connector_state = meta_kms_connector_get_current_state (connector);
|
connector_state = meta_kms_connector_get_current_state (connector);
|
||||||
|
@ -358,7 +358,6 @@ meta_test_kms_update_page_flip (void)
|
|||||||
meta_kms_device_process_update_sync (device, update,
|
meta_kms_device_process_update_sync (device, update,
|
||||||
META_KMS_UPDATE_FLAG_NONE);
|
META_KMS_UPDATE_FLAG_NONE);
|
||||||
meta_kms_feedback_unref (feedback);
|
meta_kms_feedback_unref (feedback);
|
||||||
meta_kms_update_free (update);
|
|
||||||
|
|
||||||
g_main_loop_run (data.loop);
|
g_main_loop_run (data.loop);
|
||||||
g_assert_cmpint (data.state, ==, DESTROYED);
|
g_assert_cmpint (data.state, ==, DESTROYED);
|
||||||
@ -383,7 +382,6 @@ meta_test_kms_update_page_flip (void)
|
|||||||
meta_kms_device_process_update_sync (device, update,
|
meta_kms_device_process_update_sync (device, update,
|
||||||
META_KMS_UPDATE_FLAG_NONE);
|
META_KMS_UPDATE_FLAG_NONE);
|
||||||
meta_kms_feedback_unref (feedback);
|
meta_kms_feedback_unref (feedback);
|
||||||
meta_kms_update_free (update);
|
|
||||||
|
|
||||||
g_main_loop_run (data.loop);
|
g_main_loop_run (data.loop);
|
||||||
g_assert_cmpint (data.state, ==, DESTROYED);
|
g_assert_cmpint (data.state, ==, DESTROYED);
|
||||||
|
Loading…
Reference in New Issue
Block a user