From: Andy Wingo Date: Thu, 24 Feb 2005 15:36:22 +0000 (+0000) Subject: tests/: New test, sets up N elements, at each level teeing into M streams per element... X-Git-Tag: RELEASE-0_9_2~612 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8075c3bcd27fbd02db11cd04929a154549d0841d;p=platform%2Fupstream%2Fgstreamer.git tests/: New test, sets up N elements, at each level teeing into M streams per element. Eeeenteresting. Original commit message from CVS: 2005-02-24 Andy Wingo * tests/Makefile.am: * tests/complexity.c: New test, sets up N elements, at each level teeing into M streams per element. Eeeenteresting. --- diff --git a/ChangeLog b/ChangeLog index 23aa751..28395cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-02-24 Andy Wingo + * tests/Makefile.am: + * tests/complexity.c: New test, sets up N elements, at each level + teeing into M streams per element. Eeeenteresting. + * tests/mass_elements.gnuplot: gnuplot file for the mass_elements benchmark. Run as gnuplot mass_elements.gnuplot > foo.ps, after running bench-mass_elements.scm. diff --git a/tests/Makefile.am b/tests/Makefile.am index 4cf093c..8ad8cb8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -8,7 +8,7 @@ LAT = lat endif -noinst_PROGRAMS = $(LAT) spidey_bench mass_elements +noinst_PROGRAMS = $(LAT) spidey_bench mass_elements complexity AM_CFLAGS = $(GST_OBJ_CFLAGS) LIBS = $(GST_OBJ_LIBS) diff --git a/tests/benchmarks/complexity.c b/tests/benchmarks/complexity.c new file mode 100644 index 0000000..44937aa --- /dev/null +++ b/tests/benchmarks/complexity.c @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2004 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include + +#define BUFFER_COUNT (1000) +#define SRC_ELEMENT "fakesrc" +#define SINK_ELEMENT "fakesink" + + +static GstClockTime +gst_get_current_time (void) +{ + GTimeVal tv; + + g_get_current_time (&tv); + return GST_TIMEVAL_TO_TIME (tv); +} + +gint +main (gint argc, gchar * argv[]) +{ + GstElement *pipeline, *src, *e; + GSList *saved_src_list, *src_list, *new_src_list; + guint complexity_order, n_elements, i, j, max_this_level; + GstClockTime start, end; + gboolean all_srcs_linked; + + gst_init (&argc, &argv); + + if (argc != 3) { + g_print ("usage: %s COMPLEXITY_ORDER N_ELEMENTS\n", argv[0]); + return 1; + } + + complexity_order = atoi (argv[1]); + n_elements = atoi (argv[2]); + + start = gst_get_current_time (); + + pipeline = gst_element_factory_make ("pipeline", NULL); + g_assert (pipeline); + + e = gst_element_factory_make ("fakesrc", NULL); + g_object_set (e, "num-buffers", BUFFER_COUNT, NULL); + gst_bin_add (GST_BIN (pipeline), e); + src_list = saved_src_list = g_slist_append (NULL, e); + + new_src_list = NULL; + + max_this_level = 1; + j = 0; + i = 0; + all_srcs_linked = FALSE; + for (i = 0, j = 0; i < n_elements; i++, j++) { + if (j >= max_this_level) { + g_slist_free (saved_src_list); + saved_src_list = new_src_list; + new_src_list = NULL; + j = 0; + all_srcs_linked = FALSE; + max_this_level *= complexity_order; + } + + if (!src_list) { + if (j) + all_srcs_linked = TRUE; + src_list = saved_src_list; + } + + src = (GstElement *) src_list->data; + src_list = src_list->next; + + e = gst_element_factory_make ("tee", NULL); + new_src_list = g_slist_prepend (new_src_list, e); + + gst_bin_add (GST_BIN (pipeline), e); + if (gst_element_link (src, e) != GST_PAD_LINK_OK) + g_assert_not_reached (); + } + + if (all_srcs_linked) + src_list = new_src_list; + else + src_list = g_slist_concat (new_src_list, g_slist_copy (src_list)); + + g_slist_free (saved_src_list); + saved_src_list = src_list; + while (src_list) { + src = (GstElement *) src_list->data; + src_list = src_list->next; + + e = gst_element_factory_make ("fakesink", NULL); + gst_bin_add (GST_BIN (pipeline), e); + if (gst_element_link (src, e) != GST_PAD_LINK_OK) + g_assert_not_reached (); + } + g_slist_free (saved_src_list); + + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - creating and linking %d tee elements\n", + GST_TIME_ARGS (end - start), i); + + start = gst_get_current_time (); + if (gst_element_set_state (pipeline, GST_STATE_PLAYING) != GST_STATE_SUCCESS) + g_assert_not_reached (); + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - setting pipeline to playing\n", + GST_TIME_ARGS (end - start)); + + start = gst_get_current_time (); + while (gst_bin_iterate (GST_BIN (pipeline))); + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - putting %u buffers through\n", + GST_TIME_ARGS (end - start), BUFFER_COUNT); + + start = gst_get_current_time (); + g_object_unref (pipeline); + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - unreffing pipeline\n", + GST_TIME_ARGS (end - start)); + + return 0; +} diff --git a/tests/complexity.c b/tests/complexity.c new file mode 100644 index 0000000..44937aa --- /dev/null +++ b/tests/complexity.c @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2004 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include + +#define BUFFER_COUNT (1000) +#define SRC_ELEMENT "fakesrc" +#define SINK_ELEMENT "fakesink" + + +static GstClockTime +gst_get_current_time (void) +{ + GTimeVal tv; + + g_get_current_time (&tv); + return GST_TIMEVAL_TO_TIME (tv); +} + +gint +main (gint argc, gchar * argv[]) +{ + GstElement *pipeline, *src, *e; + GSList *saved_src_list, *src_list, *new_src_list; + guint complexity_order, n_elements, i, j, max_this_level; + GstClockTime start, end; + gboolean all_srcs_linked; + + gst_init (&argc, &argv); + + if (argc != 3) { + g_print ("usage: %s COMPLEXITY_ORDER N_ELEMENTS\n", argv[0]); + return 1; + } + + complexity_order = atoi (argv[1]); + n_elements = atoi (argv[2]); + + start = gst_get_current_time (); + + pipeline = gst_element_factory_make ("pipeline", NULL); + g_assert (pipeline); + + e = gst_element_factory_make ("fakesrc", NULL); + g_object_set (e, "num-buffers", BUFFER_COUNT, NULL); + gst_bin_add (GST_BIN (pipeline), e); + src_list = saved_src_list = g_slist_append (NULL, e); + + new_src_list = NULL; + + max_this_level = 1; + j = 0; + i = 0; + all_srcs_linked = FALSE; + for (i = 0, j = 0; i < n_elements; i++, j++) { + if (j >= max_this_level) { + g_slist_free (saved_src_list); + saved_src_list = new_src_list; + new_src_list = NULL; + j = 0; + all_srcs_linked = FALSE; + max_this_level *= complexity_order; + } + + if (!src_list) { + if (j) + all_srcs_linked = TRUE; + src_list = saved_src_list; + } + + src = (GstElement *) src_list->data; + src_list = src_list->next; + + e = gst_element_factory_make ("tee", NULL); + new_src_list = g_slist_prepend (new_src_list, e); + + gst_bin_add (GST_BIN (pipeline), e); + if (gst_element_link (src, e) != GST_PAD_LINK_OK) + g_assert_not_reached (); + } + + if (all_srcs_linked) + src_list = new_src_list; + else + src_list = g_slist_concat (new_src_list, g_slist_copy (src_list)); + + g_slist_free (saved_src_list); + saved_src_list = src_list; + while (src_list) { + src = (GstElement *) src_list->data; + src_list = src_list->next; + + e = gst_element_factory_make ("fakesink", NULL); + gst_bin_add (GST_BIN (pipeline), e); + if (gst_element_link (src, e) != GST_PAD_LINK_OK) + g_assert_not_reached (); + } + g_slist_free (saved_src_list); + + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - creating and linking %d tee elements\n", + GST_TIME_ARGS (end - start), i); + + start = gst_get_current_time (); + if (gst_element_set_state (pipeline, GST_STATE_PLAYING) != GST_STATE_SUCCESS) + g_assert_not_reached (); + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - setting pipeline to playing\n", + GST_TIME_ARGS (end - start)); + + start = gst_get_current_time (); + while (gst_bin_iterate (GST_BIN (pipeline))); + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - putting %u buffers through\n", + GST_TIME_ARGS (end - start), BUFFER_COUNT); + + start = gst_get_current_time (); + g_object_unref (pipeline); + end = gst_get_current_time (); + g_print ("%" GST_TIME_FORMAT " - unreffing pipeline\n", + GST_TIME_ARGS (end - start)); + + return 0; +}