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

Unified Diff: third_party/WebKit/Source/core/timing/PerformanceBase.cpp

Issue 2647643004: Report nav timing 2 instance as soon as it's requested. (Closed)
Patch Set: add TODO Created 3 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
Index: third_party/WebKit/Source/core/timing/PerformanceBase.cpp
diff --git a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
index 2834a27e3d8081f3278d9fd35f91de21ea63489d..7d5d08827914d5250028c845f85f189fcfe56467 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
@@ -110,10 +110,14 @@ PerformanceTiming* PerformanceBase::timing() const {
return nullptr;
}
-PerformanceEntryVector PerformanceBase::getEntries() const {
+PerformanceEntryVector PerformanceBase::getEntries() {
PerformanceEntryVector entries;
entries.appendVector(m_resourceTimingBuffer);
+ if (!m_navigationTiming)
+ m_navigationTiming = createNavigationTimingInstance();
+ // This extra checking is needed when WorkerPerformance
+ // calls this method.
if (m_navigationTiming)
entries.push_back(m_navigationTiming);
entries.appendVector(m_frameTimingBuffer);
@@ -140,6 +144,8 @@ PerformanceEntryVector PerformanceBase::getEntriesByType(
entries.push_back(resource);
break;
case PerformanceEntry::Navigation:
+ if (!m_navigationTiming)
+ m_navigationTiming = createNavigationTimingInstance();
if (m_navigationTiming)
entries.push_back(m_navigationTiming);
break;
@@ -195,6 +201,8 @@ PerformanceEntryVector PerformanceBase::getEntriesByName(
}
if (entryType.isNull() || type == PerformanceEntry::Navigation) {
+ if (!m_navigationTiming)
+ m_navigationTiming = createNavigationTimingInstance();
if (m_navigationTiming && m_navigationTiming->name() == name)
entries.push_back(m_navigationTiming);
}
@@ -344,66 +352,12 @@ void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info) {
addResourceTimingBuffer(*entry);
}
-void PerformanceBase::addNavigationTiming(LocalFrame* frame) {
- if (!RuntimeEnabledFeatures::performanceNavigationTiming2Enabled())
- return;
- DCHECK(frame);
- const DocumentLoader* documentLoader = frame->loader().documentLoader();
- DCHECK(documentLoader);
-
- const DocumentLoadTiming& documentLoadTiming = documentLoader->timing();
-
- const DocumentTiming* documentTiming =
- frame->document() ? &(frame->document()->timing()) : nullptr;
-
- ResourceTimingInfo* navigationTimingInfo =
- documentLoader->getNavigationTimingInfo();
- if (!navigationTimingInfo)
- return;
-
- const ResourceResponse& finalResponse = navigationTimingInfo->finalResponse();
-
- ResourceLoadTiming* resourceLoadTiming = finalResponse.resourceLoadTiming();
- // Don't create a navigation timing instance when
- // resourceLoadTiming is null, which could happen when visiting non-http sites
- // such as about:blank or in some error cases.
- if (!resourceLoadTiming)
- return;
- double lastRedirectEndTime = documentLoadTiming.redirectEnd();
- double finishTime = documentLoadTiming.loadEventEnd();
-
- ExecutionContext* context = getExecutionContext();
- SecurityOrigin* securityOrigin = getSecurityOrigin(context);
- if (!securityOrigin)
- return;
-
- bool allowRedirectDetails =
- allowsTimingRedirect(navigationTimingInfo->redirectChain(), finalResponse,
- *securityOrigin, context);
-
- unsigned long long transferSize = navigationTimingInfo->transferSize();
- unsigned long long encodedBodyLength = finalResponse.encodedBodyLength();
- unsigned long long decodedBodyLength = finalResponse.decodedBodyLength();
- bool didReuseConnection = finalResponse.connectionReused();
- PerformanceNavigationTiming::NavigationType type =
- getNavigationType(documentLoader->getNavigationType(), frame->document());
-
- m_navigationTiming = new PerformanceNavigationTiming(
- timeOrigin(), navigationTimingInfo->initialURL().getString(),
- documentLoadTiming.unloadEventStart(),
- documentLoadTiming.unloadEventEnd(), documentLoadTiming.loadEventStart(),
- documentLoadTiming.loadEventEnd(), documentLoadTiming.redirectCount(),
- documentTiming ? documentTiming->domInteractive() : 0,
- documentTiming ? documentTiming->domContentLoadedEventStart() : 0,
- documentTiming ? documentTiming->domContentLoadedEventEnd() : 0,
- documentTiming ? documentTiming->domComplete() : 0, type,
- documentLoadTiming.redirectStart(), documentLoadTiming.redirectEnd(),
- documentLoadTiming.fetchStart(), documentLoadTiming.responseEnd(),
- allowRedirectDetails,
- documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming,
- lastRedirectEndTime, finishTime, transferSize, encodedBodyLength,
- decodedBodyLength, didReuseConnection);
- notifyObserversOfEntry(*m_navigationTiming);
+// Called after loadEventEnd happens.
+void PerformanceBase::notifyNavigationTimingToObservers() {
+ if (!m_navigationTiming)
+ m_navigationTiming = createNavigationTimingInstance();
+ if (m_navigationTiming)
+ notifyObserversOfEntry(*m_navigationTiming);
}
void PerformanceBase::addFirstPaintTiming(double startTime) {
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceBase.h ('k') | third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698