diff --git a/tools/Makefile.am b/tools/Makefile.am index bbaaf29..8212076 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -42,6 +42,7 @@ bin_PROGRAMS = jack_load \ jack_wait \ jack_midi_dump \ jack_iodelay \ + jack_load_test \ $(JACK_TRANSPORT) \ $(NETJACK_TOOLS) @@ -117,6 +118,9 @@ jack_transport_LDFLAGS = -lreadline @READLINE_DEPS@ @OS_LDFLAGS@ jack_transport_LDADD = $(top_builddir)/libjack/libjack.la endif +jack_load_test_SOURCES = load_test.c +jack_load_test_LDFLAGS = @OS_LDFLAGS@ +jack_load_test_LDADD = $(top_builddir)/libjack/libjack.la # # General purpose in-process loader/unloader # diff --git a/tools/load_test.c b/tools/load_test.c new file mode 100644 index 0000000..e628341 --- /dev/null +++ b/tools/load_test.c @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +char * my_name; +jack_client_t *client; +unsigned int wait_timeout = 1000; + +void +show_version (void) +{ + fprintf (stderr, "%s: JACK Audio Connection Kit version " VERSION "\n", + my_name); +} + +void +show_usage (void) +{ + show_version (); + fprintf (stderr, "\nUsage: %s [options]\n", my_name); + fprintf (stderr, "this is a test client, which just sleeps in its process_cb to simulate cpu load\n"); + fprintf (stderr, "options:\n"); + fprintf (stderr, " -t, --timeout Wait timeout in seconds\n"); + fprintf (stderr, " -h, --help Display this help message\n"); + fprintf (stderr, " --version Output version information and exit\n\n"); + fprintf (stderr, "For more information see http://jackaudio.org/\n"); +} + +void jack_shutdown(void *arg) +{ + fprintf(stderr, "JACK shut down, exiting ...\n"); + exit(1); +} + +void signal_handler(int sig) +{ + jack_client_close(client); + fprintf(stderr, "signal received, exiting ...\n"); + exit(0); +} + +void silent_function( const char *ignore ) +{ +} + +int +process_cb (jack_nframes_t nframes, void *arg) +{ + jack_time_t now = jack_get_time(); + jack_time_t wait = now + wait_timeout; + + while (jack_get_time() < wait) ; + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int c; + int option_index; + + struct option long_options[] = { + { "timeout", 1, 0, 't' }, + { "help", 0, 0, 'h' }, + { "version", 0, 0, 'v' }, + { 0, 0, 0, 0 } + }; + + my_name = strrchr(argv[0], '/'); + if (my_name == 0) { + my_name = argv[0]; + } else { + my_name ++; + } + + while ((c = getopt_long (argc, argv, "t:hv", long_options, &option_index)) >= 0) { + switch (c) { + case 't': + wait_timeout = atoi(optarg); + break; + case 'h': + show_usage (); + return 1; + break; + case 'v': + show_version (); + return 1; + break; + default: + show_usage (); + return 1; + break; + } + } + + /* try to open server in a loop. breaking under certein conditions */ + + jack_set_info_function( silent_function ); + + client = jack_client_open( "load_test", JackNullOption, NULL ); + + signal(SIGQUIT, signal_handler); + signal(SIGTERM, signal_handler); + signal(SIGHUP, signal_handler); + signal(SIGINT, signal_handler); + + jack_on_shutdown(client, jack_shutdown, 0); + + jack_set_process_callback( client, process_cb, NULL ); + + jack_activate (client); + + sleep( -1 ); + + exit (0); +}