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

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

Issue 216083002: Revert of 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 be2b29abe4f1b4b93e6d5951452749f064df525e..f11a89f4211dff844e57891f3383464673775dc1 100644
--- a/Source/core/loader/ProgressTracker.cpp
+++ b/Source/core/loader/ProgressTracker.cpp
@@ -26,6 +26,7 @@
#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"
@@ -61,8 +62,10 @@
long long estimatedLength;
};
-ProgressTracker::ProgressTracker()
- : m_totalPageAndResourceBytesToLoad(0)
+ProgressTracker::ProgressTracker(LocalFrame* frame)
+ : m_frame(frame)
+ , m_inProgress(false)
+ , m_totalPageAndResourceBytesToLoad(0)
, m_totalBytesReceived(0)
, m_lastNotifiedProgressValue(0)
, m_lastNotifiedProgressTime(0)
@@ -70,17 +73,18 @@
, m_progressNotificationTimeInterval(0.1)
, m_finalProgressChangedSent(false)
, m_progressValue(0)
- , m_numProgressTrackedFrames(0)
{
}
ProgressTracker::~ProgressTracker()
{
-}
-
-PassOwnPtr<ProgressTracker> ProgressTracker::create()
-{
- return adoptPtr(new ProgressTracker);
+ if (m_inProgress)
+ progressCompleted();
+}
+
+PassOwnPtr<ProgressTracker> ProgressTracker::create(LocalFrame* frame)
+{
+ return adoptPtr(new ProgressTracker(frame));
}
double ProgressTracker::estimatedProgress() const
@@ -98,59 +102,35 @@
m_lastNotifiedProgressValue = 0;
m_lastNotifiedProgressTime = 0;
m_finalProgressChangedSent = false;
- 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) {
+}
+
+void ProgressTracker::progressStarted()
+{
+ if (!m_inProgress) {
reset();
m_progressValue = initialProgressValue;
- 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.
+ m_frame->loader().client()->didStartLoading(NavigationToDifferentDocument);
+ }
+ m_inProgress = true;
+ InspectorInstrumentation::frameStartedLoading(m_frame);
+}
+
+void ProgressTracker::progressCompleted()
+{
+ ASSERT(m_inProgress);
+ m_inProgress = false;
if (!m_finalProgressChangedSent) {
m_progressValue = 1;
- frame->loader().client()->postProgressEstimateChangedNotification();
- }
-
+ m_frame->loader().client()->progressEstimateChanged(m_progressValue);
+ }
reset();
- frame->loader().client()->postProgressFinishedNotification();
- InspectorInstrumentation::frameStoppedLoading(frame.get());
+ m_frame->loader().client()->didStopLoading();
+ InspectorInstrumentation::frameStoppedLoading(m_frame);
}
void ProgressTracker::incrementProgress(unsigned long identifier, const ResourceResponse& response)
{
- 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)
+ if (!m_inProgress)
return;
long long estimatedLength = response.expectedContentLength();
@@ -174,8 +154,6 @@
if (!item)
return;
- RefPtr<LocalFrame> frame = m_originatingProgressFrame;
-
unsigned bytesReceived = length;
double increment, percentOfRemainingBytes;
long long remainingBytes, estimatedBytesForPendingRequests;
@@ -186,7 +164,7 @@
item->estimatedLength = item->bytesReceived * 2;
}
- int numPendingOrLoadingRequests = frame->loader().numPendingOrLoadingRequests(true);
+ int numPendingOrLoadingRequests = m_frame->document()->fetcher()->requestCount();
estimatedBytesForPendingRequests = progressItemDefaultEstimatedLength * numPendingOrLoadingRequests;
remainingBytes = ((m_totalPageAndResourceBytesToLoad + estimatedBytesForPendingRequests) - m_totalBytesReceived);
if (remainingBytes > 0) // Prevent divide by 0.
@@ -195,7 +173,7 @@
percentOfRemainingBytes = 1.0;
// For documents that use WebCore's layout system, treat first layout as the half-way point.
- bool useClampedMaxProgress = !frame->view()->didFirstLayout();
+ bool useClampedMaxProgress = !m_frame->view()->didFirstLayout();
double maxProgressValue = useClampedMaxProgress ? 0.5 : finalProgressValue;
increment = (maxProgressValue - m_progressValue) * percentOfRemainingBytes;
m_progressValue += increment;
@@ -207,16 +185,13 @@
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) &&
- m_numProgressTrackedFrames > 0) {
+ if (notificationProgressDelta >= m_progressNotificationInterval || notifiedProgressTimeDelta >= m_progressNotificationTimeInterval) {
if (!m_finalProgressChangedSent) {
if (m_progressValue == 1)
m_finalProgressChangedSent = true;
- frame->loader().client()->postProgressEstimateChangedNotification();
+ m_frame->loader().client()->progressEstimateChanged(m_progressValue);
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