mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 16:21:01 +00:00
- Make res_timing_pthread allow a max rate of 100/sec instead of 50/sec
- change the "timing test" CLI command to let you specify a timing rate to test git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@124023 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -202,17 +202,33 @@ static char *timing_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *
|
|||||||
{
|
{
|
||||||
int fd, count = 0;
|
int fd, count = 0;
|
||||||
struct timeval start, end;
|
struct timeval start, end;
|
||||||
|
unsigned int test_rate = 50;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case CLI_INIT:
|
case CLI_INIT:
|
||||||
e->command = "timing test";
|
e->command = "timing test";
|
||||||
e->usage = "Usage: timing test\n";
|
e->usage = "Usage: timing test <rate>\n"
|
||||||
|
" Test a timer with a specified rate, 100/sec by default.\n"
|
||||||
|
"";
|
||||||
return NULL;
|
return NULL;
|
||||||
case CLI_GENERATE:
|
case CLI_GENERATE:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_cli(a->fd, "Attempting to test a timer with 50 ticks per second ...\n");
|
if (a->argc != 2 && a->argc != 3) {
|
||||||
|
return CLI_SHOWUSAGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a->argc == 3) {
|
||||||
|
unsigned int rate;
|
||||||
|
if (sscanf(a->argv[2], "%u", &rate) == 1) {
|
||||||
|
test_rate = rate;
|
||||||
|
} else {
|
||||||
|
ast_cli(a->fd, "Invalid rate '%s', using default of %u\n", a->argv[2], test_rate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ast_cli(a->fd, "Attempting to test a timer with %u ticks per second ...\n", test_rate);
|
||||||
|
|
||||||
if ((fd = ast_timer_open()) == -1) {
|
if ((fd = ast_timer_open()) == -1) {
|
||||||
ast_cli(a->fd, "Failed to open timing fd\n");
|
ast_cli(a->fd, "Failed to open timing fd\n");
|
||||||
@@ -221,7 +237,7 @@ static char *timing_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *
|
|||||||
|
|
||||||
start = ast_tvnow();
|
start = ast_tvnow();
|
||||||
|
|
||||||
ast_timer_set_rate(fd, 50);
|
ast_timer_set_rate(fd, test_rate);
|
||||||
|
|
||||||
while (ast_tvdiff_ms((end = ast_tvnow()), start) < 1000) {
|
while (ast_tvdiff_ms((end = ast_tvnow()), start) < 1000) {
|
||||||
int res;
|
int res;
|
||||||
|
@@ -57,9 +57,8 @@ static struct ast_timing_functions pthread_timing_functions = {
|
|||||||
.timer_get_event = pthread_timer_get_event,
|
.timer_get_event = pthread_timer_get_event,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 1 tick / 20 ms */
|
/* 1 tick / 10 ms */
|
||||||
#define TIMING_INTERVAL 20
|
#define MAX_RATE 100
|
||||||
#define MAX_RATE 50
|
|
||||||
|
|
||||||
static struct ao2_container *pthread_timers;
|
static struct ao2_container *pthread_timers;
|
||||||
#define PTHREAD_TIMER_BUCKETS 563
|
#define PTHREAD_TIMER_BUCKETS 563
|
||||||
@@ -412,9 +411,9 @@ static void *do_timing(void *arg)
|
|||||||
while (!timing_thread.stop) {
|
while (!timing_thread.stop) {
|
||||||
struct timespec ts = { 0, };
|
struct timespec ts = { 0, };
|
||||||
|
|
||||||
ao2_callback(pthread_timers, 0, run_timer, NULL);
|
ao2_callback(pthread_timers, OBJ_NODATA, run_timer, NULL);
|
||||||
|
|
||||||
next_wakeup = ast_tvadd(next_wakeup, ast_tv(0, 10000));
|
next_wakeup = ast_tvadd(next_wakeup, ast_tv(0, 5000));
|
||||||
|
|
||||||
ts.tv_sec = next_wakeup.tv_sec;
|
ts.tv_sec = next_wakeup.tv_sec;
|
||||||
ts.tv_nsec = next_wakeup.tv_usec * 1000;
|
ts.tv_nsec = next_wakeup.tv_usec * 1000;
|
||||||
|
Reference in New Issue
Block a user