[mutter/wip/carlosg/unassorted-perf-fixes: 298/300] compositor: Avoid changing pipeline/source if shadow is not being painted
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/unassorted-perf-fixes: 298/300] compositor: Avoid changing pipeline/source if shadow is not being painted
- Date: Wed, 5 Dec 2018 19:25:07 +0000 (UTC)
commit f6c7dd696a81dba9dca83e36946421ae8a163823
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun May 7 03:00:10 2017 +0200
compositor: Avoid changing pipeline/source if shadow is not being painted
Avoids some context invalidations in cogl.
https://bugzilla.gnome.org/show_bug.cgi?id=782344
src/compositor/meta-shadow-factory.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/src/compositor/meta-shadow-factory.c b/src/compositor/meta-shadow-factory.c
index ab358dd6d..ed3cc1795 100644
--- a/src/compositor/meta-shadow-factory.c
+++ b/src/compositor/meta-shadow-factory.c
@@ -221,9 +221,7 @@ meta_shadow_paint (MetaShadow *shadow,
int dest_x[4];
int dest_y[4];
int n_x, n_y;
-
- cogl_pipeline_set_color4ub (shadow->pipeline,
- opacity, opacity, opacity, opacity);
+ gboolean source_updated = FALSE;
if (shadow->scale_width)
{
@@ -299,6 +297,17 @@ meta_shadow_paint (MetaShadow *shadow,
else
overlap = CAIRO_REGION_OVERLAP_IN;
+ if (overlap == CAIRO_REGION_OVERLAP_OUT)
+ continue;
+
+ if (!source_updated)
+ {
+ cogl_pipeline_set_color4ub (shadow->pipeline,
+ opacity, opacity, opacity, opacity);
+ cogl_set_source (shadow->pipeline);
+ source_updated = TRUE;
+ }
+
/* There's quite a bit of overhead from allocating a new
* region in order to find an exact intersection and
* generating more geometry - we make the assumption that
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]