lbarnaud Sat Sep 27 09:08:42 2008 UTC Modified files: /php-src/ext/session php_session.h session.c /php-src/ext/session/tests rfc1867.phpt Log: Avoid updating upload progress information too frequently on high transfert rate. [DOC] (HEAD only) Added session.upload_progress.min_freq http://wiki.php.net/rfc/session_upload_progress http://cvs.php.net/viewvc.cgi/php-src/ext/session/php_session.h?r1=1.118&r2=1.119&diff_format=u Index: php-src/ext/session/php_session.h diff -u php-src/ext/session/php_session.h:1.118 php-src/ext/session/php_session.h:1.119 --- php-src/ext/session/php_session.h:1.118 Wed Sep 17 17:22:06 2008 +++ php-src/ext/session/php_session.h Sat Sep 27 09:08:41 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_session.h,v 1.118 2008/09/17 17:22:06 lbarnaud Exp $ */ +/* $Id: php_session.h,v 1.119 2008/09/27 09:08:41 lbarnaud Exp $ */ #ifndef PHP_SESSION_H #define PHP_SESSION_H @@ -103,6 +103,7 @@ zval key; long update_step; long next_update; + double last_update_time; zval *data; size_t content_length; zval *post_bytes_processed; @@ -166,6 +167,7 @@ zstr rfc1867_prefix; zstr rfc1867_name; long rfc1867_freq; + double rfc1867_min_freq; php_session_rfc1867_progress *rfc1867_progress; } php_ps_globals; http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.494&r2=1.495&diff_format=u Index: php-src/ext/session/session.c diff -u php-src/ext/session/session.c:1.494 php-src/ext/session/session.c:1.495 --- php-src/ext/session/session.c:1.494 Wed Sep 17 17:22:07 2008 +++ php-src/ext/session/session.c Sat Sep 27 09:08:41 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: session.c,v 1.494 2008/09/17 17:22:07 lbarnaud Exp $ */ +/* $Id: session.c,v 1.495 2008/09/27 09:08:41 lbarnaud Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -696,6 +696,8 @@ STD_PHP_INI_ENTRY("session.upload_progress.name", "PHP_SESSION_UPLOAD_PROGRESS", ZEND_INI_PERDIR, OnUpdateUTF8String, rfc1867_name, php_ps_globals, ps_globals) STD_PHP_INI_ENTRY("session.upload_progress.freq", "1%", ZEND_INI_PERDIR, OnUpdateRfc1867Freq, rfc1867_freq, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.upload_progress.min_freq", + "0", ZEND_INI_PERDIR, OnUpdateReal, rfc1867_min_freq,php_ps_globals, ps_globals) /* Commented out until future discussion */ /* PHP_INI_ENTRY("session.encode_sources", "globals,track", PHP_INI_ALL, NULL) */ @@ -2150,9 +2152,29 @@ } } /* }}} */ -static inline void php_session_rfc1867_update(php_session_rfc1867_progress *progress TSRMLS_DC) /* {{{ */ +static inline void php_session_rfc1867_update(php_session_rfc1867_progress *progress, int force_update TSRMLS_DC) /* {{{ */ { zval **progress_ary, **cancel_upload; + + if (!force_update) { + if (Z_LVAL_P(progress->post_bytes_processed) < progress->next_update) { + return; + } +#ifdef HAVE_GETTIMEOFDAY + if (PS(rfc1867_min_freq) > 0.0) { + struct timeval tv = {0}; + double dtv; + gettimeofday(&tv, NULL); + dtv = (double) tv.tv_sec + tv.tv_usec / 1000000.0; + if ((dtv - progress->last_update_time) < PS(rfc1867_min_freq)) { + return; + } + progress->last_update_time = dtv; + } +#endif + progress->next_update = Z_LVAL_P(progress->post_bytes_processed) + progress->update_step; + } + php_session_initialize(TSRMLS_C); PS(session_status) = php_session_active; IF_SESSION_VARS() { @@ -2265,6 +2287,7 @@ progress->update_step = progress->content_length * -PS(rfc1867_freq) / 100; } progress->next_update = 0; + progress->last_update_time = 0.0; ALLOC_INIT_ZVAL(progress->data); array_init(progress->data); @@ -2301,10 +2324,7 @@ Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; - if (data->post_bytes_processed >= progress->next_update) { - php_session_rfc1867_update(progress TSRMLS_CC); - progress->next_update = data->post_bytes_processed + progress->update_step; - } + php_session_rfc1867_update(progress, 0 TSRMLS_CC); } break; case MULTIPART_EVENT_FILE_DATA: { @@ -2317,10 +2337,7 @@ Z_LVAL_P(progress->current_file_bytes_processed) = data->offset + data->length; Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; - if (data->post_bytes_processed >= progress->next_update) { - php_session_rfc1867_update(progress TSRMLS_CC); - progress->next_update = data->post_bytes_processed + progress->update_step; - } + php_session_rfc1867_update(progress, 0 TSRMLS_CC); } break; case MULTIPART_EVENT_FILE_END: { @@ -2338,10 +2355,7 @@ Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; - if (data->post_bytes_processed >= progress->next_update) { - php_session_rfc1867_update(progress TSRMLS_CC); - progress->next_update = data->post_bytes_processed + progress->update_step; - } + php_session_rfc1867_update(progress, 0 TSRMLS_CC); } break; case MULTIPART_EVENT_END: { @@ -2350,7 +2364,7 @@ if (Z_TYPE(progress->sid) && Z_TYPE(progress->key)) { add_ascii_assoc_bool_ex(progress->data, "done", sizeof("done"), 1); Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; - php_session_rfc1867_update(progress TSRMLS_CC); + php_session_rfc1867_update(progress, 1 TSRMLS_CC); php_rshutdown_session_globals(TSRMLS_C); } http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/rfc1867.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/session/tests/rfc1867.phpt diff -u php-src/ext/session/tests/rfc1867.phpt:1.1 php-src/ext/session/tests/rfc1867.phpt:1.2 --- php-src/ext/session/tests/rfc1867.phpt:1.1 Thu Sep 11 11:52:02 2008 +++ php-src/ext/session/tests/rfc1867.phpt Sat Sep 27 09:08:41 2008 @@ -13,6 +13,7 @@ session.upload_progress.prefix=upload_progress_ session.upload_progress.name=PHP_SESSION_UPLOAD_PROGRESS session.upload_progress.freq=1% +session.upload_progress.min_freq=0.000000001 --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE--
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php