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

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: make a copy of navigationTimingInfo for ResourceFetcher Created 3 years, 10 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 04e8fc0b0b398e32535bdb89324120857e360e88..c1f2434bb9e86a63d274715ace8a2394a4482a28 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
@@ -51,16 +51,6 @@
namespace blink {
-namespace {
-
-SecurityOrigin* getSecurityOrigin(ExecutionContext* context) {
- if (context)
- return context->getSecurityOrigin();
- return nullptr;
-}
-
-} // namespace
-
using PerformanceObserverVector = HeapVector<Member<PerformanceObserver>>;
static const size_t defaultResourceTimingBufferSize = 150;
@@ -80,40 +70,28 @@ PerformanceBase::PerformanceBase(double timeOrigin,
PerformanceBase::~PerformanceBase() {}
-PerformanceNavigationTiming::NavigationType PerformanceBase::getNavigationType(
- NavigationType type,
panicker 2017/02/03 23:53:52 could you move this to a separate CL?
sunjian 2017/02/10 18:32:46 It's actually easier to keep this change. getNavig
- const Document* document) {
- if (document &&
- document->pageVisibilityState() == PageVisibilityStatePrerender) {
- return PerformanceNavigationTiming::NavigationType::Prerender;
- }
- switch (type) {
- case NavigationTypeReload:
- return PerformanceNavigationTiming::NavigationType::Reload;
- case NavigationTypeBackForward:
- return PerformanceNavigationTiming::NavigationType::BackForward;
- case NavigationTypeLinkClicked:
- case NavigationTypeFormSubmitted:
- case NavigationTypeFormResubmitted:
- case NavigationTypeOther:
- return PerformanceNavigationTiming::NavigationType::Navigate;
- }
- NOTREACHED();
- return PerformanceNavigationTiming::NavigationType::Navigate;
-}
-
const AtomicString& PerformanceBase::interfaceName() const {
return EventTargetNames::Performance;
}
+SecurityOrigin* PerformanceBase::getSecurityOrigin(ExecutionContext* context) {
+ if (context)
+ return context->getSecurityOrigin();
+ return nullptr;
+}
+
PerformanceTiming* PerformanceBase::timing() const {
return nullptr;
}
-PerformanceEntryVector PerformanceBase::getEntries() const {
+PerformanceEntryVector PerformanceBase::getEntries() {
PerformanceEntryVector entries;
entries.appendVector(m_resourceTimingBuffer);
+ if (!m_navigationTiming)
+ m_navigationTiming = getNavigationTimingInstance();
+ // This extra checking is needed when WorkerPerformance
+ // calls this method.
if (m_navigationTiming)
entries.push_back(m_navigationTiming);
entries.appendVector(m_frameTimingBuffer);
@@ -140,6 +118,8 @@ PerformanceEntryVector PerformanceBase::getEntriesByType(
entries.push_back(resource);
break;
case PerformanceEntry::Navigation:
+ if (!m_navigationTiming)
+ m_navigationTiming = getNavigationTimingInstance();
if (m_navigationTiming)
entries.push_back(m_navigationTiming);
break;
@@ -195,6 +175,8 @@ PerformanceEntryVector PerformanceBase::getEntriesByName(
}
if (entryType.isNull() || type == PerformanceEntry::Navigation) {
+ if (!m_navigationTiming)
+ m_navigationTiming = getNavigationTimingInstance();
if (m_navigationTiming && m_navigationTiming->name() == name)
entries.push_back(m_navigationTiming);
}
@@ -344,65 +326,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(), 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::notifyNavigationTimingToObserver() {
panicker 2017/02/03 23:53:52 s/ToObserver/ToObservers/
sunjian 2017/02/10 18:32:46 Done.
+ if (!m_navigationTiming)
+ m_navigationTiming = getNavigationTimingInstance();
+ if (m_navigationTiming)
+ notifyObserversOfEntry(*m_navigationTiming);
}
void PerformanceBase::addFirstPaintTiming(double startTime) {

Powered by Google App Engine
This is Rietveld 408576698