mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 18:11:05 -05:00
kms/impl-device: Only update crtc/connector whose ID has changed
On hotplug events we may get informations about what CRTC or connector changed a property (and the property itself), so in such case let's just ignore the changes to the non-affected CRTCs/connectors, and let's read only the affected one Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1964>
This commit is contained in:
parent
91ed95ab6f
commit
dd0ad3bfb1
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
MetaKmsImplDevice * meta_kms_device_get_impl_device (MetaKmsDevice *device);
|
MetaKmsImplDevice * meta_kms_device_get_impl_device (MetaKmsDevice *device);
|
||||||
|
|
||||||
MetaKmsUpdateChanges meta_kms_device_update_states_in_impl (MetaKmsDevice *device);
|
MetaKmsUpdateChanges meta_kms_device_update_states_in_impl (MetaKmsDevice *device,
|
||||||
|
uint32_t crtc_id,
|
||||||
|
uint32_t connector_id);
|
||||||
|
|
||||||
void meta_kms_device_predict_states_in_impl (MetaKmsDevice *device,
|
void meta_kms_device_predict_states_in_impl (MetaKmsDevice *device,
|
||||||
MetaKmsUpdate *update);
|
MetaKmsUpdate *update);
|
||||||
|
@ -231,7 +231,9 @@ meta_kms_device_get_fallback_modes (MetaKmsDevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
MetaKmsUpdateChanges
|
MetaKmsUpdateChanges
|
||||||
meta_kms_device_update_states_in_impl (MetaKmsDevice *device)
|
meta_kms_device_update_states_in_impl (MetaKmsDevice *device,
|
||||||
|
uint32_t crtc_id,
|
||||||
|
uint32_t connector_id)
|
||||||
{
|
{
|
||||||
MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
|
MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
|
||||||
MetaKmsUpdateChanges changes;
|
MetaKmsUpdateChanges changes;
|
||||||
@ -239,7 +241,8 @@ meta_kms_device_update_states_in_impl (MetaKmsDevice *device)
|
|||||||
meta_assert_in_kms_impl (device->kms);
|
meta_assert_in_kms_impl (device->kms);
|
||||||
meta_assert_is_waiting_for_kms_impl_task (device->kms);
|
meta_assert_is_waiting_for_kms_impl_task (device->kms);
|
||||||
|
|
||||||
changes = meta_kms_impl_device_update_states (impl_device);
|
changes = meta_kms_impl_device_update_states (impl_device, crtc_id,
|
||||||
|
connector_id);
|
||||||
|
|
||||||
if (changes == META_KMS_UPDATE_CHANGE_NONE)
|
if (changes == META_KMS_UPDATE_CHANGE_NONE)
|
||||||
return changes;
|
return changes;
|
||||||
|
@ -702,7 +702,9 @@ clear_latched_fd_hold (MetaKmsImplDevice *impl_device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
MetaKmsUpdateChanges
|
MetaKmsUpdateChanges
|
||||||
meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
|
meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device,
|
||||||
|
uint32_t crtc_id,
|
||||||
|
uint32_t connector_id)
|
||||||
{
|
{
|
||||||
MetaKmsImplDevicePrivate *priv =
|
MetaKmsImplDevicePrivate *priv =
|
||||||
meta_kms_impl_device_get_instance_private (impl_device);
|
meta_kms_impl_device_get_instance_private (impl_device);
|
||||||
@ -736,11 +738,26 @@ meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
|
|||||||
changes = update_connectors (impl_device, drm_resources);
|
changes = update_connectors (impl_device, drm_resources);
|
||||||
|
|
||||||
for (l = priv->crtcs; l; l = l->next)
|
for (l = priv->crtcs; l; l = l->next)
|
||||||
changes |= meta_kms_crtc_update_state (META_KMS_CRTC (l->data));
|
{
|
||||||
|
MetaKmsCrtc *crtc = META_KMS_CRTC (l->data);
|
||||||
|
|
||||||
|
if (crtc_id > 0 &&
|
||||||
|
meta_kms_crtc_get_id (crtc) != crtc_id)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
changes |= meta_kms_crtc_update_state (crtc);
|
||||||
|
}
|
||||||
|
|
||||||
for (l = priv->connectors; l; l = l->next)
|
for (l = priv->connectors; l; l = l->next)
|
||||||
changes |= meta_kms_connector_update_state (META_KMS_CONNECTOR (l->data),
|
{
|
||||||
drm_resources);
|
MetaKmsConnector *connector = META_KMS_CONNECTOR (l->data);
|
||||||
|
|
||||||
|
if (connector_id > 0 &&
|
||||||
|
meta_kms_connector_get_id (connector) != connector_id)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
changes |= meta_kms_connector_update_state (connector, drm_resources);
|
||||||
|
}
|
||||||
|
|
||||||
drmModeFreeResources (drm_resources);
|
drmModeFreeResources (drm_resources);
|
||||||
|
|
||||||
|
@ -135,7 +135,9 @@ void meta_kms_impl_device_hold_fd (MetaKmsImplDevice *impl_device);
|
|||||||
|
|
||||||
void meta_kms_impl_device_unhold_fd (MetaKmsImplDevice *impl_device);
|
void meta_kms_impl_device_unhold_fd (MetaKmsImplDevice *impl_device);
|
||||||
|
|
||||||
MetaKmsUpdateChanges meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device);
|
MetaKmsUpdateChanges meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device,
|
||||||
|
uint32_t crtc_id,
|
||||||
|
uint32_t connector_id);
|
||||||
|
|
||||||
void meta_kms_impl_device_predict_states (MetaKmsImplDevice *impl_device,
|
void meta_kms_impl_device_predict_states (MetaKmsImplDevice *impl_device,
|
||||||
MetaKmsUpdate *update);
|
MetaKmsUpdate *update);
|
||||||
|
@ -605,7 +605,10 @@ meta_kms_update_states_in_impl (MetaKms *kms,
|
|||||||
update_data->connector_id))
|
update_data->connector_id))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
changes |= meta_kms_device_update_states_in_impl (kms_device);
|
changes |=
|
||||||
|
meta_kms_device_update_states_in_impl (kms_device,
|
||||||
|
update_data->crtc_id,
|
||||||
|
update_data->connector_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return changes;
|
return changes;
|
||||||
|
Loading…
Reference in New Issue
Block a user