Changeset 563 for pjproject/trunk/pjsip/src/test-pjsip/msg_test.c
- Timestamp:
- Jun 28, 2006 4:46:49 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/test-pjsip/msg_test.c
r127 r563 22 22 23 23 #define POOL_SIZE 8000 24 #define LOOP 10000 24 #if defined(PJ_DEBUG) && PJ_DEBUG!=0 25 # define LOOP 10000 26 #else 27 # define LOOP 100000 28 #endif 25 29 #define AVERAGE_MSG_LEN 800 26 30 #define THIS_FILE "msg_test.c" … … 35 39 #define FLAG_PARSE_ONLY 4 36 40 #define FLAG_PRINT_ONLY 8 37 38 static int flag = 0;39 41 40 42 struct test_msg … … 102 104 }; 103 105 104 static pj_highprec_t detect_len, parse_len, print_len; 105 static pj_timestamp detect_time, parse_time, print_time; 106 static struct 107 { 108 int flag; 109 pj_highprec_t detect_len, parse_len, print_len; 110 pj_timestamp detect_time, parse_time, print_time; 111 } var; 106 112 107 113 static pj_status_t test_entry( pj_pool_t *pool, struct test_msg *entry ) … … 122 128 entry->len = pj_native_strlen(entry->msg); 123 129 124 if ( flag & FLAG_PARSE_ONLY)130 if (var.flag & FLAG_PARSE_ONLY) 125 131 goto parse_msg; 126 132 127 if ( flag & FLAG_PRINT_ONLY) {133 if (var.flag & FLAG_PRINT_ONLY) { 128 134 if (print_msg == NULL) 129 135 print_msg = entry->creator(pool); … … 132 138 133 139 /* Detect message. */ 134 detect_len =detect_len + entry->len;140 var.detect_len = var.detect_len + entry->len; 135 141 pj_get_timestamp(&t1); 136 142 status = pjsip_find_msg(entry->msg, entry->len, PJ_FALSE, &msg_size); … … 149 155 pj_get_timestamp(&t2); 150 156 pj_sub_timestamp(&t2, &t1); 151 pj_add_timestamp(& detect_time, &t2);152 153 if ( flag & FLAG_DETECT_ONLY)157 pj_add_timestamp(&var.detect_time, &t2); 158 159 if (var.flag & FLAG_DETECT_ONLY) 154 160 return PJ_SUCCESS; 155 161 156 162 /* Parse message. */ 157 163 parse_msg: 158 parse_len =parse_len + entry->len;164 var.parse_len = var.parse_len + entry->len; 159 165 pj_get_timestamp(&t1); 160 166 pj_list_init(&err_list); … … 172 178 pj_get_timestamp(&t2); 173 179 pj_sub_timestamp(&t2, &t1); 174 pj_add_timestamp(& parse_time, &t2);175 176 if ( flag & FLAG_PARSE_ONLY)180 pj_add_timestamp(&var.parse_time, &t2); 181 182 if (var.flag & FLAG_PARSE_ONLY) 177 183 return PJ_SUCCESS; 178 184 … … 307 313 /* Print message. */ 308 314 print_msg: 309 print_len =print_len + entry->len;315 var.print_len = var.print_len + entry->len; 310 316 pj_get_timestamp(&t1); 311 if ( flag && FLAG_PRINT_ONLY)317 if (var.flag && FLAG_PRINT_ONLY) 312 318 ref_msg = print_msg; 313 319 len = pjsip_msg_print(ref_msg, msgbuf1, PJSIP_MAX_PKT_LEN); … … 318 324 pj_get_timestamp(&t2); 319 325 pj_sub_timestamp(&t2, &t1); 320 pj_add_timestamp(& print_time, &t2);326 pj_add_timestamp(&var.print_time, &t2); 321 327 322 328 … … 675 681 /*****************************************************************************/ 676 682 677 int msg_test(void) 683 static pj_status_t simple_test(void) 684 { 685 unsigned i; 686 pj_status_t status; 687 688 PJ_LOG(3,(THIS_FILE, " simple test..")); 689 for (i=0; i<PJ_ARRAY_SIZE(test_array); ++i) { 690 pj_pool_t *pool; 691 pool = pjsip_endpt_create_pool(endpt, NULL, POOL_SIZE, POOL_SIZE); 692 status = test_entry( pool, &test_array[i] ); 693 pjsip_endpt_release_pool(endpt, pool); 694 695 if (status != PJ_SUCCESS) 696 return status; 697 } 698 699 return PJ_SUCCESS; 700 } 701 702 703 static int msg_benchmark(unsigned *p_detect, unsigned *p_parse, 704 unsigned *p_print) 678 705 { 679 706 pj_status_t status; … … 684 711 pj_highprec_t avg_detect, avg_parse, avg_print, kbytes; 685 712 686 PJ_LOG(3,(THIS_FILE, " simple test..")); 687 for (i=0; i<PJ_ARRAY_SIZE(test_array); ++i) { 688 pool = pjsip_endpt_create_pool(endpt, NULL, POOL_SIZE, POOL_SIZE); 689 status = test_entry( pool, &test_array[i] ); 690 pjsip_endpt_release_pool(endpt, pool); 691 692 if (status != PJ_SUCCESS) 693 return status; 694 } 695 696 PJ_LOG(3,(THIS_FILE, " benchmarking..")); 697 detect_len = parse_len = print_len = 0; 698 zero.u64 = detect_time.u64 = parse_time.u64 = print_time.u64 = 0; 699 713 714 pj_memset(&var, 0, sizeof(var)); 715 zero.u64 = 0; 716 700 717 for (loop=0; loop<LOOP; ++loop) { 701 718 for (i=0; i<PJ_ARRAY_SIZE(test_array); ++i) { … … 709 726 } 710 727 711 kbytes = detect_len;728 kbytes = var.detect_len; 712 729 pj_highprec_mod(kbytes, 1000000); 713 730 pj_highprec_div(kbytes, 100000); 714 elapsed = pj_elapsed_time(&zero, & detect_time);715 avg_detect = pj_elapsed_usec(&zero, & detect_time);731 elapsed = pj_elapsed_time(&zero, &var.detect_time); 732 avg_detect = pj_elapsed_usec(&zero, &var.detect_time); 716 733 pj_highprec_mul(avg_detect, AVERAGE_MSG_LEN); 717 pj_highprec_div(avg_detect, detect_len);734 pj_highprec_div(avg_detect, var.detect_len); 718 735 avg_detect = 1000000 / avg_detect; 719 736 720 737 PJ_LOG(3,(THIS_FILE, 721 738 " %u.%u MB detected in %d.%03ds (avg=%d msg detection/sec)", 722 (unsigned)( detect_len/1000000), (unsigned)kbytes,739 (unsigned)(var.detect_len/1000000), (unsigned)kbytes, 723 740 elapsed.sec, elapsed.msec, 724 741 (unsigned)avg_detect)); 725 726 kbytes = parse_len; 742 *p_detect = (unsigned)avg_detect; 743 744 kbytes = var.parse_len; 727 745 pj_highprec_mod(kbytes, 1000000); 728 746 pj_highprec_div(kbytes, 100000); 729 elapsed = pj_elapsed_time(&zero, & parse_time);730 avg_parse = pj_elapsed_usec(&zero, & parse_time);747 elapsed = pj_elapsed_time(&zero, &var.parse_time); 748 avg_parse = pj_elapsed_usec(&zero, &var.parse_time); 731 749 pj_highprec_mul(avg_parse, AVERAGE_MSG_LEN); 732 pj_highprec_div(avg_parse, parse_len);750 pj_highprec_div(avg_parse, var.parse_len); 733 751 avg_parse = 1000000 / avg_parse; 734 752 735 753 PJ_LOG(3,(THIS_FILE, 736 754 " %u.%u MB parsed in %d.%03ds (avg=%d msg parsing/sec)", 737 (unsigned)( parse_len/1000000), (unsigned)kbytes,755 (unsigned)(var.parse_len/1000000), (unsigned)kbytes, 738 756 elapsed.sec, elapsed.msec, 739 757 (unsigned)avg_parse)); 740 741 kbytes = print_len; 758 *p_parse = (unsigned)avg_parse; 759 760 kbytes = var.print_len; 742 761 pj_highprec_mod(kbytes, 1000000); 743 762 pj_highprec_div(kbytes, 100000); 744 elapsed = pj_elapsed_time(&zero, & print_time);745 avg_print = pj_elapsed_usec(&zero, & print_time);763 elapsed = pj_elapsed_time(&zero, &var.print_time); 764 avg_print = pj_elapsed_usec(&zero, &var.print_time); 746 765 pj_highprec_mul(avg_print, AVERAGE_MSG_LEN); 747 pj_highprec_div(avg_print, print_len);766 pj_highprec_div(avg_print, var.print_len); 748 767 avg_print = 1000000 / avg_print; 749 768 750 769 PJ_LOG(3,(THIS_FILE, 751 770 " %u.%u MB printed in %d.%03ds (avg=%d msg print/sec)", 752 (unsigned)( print_len/1000000), (unsigned)kbytes,771 (unsigned)(var.print_len/1000000), (unsigned)kbytes, 753 772 elapsed.sec, elapsed.msec, 754 773 (unsigned)avg_print)); 755 774 775 *p_print = (unsigned)avg_print; 756 776 return status; 757 777 } 758 778 759 779 /*****************************************************************************/ 780 781 int msg_test(void) 782 { 783 enum { COUNT = 4, DETECT=0, PARSE=1, PRINT=2 }; 784 struct { 785 unsigned detect; 786 unsigned parse; 787 unsigned print; 788 } run[COUNT]; 789 unsigned i, max, avg_len; 790 char desc[250]; 791 pj_status_t status; 792 793 794 status = simple_test(); 795 if (status != PJ_SUCCESS) 796 return status; 797 798 for (i=0; i<COUNT; ++i) { 799 PJ_LOG(3,(THIS_FILE, " benchmarking (%d of %d)..", i+1, COUNT)); 800 status = msg_benchmark(&run[i].detect, &run[i].parse, &run[i].print); 801 if (status != PJ_SUCCESS) 802 return status; 803 } 804 805 /* Calculate average message length */ 806 for (i=0, avg_len=0; i<PJ_ARRAY_SIZE(test_array); ++i) { 807 avg_len += test_array[i].len; 808 } 809 avg_len /= PJ_ARRAY_SIZE(test_array); 810 811 812 /* Print maximum detect/sec */ 813 for (i=0, max=0; i<COUNT; ++i) 814 if (run[i].detect > max) max = run[i].detect; 815 816 PJ_LOG(3,("", " Maximum message detection/sec=%u", max)); 817 818 pj_ansi_sprintf(desc, "Number of SIP messages " 819 "can be pre-parse by <tt>pjsip_find_msg()</tt> " 820 "per second (tested with %d message sets with " 821 "average message length of " 822 "%d bytes)", PJ_ARRAY_SIZE(test_array), avg_len); 823 report_ival("msg-detect-per-sec", max, "msg/sec", desc); 824 825 /* Print maximum parse/sec */ 826 for (i=0, max=0; i<COUNT; ++i) 827 if (run[i].parse > max) max = run[i].parse; 828 829 PJ_LOG(3,("", " Maximum message parsing/sec=%u", max)); 830 831 pj_ansi_sprintf(desc, "Number of SIP messages " 832 "can be <b>parsed</b> by <tt>pjsip_parse_msg()</tt> " 833 "per second (tested with %d message sets with " 834 "average message length of " 835 "%d bytes)", PJ_ARRAY_SIZE(test_array), avg_len); 836 report_ival("msg-parse-per-sec", max, "msg/sec", desc); 837 838 /* Msg parsing bandwidth */ 839 report_ival("msg-parse-bandwidth-mb", avg_len*max/1000000, "MB/sec", 840 "Message parsing bandwidth in megabytes (number of megabytes" 841 " worth of SIP messages that can be parsed per second). " 842 "The value is derived from msg-parse-per-sec above."); 843 844 845 /* Print maximum print/sec */ 846 for (i=0, max=0; i<COUNT; ++i) 847 if (run[i].print > max) max = run[i].print; 848 849 PJ_LOG(3,("", " Maximum message print/sec=%u", max)); 850 851 pj_ansi_sprintf(desc, "Number of SIP messages " 852 "can be <b>printed</b> by <tt>pjsip_msg_print()</tt>" 853 " per second (tested with %d message sets with " 854 "average message length of " 855 "%d bytes)", PJ_ARRAY_SIZE(test_array), avg_len); 856 857 report_ival("msg-print-per-sec", max, "msg/sec", desc); 858 859 /* Msg print bandwidth */ 860 report_ival("msg-printed-bandwidth-mb", avg_len*max/1000000, "MB/sec", 861 "Message print bandwidth in megabytes (total size of " 862 "SIP messages printed per second). " 863 "The value is derived from msg-print-per-sec above."); 864 865 866 return PJ_SUCCESS; 867 } 868
Note: See TracChangeset
for help on using the changeset viewer.