WebProgressTracker updates progress too frequently
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Jun 2014 04:44:24 +0000 (04:44 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Jun 2014 04:44:24 +0000 (04:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=134185

Reviewed by Tim Horton.

The old code throttled the progress update to when either 100ms has passed or the delta is at least 2%
but this was still not enough in pages that loaded in sub-seconds. The new code always throttles it at 200ms.

* loader/ProgressTracker.cpp:
(WebCore::ProgressTracker::ProgressTracker):
(WebCore::ProgressTracker::incrementProgress):
* loader/ProgressTracker.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@170464 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/ProgressTracker.cpp
Source/WebCore/loader/ProgressTracker.h

index c9d23bce6956cc8f73f0a5e034e3fef396701802..03f05569c7cdc2f9cc7b5d660eb93b8eecbecc60 100644 (file)
@@ -1,3 +1,18 @@
+2014-06-25  Ryosuke Niwa  <rniwa@webkit.org>
+
+        WebProgressTracker updates progress too frequently
+        https://bugs.webkit.org/show_bug.cgi?id=134185
+
+        Reviewed by Tim Horton.
+
+        The old code throttled the progress update to when either 100ms has passed or the delta is at least 2%
+        but this was still not enough in pages that loaded in sub-seconds. The new code always throttles it at 200ms.
+
+        * loader/ProgressTracker.cpp:
+        (WebCore::ProgressTracker::ProgressTracker):
+        (WebCore::ProgressTracker::incrementProgress):
+        * loader/ProgressTracker.h:
+
 2014-06-25  Simon Fraser  <simon.fraser@apple.com>
 
         [iOS WK2] Fixed position elements jump around when zooming
 2014-06-25  Simon Fraser  <simon.fraser@apple.com>
 
         [iOS WK2] Fixed position elements jump around when zooming
index 33385066be6c3433d56e4c905211f86aaca43f5f..ece0d4e219c3eed3106fc4d72ac752fdb0819bd0 100644 (file)
@@ -60,6 +60,8 @@ static const unsigned loadStalledHeartbeatCount = 4;
 // How many bytes are required between heartbeats to consider it progress.
 static const unsigned minumumBytesPerHeartbeatForProgress = 1024;
 
 // How many bytes are required between heartbeats to consider it progress.
 static const unsigned minumumBytesPerHeartbeatForProgress = 1024;
 
+static const std::chrono::milliseconds progressNotificationTimeInterval = std::chrono::milliseconds(200);
+
 struct ProgressItem {
     WTF_MAKE_NONCOPYABLE(ProgressItem); WTF_MAKE_FAST_ALLOCATED;
 public:
 struct ProgressItem {
     WTF_MAKE_NONCOPYABLE(ProgressItem); WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -80,8 +82,6 @@ ProgressTracker::ProgressTracker(ProgressTrackerClient& client)
     , m_totalPageAndResourceBytesToLoad(0)
     , m_totalBytesReceived(0)
     , m_lastNotifiedProgressValue(0)
     , m_totalPageAndResourceBytesToLoad(0)
     , m_totalBytesReceived(0)
     , m_lastNotifiedProgressValue(0)
-    , m_progressNotificationInterval(0.02)
-    , m_progressNotificationTimeInterval(std::chrono::milliseconds(100))
     , m_finalProgressChangedSent(false)
     , m_progressValue(0)
     , m_numProgressTrackedFrames(0)
     , m_finalProgressChangedSent(false)
     , m_progressValue(0)
     , m_numProgressTrackedFrames(0)
@@ -257,10 +257,7 @@ void ProgressTracker::incrementProgress(unsigned long identifier, unsigned bytes
     auto notifiedProgressTimeDelta = now - m_lastNotifiedProgressTime;
     
     LOG(Progress, "Progress incremented (%p) - value %f, tracked frames %d", this, m_progressValue, m_numProgressTrackedFrames);
     auto 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 ||
-         notifiedProgressTimeDelta >= m_progressNotificationTimeInterval) &&
-        m_numProgressTrackedFrames > 0) {
+    if ((notifiedProgressTimeDelta >= progressNotificationTimeInterval || m_progressValue == 1) && m_numProgressTrackedFrames > 0) {
         if (!m_finalProgressChangedSent) {
             if (m_progressValue == 1)
                 m_finalProgressChangedSent = true;
         if (!m_finalProgressChangedSent) {
             if (m_progressValue == 1)
                 m_finalProgressChangedSent = true;
index 4d82f309acb52f4cca8066f7b9603253a3b1480b..0f7aa0a9825738ba8888530fb3a8a1d46c82ecce 100644 (file)
@@ -75,8 +75,6 @@ private:
     long long m_totalBytesReceived;
     double m_lastNotifiedProgressValue;
     std::chrono::steady_clock::time_point m_lastNotifiedProgressTime;
     long long m_totalBytesReceived;
     double m_lastNotifiedProgressValue;
     std::chrono::steady_clock::time_point m_lastNotifiedProgressTime;
-    double m_progressNotificationInterval;
-    std::chrono::milliseconds m_progressNotificationTimeInterval;
     bool m_finalProgressChangedSent;    
     double m_progressValue;
     RefPtr<Frame> m_originatingProgressFrame;
     bool m_finalProgressChangedSent;    
     double m_progressValue;
     RefPtr<Frame> m_originatingProgressFrame;