diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-07-11 12:25:45 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-07-11 12:25:45 +0000 |
commit | 8fe835ee6304768e39a285c878e9d3c0fe3b8957 (patch) | |
tree | 84f4552f521c041495e56f6dc7d1986693b83c79 /pjsip-apps | |
parent | ad091afd936f778e6141653d2e03fcfc5ae8efc2 (diff) |
Some minor modifications here and there in pjsip-perf
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@603 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps')
-rw-r--r-- | pjsip-apps/src/samples/pjsip-perf.c | 93 |
1 files changed, 58 insertions, 35 deletions
diff --git a/pjsip-apps/src/samples/pjsip-perf.c b/pjsip-apps/src/samples/pjsip-perf.c index ae4f2dd0..4244618c 100644 --- a/pjsip-apps/src/samples/pjsip-perf.c +++ b/pjsip-apps/src/samples/pjsip-perf.c @@ -154,7 +154,7 @@ struct app pj_time_val requests_sent; pj_time_val last_completion; unsigned total_responses; - unsigned status_class[7]; + unsigned response_codes[800]; } client; struct { @@ -567,7 +567,8 @@ static pjsip_module mod_test = static void report_completion(int status_code) { app.client.job_finished++; - app.client.status_class[status_code/100]++; + if (status_code >= 200 && status_code < 800) + app.client.response_codes[status_code]++; app.client.total_responses++; pj_gettimeofday(&app.client.last_completion); } @@ -1257,9 +1258,9 @@ static pj_status_t submit_job(void) /* Client worker thread */ static int client_thread(void *arg) { - unsigned last_timeout_check = 0; pj_time_val end_time, last_report, now; unsigned thread_index = (unsigned)arg; + unsigned cycle = 0, last_cycle = 0; pj_thread_sleep(100); @@ -1287,11 +1288,20 @@ static int client_thread(void *arg) app.client.stat_max_window = outstanding; /* Wait if there are more pending jobs than allowed in the - * window. + * window. But spawn a new job anyway if no events are happening + * after we wait for some time. */ - for (i=0; outstanding > (int)app.client.job_window && i<100; ++i) { - pjsip_endpt_handle_events(app.sip_endpt, &timeout); + for (i=0; outstanding > (int)app.client.job_window && i<1000; ++i) { + pj_time_val wait = { 0, 500 }; + unsigned count = 0; + + pjsip_endpt_handle_events2(app.sip_endpt, &wait, &count); outstanding = app.client.job_submitted - app.client.job_finished; + + if (count == 0) + break; + + ++cycle; } @@ -1305,17 +1315,18 @@ static int client_thread(void *arg) } ++app.client.job_submitted; + ++cycle; /* Handle event */ pjsip_endpt_handle_events2(app.sip_endpt, &timeout, NULL); /* Check for time out, also print report */ - if (app.client.job_submitted - last_timeout_check >= 500) { + if (cycle - last_cycle >= 500) { pj_gettimeofday(&now); if (PJ_TIME_VAL_GTE(now, end_time)) { break; } - last_timeout_check = app.client.job_submitted; + last_cycle = cycle; if (thread_index == 0 && now.sec-last_report.sec >= 2) { @@ -1360,12 +1371,11 @@ static int client_thread(void *arg) pj_gettimeofday(&now); } - /* Wait couple of seconds if there are still unfinished jobs */ + /* Wait couple of seconds to let jobs completes (e.g. ACKs to be sent) */ pj_gettimeofday(&now); end_time = now; end_time.sec += 2; - while (PJ_TIME_VAL_LT(now, end_time) && - app.client.job_finished < app.client.job_submitted) + while (PJ_TIME_VAL_LT(now, end_time)) { pj_time_val timeout = { 0, 1 }; unsigned i; @@ -1584,25 +1594,37 @@ int main(int argc, char *argv[]) pj_ansi_snprintf( report, sizeof(report), "Total %d %s sent in %d ms at rate of %d/sec\n" - "Total %d responses receieved in %d ms:\n" - " - 2xx responses: %7d (rate=%d/sec)\n" - " - 3xx responses: %7d (rate=%d/sec)\n" - " - 4xx responses: %7d (rate=%d/sec)\n" - " - 5xx responses: %7d (rate=%d/sec)\n" - " - 6xx responses: %7d (rate=%d/sec)\n" - " - 7xx responses: %7d (rate=%d/sec)\n" - " ----------------\n" - " TOTAL responses: %7d (rate=%d/sec)\n", + "Total %d responses receieved in %d ms at rate of %d/sec:", app.client.job_submitted, test_type, msec_req, app.client.job_submitted * 1000 / msec_req, app.client.total_responses, msec_res, - app.client.status_class[2], app.client.status_class[2]*1000/msec_res, - app.client.status_class[3], app.client.status_class[3]*1000/msec_res, - app.client.status_class[4], app.client.status_class[4]*1000/msec_res, - app.client.status_class[5], app.client.status_class[5]*1000/msec_res, - app.client.status_class[6], app.client.status_class[6]*1000/msec_res, - app.client.status_class[7], app.client.status_class[7]*1000/msec_res, - app.client.total_responses, app.client.total_responses*1000/msec_res); + app.client.total_responses*1000/msec_res); + write_report(report); + + /* Print detailed response code received */ + pj_ansi_sprintf(report, "\nDetailed responses received:"); + write_report(report); + + for (i=0; i<PJ_ARRAY_SIZE(app.client.response_codes); ++i) { + const pj_str_t *reason; + + if (app.client.response_codes[i] == 0) + continue; + + reason = pjsip_get_status_text(i); + pj_ansi_snprintf( report, sizeof(report), + " - %d responses: %7d (%.*s)", + i, app.client.response_codes[i], + (int)reason->slen, reason->ptr); + write_report(report); + } + + /* Total responses and rate */ + pj_ansi_snprintf( report, sizeof(report), + " ------\n" + " TOTAL responses: %7d (rate=%d/sec)\n", + app.client.total_responses, + app.client.total_responses*1000/msec_res); write_report(report); @@ -1617,25 +1639,24 @@ int main(int argc, char *argv[]) pj_status_t status; unsigned i; - puts(""); puts("pjsip-perf started in server-mode"); printf("Receiving requests on the following URIs:\n" - " sip:0@%.*s:%d;transport=%s for stateless handling (non-INVITE only)\n" - " sip:1@%.*s:%d;transport=%s for stateful handling (INVITE and non-INVITE)\n" - " sip:2@%.*s:%d;transport=%s for call handling (INVITE only)\n", + " sip:0@%.*s:%d%s for stateless handling\n" + " sip:1@%.*s:%d%s for stateful handling\n" + " sip:2@%.*s:%d%s for call handling\n", (int)app.local_addr.slen, app.local_addr.ptr, app.local_port, - (app.use_tcp ? "tcp" : "udp"), + (app.use_tcp ? ";transport=tcp" : ""), (int)app.local_addr.slen, app.local_addr.ptr, app.local_port, - (app.use_tcp ? "tcp" : "udp"), + (app.use_tcp ? ";transport=tcp" : ""), (int)app.local_addr.slen, app.local_addr.ptr, app.local_port, - (app.use_tcp ? "tcp" : "udp")); + (app.use_tcp ? ";transport=tcp" : "")); for (i=0; i<app.thread_count; ++i) { status = pj_thread_create(app.pool, NULL, &server_thread, (void*)i, @@ -1646,7 +1667,7 @@ int main(int argc, char *argv[]) } } - puts("Press <ENTER> to quit"); + puts("\nPress <ENTER> to quit\n"); fflush(stdout); fgets(s, sizeof(s), stdin); @@ -1655,6 +1676,8 @@ int main(int argc, char *argv[]) pj_thread_join(app.thread[i]); app.thread[i] = NULL; } + + puts(""); } |