From 2e869a00ac09c85976f00e3166a87ee501d05595 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 31 Oct 2007 18:24:42 +0000 Subject: [PATCH] Added CGI SAPI -T option, to measure execution time of script repeated several times. --- sapi/cgi/cgi_main.c | 64 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index 601938aed4..69461c9018 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -141,6 +141,9 @@ static const opt_struct OPTIONS[] = { {'?', 0, "usage"},/* help alias (both '?' and 'usage') */ {'v', 0, "version"}, {'z', 1, "zend-extension"}, +#if PHP_FASTCGI + {'T', 1, "timing"}, +#endif {'-', 0, NULL} /* end of args */ }; @@ -682,7 +685,11 @@ static void php_cgi_usage(char *argv0) " -s Display colour syntax highlighted source.\n" " -v Version number\n" " -w Display source with stripped comments and whitespace.\n" - " -z Load Zend extension .\n", + " -z Load Zend extension .\n" +#if PHP_FASTCGI + " -T Measure execution time of script repeated times.\n" +#endif + , prog, prog); } /* }}} */ @@ -1199,6 +1206,13 @@ int main(int argc, char *argv[]) char *bindpath = NULL; int fcgi_fd = 0; fcgi_request request; + int repeats = 1; + int benchmark = 0; +#if HAVE_GETTIMEOFDAY + struct timeval start, end; +#else + time_t start, end; +#endif #ifndef PHP_WIN32 int status = 0; #endif @@ -1488,6 +1502,17 @@ consult the installation file that came with this distribution, or visit \n\ zend_first_try { while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 1)) != -1) { switch (c) { +#if PHP_FASTCGI + case 'T': + benchmark = 1; + repeats = atoi(php_optarg); +#ifdef HAVE_GETTIMEOFDAY + gettimeofday(&start, NULL); +#else + time(&start); +#endif + break; +#endif case 'h': case '?': #if PHP_FASTCGI @@ -1890,7 +1915,19 @@ fastcgi_request_done: } #if PHP_FASTCGI - if (!fastcgi) break; + if (!fastcgi) { + if (benchmark) { + repeats--; + if (repeats > 0) { + script_file = NULL; + php_optind = orig_optind; + php_optarg = orig_optarg; + continue; + } + } + break; + } + /* only fastcgi will get here */ requests++; if (max_requests && (requests == max_requests)) { @@ -1920,6 +1957,29 @@ fastcgi_request_done: } zend_end_try(); out: +#if PHP_FASTCGI + if (benchmark) { + int sec; +#ifdef HAVE_GETTIMEOFDAY + int usec; + + gettimeofday(&end, NULL); + sec = (int)(end.tv_sec - start.tv_sec); + if (end.tv_usec >= start.tv_usec) { + usec = (int)(end.tv_usec - start.tv_usec); + } else { + sec -= 1; + usec = (int)(end.tv_usec + 1000000 - start.tv_usec); + } + fprintf(stderr, "\nElapsed time: %d.%06d sec\n", sec, usec); +#else + time(&end); + sec = (int)(end - start); + fprintf(stderr, "\nElapsed time: %d sec\n", sec); +#endif + } +#endif + SG(server_context) = NULL; php_module_shutdown(TSRMLS_C); sapi_shutdown(); -- 2.40.0