Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(829)

Unified Diff: Source/core/loader/ProgressTracker.cpp

Issue 215533004: Revert of Make start/stop loading notifications per-frame (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/loader/ProgressTracker.h ('k') | Source/core/page/Page.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/loader/ProgressTracker.cpp
diff --git a/Source/core/loader/ProgressTracker.cpp b/Source/core/loader/ProgressTracker.cpp
index f11a89f4211dff844e57891f3383464673775dc1..be2b29abe4f1b4b93e6d5951452749f064df525e 100644
--- a/Source/core/loader/ProgressTracker.cpp
+++ b/Source/core/loader/ProgressTracker.cpp
@@ -26,7 +26,6 @@
#include "config.h"
#include "core/loader/ProgressTracker.h"
-#include "core/fetch/ResourceFetcher.h"
#include "core/frame/FrameView.h"
#include "core/frame/LocalFrame.h"
#include "core/inspector/InspectorInstrumentation.h"
@@ -62,10 +61,8 @@
long long estimatedLength;
};
-ProgressTracker::ProgressTracker(LocalFrame* frame)
- : m_frame(frame)
- , m_inProgress(false)
- , m_totalPageAndResourceBytesToLoad(0)
+ProgressTracker::ProgressTracker()
+ : m_totalPageAndResourceBytesToLoad(0)
, m_totalBytesReceived(0)
, m_lastNotifiedProgressValue(0)
, m_lastNotifiedProgressTime(0)
@@ -73,18 +70,17 @@
, m_progressNotificationTimeInterval(0.1)
, m_finalProgressChangedSent(false)
, m_progressValue(0)
+ , m_numProgressTrackedFrames(0)
{
}
ProgressTracker::~ProgressTracker()
{
- if (m_inProgress)
- progressCompleted();
-}
-
-PassOwnPtr<ProgressTracker> ProgressTracker::create(LocalFrame* frame)
-{
- return adoptPtr(new ProgressTracker(frame));
+}
+
+PassOwnPtr<ProgressTracker> ProgressTracker::create()
+{
+ return adoptPtr(new ProgressTracker);
}
double ProgressTracker::estimatedProgress() const
@@ -102,35 +98,59 @@
m_lastNotifiedProgressValue = 0;
m_lastNotifiedProgressTime = 0;
m_finalProgressChangedSent = false;
-}
-
-void ProgressTracker::progressStarted()
-{
- if (!m_inProgress) {
+ m_numProgressTrackedFrames = 0;
+ m_originatingProgressFrame = nullptr;
+}
+
+void ProgressTracker::progressStarted(LocalFrame* frame)
+{
+ WTF_LOG(Progress, "Progress started (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree().uniqueName().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
+
+ if (m_numProgressTrackedFrames == 0 || m_originatingProgressFrame == frame) {
reset();
m_progressValue = initialProgressValue;
- m_frame->loader().client()->didStartLoading(NavigationToDifferentDocument);
- }
- m_inProgress = true;
- InspectorInstrumentation::frameStartedLoading(m_frame);
-}
-
-void ProgressTracker::progressCompleted()
-{
- ASSERT(m_inProgress);
- m_inProgress = false;
+ m_originatingProgressFrame = frame;
+
+ m_originatingProgressFrame->loader().client()->postProgressStartedNotification(NavigationToDifferentDocument);
+ }
+ m_numProgressTrackedFrames++;
+ InspectorInstrumentation::frameStartedLoading(frame);
+}
+
+void ProgressTracker::progressCompleted(LocalFrame* frame)
+{
+ WTF_LOG(Progress, "Progress completed (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree().uniqueName().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
+
+ if (m_numProgressTrackedFrames <= 0)
+ return;
+ m_numProgressTrackedFrames--;
+ if (!m_numProgressTrackedFrames || m_originatingProgressFrame == frame)
+ finalProgressComplete();
+}
+
+void ProgressTracker::finalProgressComplete()
+{
+ WTF_LOG(Progress, "Final progress complete (%p)", this);
+
+ RefPtr<LocalFrame> frame = m_originatingProgressFrame.release();
+
+ // Before resetting progress value be sure to send client a least one notification
+ // with final progress value.
if (!m_finalProgressChangedSent) {
m_progressValue = 1;
- m_frame->loader().client()->progressEstimateChanged(m_progressValue);
- }
+ frame->loader().client()->postProgressEstimateChangedNotification();
+ }
+
reset();
- m_frame->loader().client()->didStopLoading();
- InspectorInstrumentation::frameStoppedLoading(m_frame);
+ frame->loader().client()->postProgressFinishedNotification();
+ InspectorInstrumentation::frameStoppedLoading(frame.get());
}
void ProgressTracker::incrementProgress(unsigned long identifier, const ResourceResponse& response)
{
- if (!m_inProgress)
+ WTF_LOG(Progress, "Progress incremented (%p) - value %f, tracked frames %d, originating frame %p", this, m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
+
+ if (m_numProgressTrackedFrames <= 0)
return;
long long estimatedLength = response.expectedContentLength();
@@ -154,6 +174,8 @@
if (!item)
return;
+ RefPtr<LocalFrame> frame = m_originatingProgressFrame;
+
unsigned bytesReceived = length;
double increment, percentOfRemainingBytes;
long long remainingBytes, estimatedBytesForPendingRequests;
@@ -164,7 +186,7 @@
item->estimatedLength = item->bytesReceived * 2;
}
- int numPendingOrLoadingRequests = m_frame->document()->fetcher()->requestCount();
+ int numPendingOrLoadingRequests = frame->loader().numPendingOrLoadingRequests(true);
estimatedBytesForPendingRequests = progressItemDefaultEstimatedLength * numPendingOrLoadingRequests;
remainingBytes = ((m_totalPageAndResourceBytesToLoad + estimatedBytesForPendingRequests) - m_totalBytesReceived);
if (remainingBytes > 0) // Prevent divide by 0.
@@ -173,7 +195,7 @@
percentOfRemainingBytes = 1.0;
// For documents that use WebCore's layout system, treat first layout as the half-way point.
- bool useClampedMaxProgress = !m_frame->view()->didFirstLayout();
+ bool useClampedMaxProgress = !frame->view()->didFirstLayout();
double maxProgressValue = useClampedMaxProgress ? 0.5 : finalProgressValue;
increment = (maxProgressValue - m_progressValue) * percentOfRemainingBytes;
m_progressValue += increment;
@@ -185,13 +207,16 @@
double now = currentTime();
double notifiedProgressTimeDelta = now - m_lastNotifiedProgressTime;
+ WTF_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) {
+ if ((notificationProgressDelta >= m_progressNotificationInterval ||
+ notifiedProgressTimeDelta >= m_progressNotificationTimeInterval) &&
+ m_numProgressTrackedFrames > 0) {
if (!m_finalProgressChangedSent) {
if (m_progressValue == 1)
m_finalProgressChangedSent = true;
- m_frame->loader().client()->progressEstimateChanged(m_progressValue);
+ frame->loader().client()->postProgressEstimateChangedNotification();
m_lastNotifiedProgressValue = m_progressValue;
m_lastNotifiedProgressTime = now;
« no previous file with comments | « Source/core/loader/ProgressTracker.h ('k') | Source/core/page/Page.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698