| Index: Source/core/loader/ProgressTracker.cpp
|
| diff --git a/Source/core/loader/ProgressTracker.cpp b/Source/core/loader/ProgressTracker.cpp
|
| index d3520ae5a69aa6157b2ea91c329a6c26ecb2b869..2daa653e1b75fc6bfb827d960266d24d1a329aff 100644
|
| --- a/Source/core/loader/ProgressTracker.cpp
|
| +++ b/Source/core/loader/ProgressTracker.cpp
|
| @@ -20,7 +20,7 @@
|
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
|
|
| #include "config.h"
|
| @@ -40,10 +40,10 @@ using std::min;
|
|
|
| namespace WebCore {
|
|
|
| -// Always start progress at initialProgressValue. This helps provide feedback as
|
| +// Always start progress at initialProgressValue. This helps provide feedback as
|
| // soon as a load starts.
|
| static const double initialProgressValue = 0.1;
|
| -
|
| +
|
| // Similarly, always leave space at the end. This helps show the user that we're not done
|
| // until we're done.
|
| static const double finalProgressValue = 0.9; // 1.0 - initialProgressValue
|
| @@ -53,10 +53,10 @@ static const int progressItemDefaultEstimatedLength = 1024 * 16;
|
| struct ProgressItem {
|
| WTF_MAKE_NONCOPYABLE(ProgressItem); WTF_MAKE_FAST_ALLOCATED;
|
| public:
|
| - ProgressItem(long long length)
|
| + ProgressItem(long long length)
|
| : bytesReceived(0)
|
| , estimatedLength(length) { }
|
| -
|
| +
|
| long long bytesReceived;
|
| long long estimatedLength;
|
| };
|
| @@ -90,7 +90,7 @@ double ProgressTracker::estimatedProgress() const
|
|
|
| void ProgressTracker::reset()
|
| {
|
| - m_progressItems.clear();
|
| + m_progressItems.clear();
|
|
|
| m_totalPageAndResourceBytesToLoad = 0;
|
| m_totalBytesReceived = 0;
|
| @@ -105,12 +105,12 @@ void ProgressTracker::reset()
|
| void ProgressTracker::progressStarted(Frame* frame)
|
| {
|
| LOG(Progress, "Progress started (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree()->uniqueName().string().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
|
| -
|
| +
|
| if (m_numProgressTrackedFrames == 0 || m_originatingProgressFrame == frame) {
|
| reset();
|
| m_progressValue = initialProgressValue;
|
| m_originatingProgressFrame = frame;
|
| -
|
| +
|
| m_originatingProgressFrame->loader()->client()->postProgressStartedNotification();
|
| }
|
| m_numProgressTrackedFrames++;
|
| @@ -120,7 +120,7 @@ void ProgressTracker::progressStarted(Frame* frame)
|
| void ProgressTracker::progressCompleted(Frame* frame)
|
| {
|
| LOG(Progress, "Progress completed (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree()->uniqueName().string().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
|
| -
|
| +
|
| if (m_numProgressTrackedFrames <= 0)
|
| return;
|
| m_numProgressTrackedFrames--;
|
| @@ -131,9 +131,9 @@ void ProgressTracker::progressCompleted(Frame* frame)
|
| void ProgressTracker::finalProgressComplete()
|
| {
|
| LOG(Progress, "Final progress complete (%p)", this);
|
| -
|
| +
|
| RefPtr<Frame> frame = m_originatingProgressFrame.release();
|
| -
|
| +
|
| // Before resetting progress value be sure to send client a least one notification
|
| // with final progress value.
|
| if (!m_finalProgressChangedSent) {
|
| @@ -152,11 +152,11 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const Resource
|
|
|
| if (m_numProgressTrackedFrames <= 0)
|
| return;
|
| -
|
| +
|
| long long estimatedLength = response.expectedContentLength();
|
| if (estimatedLength < 0)
|
| estimatedLength = progressItemDefaultEstimatedLength;
|
| -
|
| +
|
| m_totalPageAndResourceBytesToLoad += estimatedLength;
|
|
|
| if (ProgressItem* item = m_progressItems.get(identifier)) {
|
| @@ -169,23 +169,23 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const Resource
|
| void ProgressTracker::incrementProgress(unsigned long identifier, const char*, int length)
|
| {
|
| ProgressItem* item = m_progressItems.get(identifier);
|
| -
|
| +
|
| // FIXME: Can this ever happen?
|
| if (!item)
|
| return;
|
|
|
| RefPtr<Frame> frame = m_originatingProgressFrame;
|
| -
|
| +
|
| unsigned bytesReceived = length;
|
| double increment, percentOfRemainingBytes;
|
| long long remainingBytes, estimatedBytesForPendingRequests;
|
| -
|
| +
|
| item->bytesReceived += bytesReceived;
|
| if (item->bytesReceived > item->estimatedLength) {
|
| m_totalPageAndResourceBytesToLoad += ((item->bytesReceived * 2) - item->estimatedLength);
|
| item->estimatedLength = item->bytesReceived * 2;
|
| }
|
| -
|
| +
|
| int numPendingOrLoadingRequests = frame->loader()->numPendingOrLoadingRequests(true);
|
| estimatedBytesForPendingRequests = progressItemDefaultEstimatedLength * numPendingOrLoadingRequests;
|
| remainingBytes = ((m_totalPageAndResourceBytesToLoad + estimatedBytesForPendingRequests) - m_totalBytesReceived);
|
| @@ -193,7 +193,7 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i
|
| percentOfRemainingBytes = (double)bytesReceived / (double)remainingBytes;
|
| else
|
| percentOfRemainingBytes = 1.0;
|
| -
|
| +
|
| // For documents that use WebCore's layout system, treat first layout as the half-way point.
|
| bool useClampedMaxProgress = !frame->view()->didFirstLayout();
|
| double maxProgressValue = useClampedMaxProgress ? 0.5 : finalProgressValue;
|
| @@ -201,12 +201,12 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i
|
| m_progressValue += increment;
|
| m_progressValue = min(m_progressValue, maxProgressValue);
|
| ASSERT(m_progressValue >= initialProgressValue);
|
| -
|
| +
|
| m_totalBytesReceived += bytesReceived;
|
| -
|
| +
|
| double now = currentTime();
|
| double notifiedProgressTimeDelta = now - m_lastNotifiedProgressTime;
|
| -
|
| +
|
| LOG(Progress, "Progress incremented (%p) - value %f, tracked frames %d", this, m_progressValue, m_numProgressTrackedFrames);
|
| double notificationProgressDelta = m_progressValue - m_lastNotifiedProgressValue;
|
| if ((notificationProgressDelta >= m_progressNotificationInterval ||
|
| @@ -215,7 +215,7 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i
|
| if (!m_finalProgressChangedSent) {
|
| if (m_progressValue == 1)
|
| m_finalProgressChangedSent = true;
|
| -
|
| +
|
| frame->loader()->client()->postProgressEstimateChangedNotification();
|
|
|
| m_lastNotifiedProgressValue = m_progressValue;
|
| @@ -227,11 +227,11 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i
|
| void ProgressTracker::completeProgress(unsigned long identifier)
|
| {
|
| ProgressItem* item = m_progressItems.get(identifier);
|
| -
|
| +
|
| // This can happen if a load fails without receiving any response data.
|
| if (!item)
|
| return;
|
| -
|
| +
|
| // Adjust the total expected bytes to account for any overage/underage.
|
| long long delta = item->bytesReceived - item->estimatedLength;
|
| m_totalPageAndResourceBytesToLoad += delta;
|
|
|