diff options
author | Florian Müllner <fmuellner@gnome.org> | 2021-07-19 00:01:24 +0200 |
---|---|---|
committer | Florian Müllner <fmuellner@gnome.org> | 2021-07-19 00:03:33 +0200 |
commit | 952865a86ebb08f97263cfdbfe38b7adc20e4560 (patch) | |
tree | 1f9347628656210b03ceee4fae83beb21491d1eb /src/tests/clutter/conform/timeline.c | |
parent | 7862f143937e43dca0513af3a24dabfb4d0db4fc (diff) | |
download | mutter-master.tar.gz |
Replace contents with redirect messagemaster
The default development branch is now `main`. This commit only exists
on `master` to point people towards that.
See https://gitlab.gnome.org/GNOME/glib/-/issues/2348 for details.
Diffstat (limited to 'src/tests/clutter/conform/timeline.c')
-rw-r--r-- | src/tests/clutter/conform/timeline.c | 365 |
1 files changed, 0 insertions, 365 deletions
diff --git a/src/tests/clutter/conform/timeline.c b/src/tests/clutter/conform/timeline.c deleted file mode 100644 index 6bd8f32bb..000000000 --- a/src/tests/clutter/conform/timeline.c +++ /dev/null @@ -1,365 +0,0 @@ -#define CLUTTER_DISABLE_DEPRECATION_WARNINGS -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <clutter/clutter.h> - -#include "tests/clutter-test-utils.h" - -/* This test runs three timelines at 6 fps with 10 frames. Some of - the timelines have markers. Once the timelines are run it then - checks that all of the frames were hit, all of the markers were hit - and that the completed signal was fired. The timelines are then run - again but this time with a timeout source that introduces a - delay. This should cause some frames to be skipped. The test is run - again but only the markers and the completed signal is checked - for. */ - -#define FRAME_COUNT 10 -#define FPS 6 - -typedef struct _TimelineData TimelineData; - -struct _TimelineData -{ - int timeline_num; - - guint frame_hit_count[FRAME_COUNT + 1]; - GSList *markers_hit; - guint completed_count; -}; - -static void -timeline_data_init (TimelineData *data, int timeline_num) -{ - memset (data, 0, sizeof (TimelineData)); - data->timeline_num = timeline_num; -} - -static void -timeline_data_destroy (TimelineData *data) -{ - g_slist_free_full (data->markers_hit, g_free); -} - -static void -timeline_complete_cb (ClutterTimeline *timeline, - TimelineData *data) -{ - g_printerr ("%i: Completed\n", data->timeline_num); - - data->completed_count++; -} - -static void -timeline_new_frame_cb (ClutterTimeline *timeline, - gint msec, - TimelineData *data) -{ - /* Calculate an approximate frame number from the duration with - rounding */ - int frame_no = ((msec * FRAME_COUNT + (FRAME_COUNT * 1000 / FPS) / 2) - / (FRAME_COUNT * 1000 / FPS)); - - g_printerr ("%i: Doing frame %d, delta = %i\n", - data->timeline_num, frame_no, - clutter_timeline_get_delta (timeline)); - - g_assert (frame_no >= 0 && frame_no <= FRAME_COUNT); - - data->frame_hit_count[frame_no]++; -} - -static void -timeline_marker_reached_cb (ClutterTimeline *timeline, - const gchar *marker_name, - guint frame_num, - TimelineData *data) -{ - g_printerr ("%i: Marker '%s' (%d) reached, delta = %i\n", - data->timeline_num, marker_name, frame_num, - clutter_timeline_get_delta (timeline)); - data->markers_hit = g_slist_prepend (data->markers_hit, - g_strdup (marker_name)); -} - -static gboolean -check_timeline (ClutterTimeline *timeline, - TimelineData *data, - gboolean check_missed_frames) -{ - gchar **markers; - gsize n_markers; - guint *marker_reached_count; - gboolean succeeded = TRUE; - GSList *node; - int i; - int missed_frame_count = 0; - int frame_offset; - - if (clutter_timeline_get_direction (timeline) == CLUTTER_TIMELINE_BACKWARD) - frame_offset = 0; - else - frame_offset = 1; - - markers = clutter_timeline_list_markers (timeline, -1, &n_markers); - marker_reached_count = g_new0 (guint, n_markers); - - for (node = data->markers_hit; node; node = node->next) - { - for (i = 0; i < n_markers; i++) - if (!strcmp (node->data, markers[i])) - break; - - if (i < n_markers) - marker_reached_count[i]++; - else - { - g_printerr ("FAIL: unknown marker '%s' hit for timeline %i\n", - (char *) node->data, data->timeline_num); - succeeded = FALSE; - } - } - - for (i = 0; i < n_markers; i++) - if (marker_reached_count[i] != 1) - { - g_printerr ("FAIL: marker '%s' hit %i times for timeline %i\n", - markers[i], marker_reached_count[i], data->timeline_num); - succeeded = FALSE; - } - - if (check_missed_frames) - { - for (i = 0; i < FRAME_COUNT; i++) - if (data->frame_hit_count[i + frame_offset] < 1) - missed_frame_count++; - - if (missed_frame_count) - { - g_printerr ("FAIL: missed %i frame%s for timeline %i\n", - missed_frame_count, missed_frame_count == 1 ? "" : "s", - data->timeline_num); - succeeded = FALSE; - } - } - - if (data->completed_count != 1) - { - g_printerr ("FAIL: timeline %i completed %i times\n", - data->timeline_num, data->completed_count); - succeeded = FALSE; - } - - g_strfreev (markers); - g_free (marker_reached_count); - - return succeeded; -} - -static gboolean -timeout_cb (gpointer data G_GNUC_UNUSED) -{ - clutter_test_quit (); - - return FALSE; -} - -static gboolean -delay_cb (gpointer data) -{ - /* Waste a bit of time so that it will skip frames */ - g_usleep (G_USEC_PER_SEC * 66 / 1000); - - return TRUE; -} - -static gboolean -add_timeout_idle (gpointer user_data) -{ - clutter_threads_add_timeout (2000, timeout_cb, NULL); - - return G_SOURCE_REMOVE; -} - -static void -timeline_base (void) -{ - ClutterActor *stage; - ClutterTimeline *timeline_1; - TimelineData data_1; - ClutterTimeline *timeline_2; - TimelineData data_2; - ClutterTimeline *timeline_3; - TimelineData data_3; - gchar **markers; - gsize n_markers; - guint delay_tag; - - stage = clutter_test_get_stage (); - - timeline_data_init (&data_1, 1); - timeline_1 = clutter_timeline_new_for_actor (stage, FRAME_COUNT * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_1, "start-marker", - 0 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_1, "foo", 5 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_1, "bar", 5 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_1, "baz", 5 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_1, "near-end-marker", - 9 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_1, "end-marker", - 10 * 1000 / FPS); - markers = clutter_timeline_list_markers (timeline_1, 5 * 1000 / FPS, - &n_markers); - g_assert (markers != NULL); - g_assert (n_markers == 3); - g_strfreev (markers); - - timeline_data_init (&data_2, 2); - timeline_2 = clutter_timeline_new_for_actor (stage, FRAME_COUNT * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_2, "bar", 2 * 1000 / FPS); - markers = clutter_timeline_list_markers (timeline_2, -1, &n_markers); - g_assert (markers != NULL); - g_assert (n_markers == 1); - g_assert (strcmp (markers[0], "bar") == 0); - g_strfreev (markers); - - timeline_data_init (&data_3, 3); - timeline_3 = clutter_timeline_new_for_actor (stage, FRAME_COUNT * 1000 / FPS); - clutter_timeline_set_direction (timeline_3, CLUTTER_TIMELINE_BACKWARD); - clutter_timeline_add_marker_at_time (timeline_3, "start-marker", - FRAME_COUNT * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_3, "foo", 5 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_3, "baz", 8 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_3, "near-end-marker", - 1 * 1000 / FPS); - clutter_timeline_add_marker_at_time (timeline_3, "end-marker", - 0 * 1000 / FPS); - - g_signal_connect (timeline_1, - "marker-reached", G_CALLBACK (timeline_marker_reached_cb), - &data_1); - g_signal_connect (timeline_1, - "new-frame", G_CALLBACK (timeline_new_frame_cb), - &data_1); - g_signal_connect (timeline_1, - "completed", G_CALLBACK (timeline_complete_cb), - &data_1); - - g_signal_connect (timeline_2, - "marker-reached::bar", - G_CALLBACK (timeline_marker_reached_cb), - &data_2); - g_signal_connect (timeline_2, - "new-frame", G_CALLBACK (timeline_new_frame_cb), - &data_2); - g_signal_connect (timeline_2, - "completed", G_CALLBACK (timeline_complete_cb), - &data_2); - - g_signal_connect (timeline_3, - "marker-reached", G_CALLBACK (timeline_marker_reached_cb), - &data_3); - g_signal_connect (timeline_3, - "new-frame", G_CALLBACK (timeline_new_frame_cb), - &data_3); - g_signal_connect (timeline_3, - "completed", G_CALLBACK (timeline_complete_cb), - &data_3); - - clutter_actor_show (stage); - - g_printerr ("Without delay...\n"); - - clutter_timeline_start (timeline_1); - clutter_timeline_start (timeline_2); - clutter_timeline_start (timeline_3); - - g_idle_add (add_timeout_idle, NULL); - - clutter_test_main (); - - g_assert (check_timeline (timeline_1, &data_1, TRUE)); - g_assert (check_timeline (timeline_2, &data_2, TRUE)); - g_assert (check_timeline (timeline_3, &data_3, TRUE)); - - g_printerr ("With delay...\n"); - - timeline_data_destroy (&data_1); - timeline_data_init (&data_1, 1); - timeline_data_destroy (&data_2); - timeline_data_init (&data_2, 2); - timeline_data_destroy (&data_3); - timeline_data_init (&data_3, 3); - - clutter_timeline_start (timeline_1); - clutter_timeline_start (timeline_2); - clutter_timeline_start (timeline_3); - - clutter_threads_add_timeout (2000, timeout_cb, NULL); - delay_tag = clutter_threads_add_timeout (99, delay_cb, NULL); - - clutter_test_main (); - - g_assert (check_timeline (timeline_1, &data_1, FALSE)); - g_assert (check_timeline (timeline_2, &data_2, FALSE)); - g_assert (check_timeline (timeline_3, &data_3, FALSE)); - - g_object_unref (timeline_1); - g_object_unref (timeline_2); - g_object_unref (timeline_3); - - timeline_data_destroy (&data_1); - timeline_data_destroy (&data_2); - timeline_data_destroy (&data_3); - - g_clear_handle_id (&delay_tag, g_source_remove); -} - -static void -timeline_markers_from_script (void) -{ - ClutterScript *script = clutter_script_new (); - ClutterTimeline *timeline; - GError *error = NULL; - gchar *test_file; - gchar **markers; - gsize n_markers; - - test_file = g_test_build_filename (G_TEST_DIST, - "scripts", - "test-script-timeline-markers.json", - NULL); - if (!clutter_script_load_from_file (script, test_file, &error)) - g_printerr ("Error: %s", error->message); - - g_assert_no_error (error); - - timeline = CLUTTER_TIMELINE (clutter_script_get_object (script, "timeline0")); - - g_assert (clutter_timeline_has_marker (timeline, "marker0")); - g_assert (clutter_timeline_has_marker (timeline, "marker1")); - g_assert (!clutter_timeline_has_marker (timeline, "foo")); - g_assert (clutter_timeline_has_marker (timeline, "marker2")); - g_assert (clutter_timeline_has_marker (timeline, "marker3")); - - markers = clutter_timeline_list_markers (timeline, -1, &n_markers); - g_assert_cmpint (n_markers, ==, 4); - g_strfreev (markers); - - markers = clutter_timeline_list_markers (timeline, 500, &n_markers); - g_assert_cmpint (n_markers, ==, 2); - g_assert (markers != NULL); - g_assert (g_strv_contains ((const char * const *) markers, "marker1")); - g_assert (g_strv_contains ((const char * const *) markers, "marker3")); - g_strfreev (markers); - - g_object_unref (script); - - g_free (test_file); -} - -CLUTTER_TEST_SUITE ( - CLUTTER_TEST_UNIT ("/timeline/base", timeline_base); - CLUTTER_TEST_UNIT ("/timeline/markers-from-script", timeline_markers_from_script) -) |