diff options
author | Robert Mader <robert.mader@posteo.de> | 2020-11-23 01:32:32 +0100 |
---|---|---|
committer | Robert Mader <robert.mader@posteo.de> | 2020-11-23 14:49:42 +0100 |
commit | 3b7137cb3595ebf78491966f6ee1037ba9e9b6e1 (patch) | |
tree | 6e02ee50f2a4bff2851fb7a39eef2d3260f5cddd | |
parent | 27131198c702d07b43e8bba2d1bf15ffef489ade (diff) | |
download | mutter-3b7137cb3595ebf78491966f6ee1037ba9e9b6e1.tar.gz |
surface-actor-wayland: Optimize get_current_primary_view for single view
In case we only have a single view (or there's only one view left to
check and the actor is visible on previous views) we can take a short-
cut, saving a region allocation and some calculations.
While on it, declare float numbers in '.f' style to make them more
recognizable.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1596>
-rw-r--r-- | src/compositor/meta-surface-actor-wayland.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/compositor/meta-surface-actor-wayland.c b/src/compositor/meta-surface-actor-wayland.c index 08b4f79f7..eba68fe49 100644 --- a/src/compositor/meta-surface-actor-wayland.c +++ b/src/compositor/meta-surface-actor-wayland.c @@ -88,15 +88,15 @@ meta_surface_actor_wayland_get_current_primary_view (MetaSurfaceActor *actor, ClutterStage *stage) { ClutterStageView *current_primary_view = NULL; - float highest_refresh_rate = 0; - float biggest_unobscurred_fraction = 0; + float highest_refresh_rate = 0.f; + float biggest_unobscurred_fraction = 0.f; GList *l; for (l = clutter_stage_peek_stage_views (stage); l; l = l->next) { ClutterStageView *stage_view = l->data; float refresh_rate; - float unobscurred_fraction = 1.0; + float unobscurred_fraction = 1.f; if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (actor))) { @@ -106,10 +106,18 @@ meta_surface_actor_wayland_get_current_primary_view (MetaSurfaceActor *actor, } else { - if (meta_surface_actor_is_obscured_on_stage_view (actor, - stage_view, - &unobscurred_fraction)) - continue; + if (l->next || biggest_unobscurred_fraction > 0.f) + { + if (meta_surface_actor_is_obscured_on_stage_view (actor, + stage_view, + &unobscurred_fraction)) + continue; + } + else + { + if (meta_surface_actor_is_obscured (actor)) + continue; + } } refresh_rate = clutter_stage_view_get_refresh_rate (stage_view); |