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--