diff options
Diffstat (limited to 'src/network/access')
-rw-r--r-- | src/network/access/qnetworkreply_p.h | 1 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 15 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyimpl.cpp | 14 |
3 files changed, 27 insertions, 3 deletions
diff --git a/src/network/access/qnetworkreply_p.h b/src/network/access/qnetworkreply_p.h index 04598fc712..453902392c 100644 --- a/src/network/access/qnetworkreply_p.h +++ b/src/network/access/qnetworkreply_p.h @@ -71,6 +71,7 @@ public: QPointer<QNetworkAccessManager> manager; qint64 readBufferMaxSize; QElapsedTimer downloadProgressSignalChoke; + QElapsedTimer uploadProgressSignalChoke; const static int progressSignalInterval; QNetworkAccessManager::Operation operation; QNetworkReply::NetworkError errorCode; diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index cf92f55cdf..e1ec9a9a95 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -888,9 +888,9 @@ void QNetworkReplyHttpImplPrivate::postRequest() delegate->moveToThread(thread); // This call automatically moves the uploadDevice too for the asynchronous case. - // Start timer for progress notifications + // Prepare timers for progress notifications downloadProgressSignalChoke.start(); - + uploadProgressSignalChoke.invalidate(); // Send an signal to the delegate so it starts working in the other thread if (synchronous) { @@ -1802,6 +1802,17 @@ void QNetworkReplyHttpImplPrivate::emitReplyUploadProgress(qint64 bytesSent, qin Q_Q(QNetworkReplyHttpImpl); if (isFinished) return; + + //choke signal emissions, except the first and last signals which are unconditional + if (uploadProgressSignalChoke.isValid()) { + if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) { + return; + } + uploadProgressSignalChoke.restart(); + } else { + uploadProgressSignalChoke.start(); + } + emit q->uploadProgress(bytesSent, bytesTotal); } diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 9f8a6cfb5c..d0393475de 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -144,8 +144,9 @@ void QNetworkReplyImplPrivate::_q_startOperation() } #endif - // Start timer for progress notifications + // Prepare timer for progress notifications downloadProgressSignalChoke.start(); + uploadProgressSignalChoke.invalidate(); if (backend && backend->isSynchronous()) { state = Finished; @@ -550,6 +551,17 @@ void QNetworkReplyImplPrivate::emitUploadProgress(qint64 bytesSent, qint64 bytes { Q_Q(QNetworkReplyImpl); bytesUploaded = bytesSent; + + //choke signal emissions, except the first and last signals which are unconditional + if (uploadProgressSignalChoke.isValid()) { + if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) { + return; + } + uploadProgressSignalChoke.restart(); + } else { + uploadProgressSignalChoke.start(); + } + pauseNotificationHandling(); emit q->uploadProgress(bytesSent, bytesTotal); resumeNotificationHandling(); |