mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
surface-actor: Do not copy empty clip/unobscured regions
Clip and unobscured regions stricly shrink during culling. If they are already empty, simply reference the empty region to reduce allocations. https://gitlab.gnome.org/GNOME/mutter/merge_requests/1082
This commit is contained in:
parent
6831f2edb4
commit
c979cd95aa
@ -103,21 +103,28 @@ set_unobscured_region (MetaSurfaceActor *surface_actor,
|
|||||||
g_clear_pointer (&priv->unobscured_region, cairo_region_destroy);
|
g_clear_pointer (&priv->unobscured_region, cairo_region_destroy);
|
||||||
if (unobscured_region)
|
if (unobscured_region)
|
||||||
{
|
{
|
||||||
cairo_rectangle_int_t bounds = { 0, };
|
if (cairo_region_is_empty (unobscured_region))
|
||||||
float width, height;
|
{
|
||||||
|
priv->unobscured_region = cairo_region_reference (unobscured_region);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cairo_rectangle_int_t bounds = { 0, };
|
||||||
|
float width, height;
|
||||||
|
|
||||||
clutter_content_get_preferred_size (CLUTTER_CONTENT (priv->texture),
|
clutter_content_get_preferred_size (CLUTTER_CONTENT (priv->texture),
|
||||||
&width,
|
&width,
|
||||||
&height);
|
&height);
|
||||||
bounds = (cairo_rectangle_int_t) {
|
bounds = (cairo_rectangle_int_t) {
|
||||||
.width = width,
|
.width = width,
|
||||||
.height = height,
|
.height = height,
|
||||||
};
|
};
|
||||||
|
|
||||||
priv->unobscured_region =
|
priv->unobscured_region =
|
||||||
get_scaled_region (surface_actor, unobscured_region);
|
get_scaled_region (surface_actor, unobscured_region);
|
||||||
|
|
||||||
cairo_region_intersect_rectangle (priv->unobscured_region, &bounds);
|
cairo_region_intersect_rectangle (priv->unobscured_region, &bounds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +137,12 @@ set_clip_region (MetaSurfaceActor *surface_actor,
|
|||||||
|
|
||||||
g_clear_pointer (&priv->clip_region, cairo_region_destroy);
|
g_clear_pointer (&priv->clip_region, cairo_region_destroy);
|
||||||
if (clip_region)
|
if (clip_region)
|
||||||
priv->clip_region = get_scaled_region (surface_actor, clip_region);
|
{
|
||||||
|
if (cairo_region_is_empty (clip_region))
|
||||||
|
priv->clip_region = cairo_region_reference (clip_region);
|
||||||
|
else
|
||||||
|
priv->clip_region = get_scaled_region (surface_actor, clip_region);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user