compositor: Use redraw clip region to cull out children

This will avoid repainting too much of the background if the
bounding box turned out to be too large.

https://bugzilla.gnome.org/show_bug.cgi?id=782344
This commit is contained in:
Carlos Garnacho 2017-05-01 13:44:04 +02:00
parent af3475f65f
commit a7ee7559e4

View File

@ -57,7 +57,7 @@ meta_window_group_paint (ClutterActor *actor)
{ {
cairo_region_t *clip_region; cairo_region_t *clip_region;
cairo_region_t *unobscured_region; cairo_region_t *unobscured_region;
cairo_rectangle_int_t visible_rect, clip_rect; cairo_rectangle_int_t visible_rect;
int paint_x_origin, paint_y_origin; int paint_x_origin, paint_y_origin;
int screen_width, screen_height; int screen_width, screen_height;
@ -109,11 +109,7 @@ meta_window_group_paint (ClutterActor *actor)
* sizes, we could intersect this with an accurate union of the * sizes, we could intersect this with an accurate union of the
* monitors to avoid painting shadows that are visible only in the * monitors to avoid painting shadows that are visible only in the
* holes. */ * holes. */
clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage), clip_region = clutter_stage_get_redraw_clip (CLUTTER_STAGE (stage));
&clip_rect);
clip_region = cairo_region_create_rectangle (&clip_rect);
cairo_region_translate (clip_region, -paint_x_origin, -paint_y_origin); cairo_region_translate (clip_region, -paint_x_origin, -paint_y_origin);
meta_cullable_cull_out (META_CULLABLE (window_group), unobscured_region, clip_region); meta_cullable_cull_out (META_CULLABLE (window_group), unobscured_region, clip_region);