[mutter] tests/stage-view: Test timeline updates clock when parent moves



commit 9581e9e31bdec1b1f816a16ef23398baedf2183b
Author: Jonas Ådahl <jadahl gmail com>
Date:   Wed Aug 12 19:32:54 2020 +0200

    tests/stage-view: Test timeline updates clock when parent moves
    
    Test that if a timeline got its frame clock from a parent of the
    associated actor, if that actor moves across the stage so that the stage
    views changes and thus the would be picked frame clock too, this is
    noticed by the timeline so that it also changes to the correct frame
    clock.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1404

 src/tests/stage-view-tests.c | 77 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
---
diff --git a/src/tests/stage-view-tests.c b/src/tests/stage-view-tests.c
index cff212d4ff..163d677ac8 100644
--- a/src/tests/stage-view-tests.c
+++ b/src/tests/stage-view-tests.c
@@ -898,6 +898,81 @@ meta_test_actor_stage_views_parent_views_rebuilt (void)
   clutter_actor_destroy (container);
 }
 
+static void
+meta_test_actor_stage_views_parent_views_changed (void)
+{
+  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *monitor_manager =
+    meta_backend_get_monitor_manager (backend);
+  MetaMonitorManagerTest *monitor_manager_test =
+    META_MONITOR_MANAGER_TEST (monitor_manager);
+  MonitorTestCaseSetup frame_clock_test_setup;
+  MetaMonitorTestSetup *test_setup;
+  ClutterActor *stage, *container, *test_actor;
+  GList *stage_views;
+  ClutterTimeline *timeline;
+  ClutterFrameClock *timeline_frame_clock;
+  ClutterFrameClock *first_view_frame_clock;
+  ClutterFrameClock *second_view_frame_clock;
+
+  stage = meta_backend_get_stage (backend);
+
+  frame_clock_test_setup = initial_test_case_setup;
+  test_setup = create_monitor_test_setup (&frame_clock_test_setup,
+                                          MONITOR_TEST_FLAG_NO_STORED);
+  meta_monitor_manager_test_emulate_hotplug (monitor_manager_test, test_setup);
+
+  stage_views = clutter_stage_peek_stage_views (CLUTTER_STAGE (stage));
+  g_assert_cmpint (g_list_length (stage_views), ==, 2);
+
+  container = clutter_actor_new ();
+  clutter_actor_set_size (container, 100, 100);
+  clutter_actor_set_position (container, 0, 0);
+  clutter_actor_add_child (stage, container);
+
+  test_actor = clutter_actor_new ();
+  clutter_actor_set_size (test_actor, 0, 0);
+  clutter_actor_add_child (container, test_actor);
+
+  stage_views = clutter_stage_peek_stage_views (CLUTTER_STAGE (stage));
+  g_assert_cmpint (g_list_length (stage_views), ==, 2);
+  clutter_actor_show (stage);
+  wait_for_paint (stage);
+  stage_views = clutter_stage_peek_stage_views (CLUTTER_STAGE (stage));
+  g_assert_cmpint (g_list_length (stage_views), ==, 2);
+
+  is_on_stage_views (test_actor, 0);
+  is_on_stage_views (container, 1, stage_views->data);
+  is_on_stage_views (stage, 2,
+                     stage_views->data,
+                     stage_views->next->data);
+
+  timeline = clutter_timeline_new_for_actor (test_actor, 100);
+  clutter_timeline_start (timeline);
+
+  first_view_frame_clock =
+    clutter_stage_view_get_frame_clock (stage_views->data);
+  second_view_frame_clock =
+    clutter_stage_view_get_frame_clock (stage_views->next->data);
+  g_assert_nonnull (first_view_frame_clock);
+  g_assert_nonnull (second_view_frame_clock);
+
+  timeline_frame_clock = clutter_timeline_get_frame_clock (timeline);
+
+  g_assert_nonnull (timeline_frame_clock);
+  g_assert (timeline_frame_clock == first_view_frame_clock);
+
+  clutter_actor_set_x (container, 1200);
+  wait_for_paint (stage);
+
+  timeline_frame_clock = clutter_timeline_get_frame_clock (timeline);
+  g_assert_nonnull (timeline_frame_clock);
+  g_assert (timeline_frame_clock == second_view_frame_clock);
+
+  clutter_actor_destroy (test_actor);
+  clutter_actor_destroy (container);
+}
+
 static void
 init_tests (int argc, char **argv)
 {
@@ -921,6 +996,8 @@ init_tests (int argc, char **argv)
                    meta_test_actor_stage_views_timeline);
   g_test_add_func ("/stage-views/actor-stage-views-parent-rebuilt",
                    meta_test_actor_stage_views_parent_views_rebuilt);
+  g_test_add_func ("/stage-views/actor-stage-views-parent-changed",
+                   meta_test_actor_stage_views_parent_views_changed);
 }
 
 int


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]