summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO4
-rw-r--r--724.diff149
-rw-r--r--PKGBUILD15
3 files changed, 164 insertions, 4 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 5f8397d8ddae..a57f4183f09b 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = mutter-performance
pkgdesc = A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync
pkgver = 3.32.2+43+gb7f158811
- pkgrel = 15
+ pkgrel = 16
url = https://gitlab.gnome.org/GNOME/mutter
arch = x86_64
groups = gnome
@@ -36,8 +36,10 @@ pkgbase = mutter-performance
options = !strip
source = mutter-performance::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=b7f158811934d8e4d9dd0be28ad8e1746ceac46c
source = 429.diff
+ source = 724.diff
sha256sums = SKIP
sha256sums = c22bc32ab8a29e3da986f386d14a8376f1985c051328ca6786571b4b67ec9e48
+ sha256sums = 3bfd673cbae598f6482124525d342b4323a1395a0f72d6532bbcf34f66773213
pkgname = mutter-performance
diff --git a/724.diff b/724.diff
new file mode 100644
index 000000000000..dbe0ed557032
--- /dev/null
+++ b/724.diff
@@ -0,0 +1,149 @@
+diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
+index 2812b5fac..1a583ba2b 100644
+--- a/clutter/clutter/clutter-stage-private.h
++++ b/clutter/clutter/clutter-stage-private.h
+@@ -83,6 +83,7 @@ void _clutter_stage_push_pick_clip (ClutterStage *stage,
+ const ClutterPoint vertices[4]);
+
+ void _clutter_stage_pop_pick_clip (ClutterStage *stage);
++int64_t _clutter_stage_get_next_presentation_time (ClutterStage *stage);
+
+ ClutterActor *_clutter_stage_do_pick (ClutterStage *stage,
+ gint x,
+diff --git a/clutter/clutter/clutter-stage-window.c b/clutter/clutter/clutter-stage-window.c
+index 5da7c50f5..312ce0c3e 100644
+--- a/clutter/clutter/clutter-stage-window.c
++++ b/clutter/clutter/clutter-stage-window.c
+@@ -178,6 +178,22 @@ _clutter_stage_window_clear_update_time (ClutterStageWindow *window)
+ iface->clear_update_time (window);
+ }
+
++int64_t
++_clutter_stage_window_get_next_presentation_time (ClutterStageWindow *window)
++{
++ ClutterStageWindowInterface *iface;
++
++ g_return_val_if_fail (CLUTTER_IS_STAGE_WINDOW (window), 0);
++
++ iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
++
++ /* If not implemented then just revert to the old behaviour... */
++ if (iface->get_next_presentation_time == NULL)
++ return _clutter_stage_window_get_update_time (window);
++
++ return iface->get_next_presentation_time (window);
++}
++
+ void
+ _clutter_stage_window_add_redraw_clip (ClutterStageWindow *window,
+ cairo_rectangle_int_t *stage_clip)
+diff --git a/clutter/clutter/clutter-stage-window.h b/clutter/clutter/clutter-stage-window.h
+index f0aa3d3e9..6fd5200d9 100644
+--- a/clutter/clutter/clutter-stage-window.h
++++ b/clutter/clutter/clutter-stage-window.h
+@@ -69,6 +69,8 @@ struct _ClutterStageWindowInterface
+ GList *(* get_views) (ClutterStageWindow *stage_window);
+ int64_t (* get_frame_counter) (ClutterStageWindow *stage_window);
+ void (* finish_frame) (ClutterStageWindow *stage_window);
++
++ int64_t (* get_next_presentation_time) (ClutterStageWindow *stage_window);
+ };
+
+ ClutterActor * _clutter_stage_window_get_wrapper (ClutterStageWindow *window);
+@@ -115,6 +117,8 @@ void _clutter_stage_window_finish_frame (ClutterStageWin
+
+ int64_t _clutter_stage_window_get_frame_counter (ClutterStageWindow *window);
+
++int64_t _clutter_stage_window_get_next_presentation_time (ClutterStageWindow *window);
++
+ G_END_DECLS
+
+ #endif /* __CLUTTER_STAGE_WINDOW_H__ */
+diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
+index 982c1da6c..2e4c4d674 100644
+--- a/clutter/clutter/clutter-stage.c
++++ b/clutter/clutter/clutter-stage.c
+@@ -3908,6 +3908,21 @@ _clutter_stage_clear_update_time (ClutterStage *stage)
+ _clutter_stage_window_clear_update_time (stage_window);
+ }
+
++int64_t
++_clutter_stage_get_next_presentation_time (ClutterStage *stage)
++{
++ ClutterStageWindow *stage_window;
++
++ if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
++ return 0;
++
++ stage_window = _clutter_stage_get_window (stage);
++ if (stage_window == NULL)
++ return 0;
++
++ return _clutter_stage_window_get_next_presentation_time (stage_window);
++}
++
+ /**
+ * clutter_stage_set_no_clear_hint:
+ * @stage: a #ClutterStage
+diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c
+index fe7444d7e..89ace1983 100644
+--- a/clutter/clutter/cogl/clutter-stage-cogl.c
++++ b/clutter/clutter/cogl/clutter-stage-cogl.c
+@@ -217,7 +217,12 @@ clutter_stage_cogl_schedule_update (ClutterStageWindow *stage_window,
+ stage_cogl->update_time = next_presentation_time - max_render_time_allowed;
+
+ if (stage_cogl->update_time == stage_cogl->last_update_time)
+- stage_cogl->update_time = stage_cogl->last_update_time + refresh_interval;
++ {
++ stage_cogl->update_time += refresh_interval;
++ next_presentation_time += refresh_interval;
++ }
++
++ stage_cogl->next_presentation_time = next_presentation_time;
+ }
+
+ static gint64
+@@ -235,6 +240,15 @@ clutter_stage_cogl_clear_update_time (ClutterStageWindow *stage_window)
+
+ stage_cogl->last_update_time = stage_cogl->update_time;
+ stage_cogl->update_time = -1;
++ stage_cogl->next_presentation_time = -1;
++}
++
++static int64_t
++clutter_stage_cogl_get_next_presentation_time (ClutterStageWindow *stage_window)
++{
++ ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
++
++ return stage_cogl->next_presentation_time;
+ }
+
+ static ClutterActor *
+@@ -975,6 +989,7 @@ clutter_stage_window_iface_init (ClutterStageWindowInterface *iface)
+ iface->schedule_update = clutter_stage_cogl_schedule_update;
+ iface->get_update_time = clutter_stage_cogl_get_update_time;
+ iface->clear_update_time = clutter_stage_cogl_clear_update_time;
++ iface->get_next_presentation_time = clutter_stage_cogl_get_next_presentation_time;
+ iface->add_redraw_clip = clutter_stage_cogl_add_redraw_clip;
+ iface->has_redraw_clips = clutter_stage_cogl_has_redraw_clips;
+ iface->ignoring_redraw_clips = clutter_stage_cogl_ignoring_redraw_clips;
+@@ -1024,6 +1039,7 @@ _clutter_stage_cogl_init (ClutterStageCogl *stage)
+ stage->refresh_rate = 0.0;
+
+ stage->update_time = -1;
++ stage->next_presentation_time = -1;
+ }
+
+ static void
+diff --git a/clutter/clutter/cogl/clutter-stage-cogl.h b/clutter/clutter/cogl/clutter-stage-cogl.h
+index 53d0267de..1d83d5525 100644
+--- a/clutter/clutter/cogl/clutter-stage-cogl.h
++++ b/clutter/clutter/cogl/clutter-stage-cogl.h
+@@ -53,6 +53,7 @@ struct _ClutterStageCogl
+ gint64 last_presentation_time;
+ gint64 update_time;
+ int64_t last_update_time;
++ int64_t next_presentation_time;
+
+ /* We only enable clipped redraws after 2 frames, since we've seen
+ * a lot of drivers can struggle to get going and may output some
diff --git a/PKGBUILD b/PKGBUILD
index e978e218c383..d91f5c536412 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -7,7 +7,7 @@
pkgname=mutter-performance
pkgver=3.32.2+43+gb7f158811
-pkgrel=15
+pkgrel=16
pkgdesc="A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync"
url="https://gitlab.gnome.org/GNOME/mutter"
arch=(x86_64)
@@ -24,9 +24,11 @@ replaces=(mutter-781835-workaround)
groups=(gnome)
_commit=b7f158811934d8e4d9dd0be28ad8e1746ceac46c # tags/3.32.2^43
source=("$pkgname::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit"
- 429.diff)
+ 429.diff
+ 724.diff)
sha256sums=('SKIP'
- 'c22bc32ab8a29e3da986f386d14a8376f1985c051328ca6786571b4b67ec9e48')
+ 'c22bc32ab8a29e3da986f386d14a8376f1985c051328ca6786571b4b67ec9e48'
+ '3bfd673cbae598f6482124525d342b4323a1395a0f72d6532bbcf34f66773213')
pkgver() {
cd $pkgname
@@ -281,6 +283,13 @@ prepare() {
# Status: 4
# Comment:
git cherry-pick -n c4a9117e^..9d65eab5 -Xours
+
+ # Title: Sync timelines to hardware vsync
+ # URL: https://gitlab.gnome.org/GNOME/mutter/merge_requests/724
+ # Type: 1
+ # Status: 2
+ # Comment:
+ patch -Np1 < ../724.diff
}
build() {