[svn-commits] russell: trunk r122926 - in /trunk: include/asterisk/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 16 08:03:40 CDT 2008


Author: russell
Date: Mon Jun 16 08:03:40 2008
New Revision: 122926

URL: http://svn.digium.com/view/asterisk?view=rev&rev=122926
Log:
Add a "timing test" CLI command.  It opens a timer and configures it for
50 ticks per second, and then counts to see how many ticks it actually
gets in a second.

Modified:
    trunk/include/asterisk/_private.h
    trunk/main/asterisk.c
    trunk/main/timing.c

Modified: trunk/include/asterisk/_private.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/_private.h?view=diff&rev=122926&r1=122925&r2=122926
==============================================================================
--- trunk/include/asterisk/_private.h (original)
+++ trunk/include/asterisk/_private.h Mon Jun 16 08:03:40 2008
@@ -37,6 +37,7 @@
 int ast_http_init(void);		/*!< Provided by http.c */
 int ast_http_reload(void);		/*!< Provided by http.c */
 int ast_tps_init(void); 		/*!< Provided by taskprocessor.c */
+int ast_timing_init(void);		/*!< Provided by timing.c */
 
 /*!
  * \brief Reload asterisk modules.

Modified: trunk/main/asterisk.c
URL: http://svn.digium.com/view/asterisk/trunk/main/asterisk.c?view=diff&rev=122926&r1=122925&r2=122926
==============================================================================
--- trunk/main/asterisk.c (original)
+++ trunk/main/asterisk.c Mon Jun 16 08:03:40 2008
@@ -3306,6 +3306,11 @@
 
 	ast_autoservice_init();
 
+	if (ast_timing_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
 	if (load_modules(1)) {		/* Load modules, pre-load only */
 		printf("%s", term_quit());
 		exit(1);

Modified: trunk/main/timing.c
URL: http://svn.digium.com/view/asterisk/trunk/main/timing.c?view=diff&rev=122926&r1=122925&r2=122926
==============================================================================
--- trunk/main/timing.c (original)
+++ trunk/main/timing.c Mon Jun 16 08:03:40 2008
@@ -27,8 +27,13 @@
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
+#include "asterisk/_private.h"
+
 #include "asterisk/timing.h"
 #include "asterisk/lock.h"
+#include "asterisk/cli.h"
+#include "asterisk/utils.h"
+#include "asterisk/time.h"
 
 AST_RWLOCK_DEFINE_STATIC(lock);
 
@@ -192,3 +197,64 @@
 
 	return result;
 }
+
+static char *timing_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	int fd, count = 0;
+	struct timeval start, end;
+
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "timing test";
+		e->usage = "Usage: timing test\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;
+	}
+
+	ast_cli(a->fd, "Attempting to test a timer with 50 ticks per second ...\n");
+
+	if ((fd = ast_timer_open()) == -1) {
+		ast_cli(a->fd, "Failed to open timing fd\n");
+		return CLI_FAILURE;
+	}
+
+	start = ast_tvnow();
+
+	ast_timer_set_rate(fd, 50);
+
+	while (ast_tvdiff_ms((end = ast_tvnow()), start) < 1000) {
+		int res;
+		struct pollfd pfd = {
+			.fd = fd,
+			.events = POLLIN | POLLPRI,
+		};
+
+		res = poll(&pfd, 1, 100);
+
+		if (res == 1) {
+			count++;
+			ast_timer_ack(fd, 1);
+		} else if (!res) {
+			ast_cli(a->fd, "poll() timed out!  This is bad.\n");
+		} else if (errno != EAGAIN && errno != EINTR) {
+			ast_cli(a->fd, "poll() returned error: %s\n", strerror(errno));
+		}
+	}
+
+	ast_timer_close(fd);
+
+	ast_cli(a->fd, "It has been %d milliseconds, and we got %d timer ticks\n", 
+		ast_tvdiff_ms(end, start), count);
+
+	return CLI_SUCCESS;
+}
+
+static struct ast_cli_entry cli_timing[] = {
+	AST_CLI_DEFINE(timing_test, "Run a timing test"),
+};
+
+int ast_timing_init(void)
+{
+	return ast_cli_register_multiple(cli_timing, ARRAY_LEN(cli_timing));
+}




More information about the svn-commits mailing list