double PerformanceResourceTiming::responseEnd() const { if (!m_finishTime) return responseStart(); return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_finishTime); }
double PerformanceResourceTiming::redirectEnd() const { if (!m_lastRedirectEndTime || !m_allowRedirectDetails) return 0.0; return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_lastRedirectEndTime); }
PerformanceResourceTiming::PerformanceResourceTiming(const AtomicString& initiatorType, const ResourceRequest& request, const ResourceResponse& response, double initiationTime, double finishTime, Document* requestingDocument) : PerformanceEntry(request.url().string(), "resource", monotonicTimeToDocumentMilliseconds(requestingDocument, initiationTime), monotonicTimeToDocumentMilliseconds(requestingDocument, finishTime)) , m_initiatorType(initiatorType) , m_timing(response.resourceLoadTiming()) , m_finishTime(finishTime) , m_shouldReportDetails(passesTimingAllowCheck(response, requestingDocument)) , m_requestingDocument(requestingDocument) { }
double PerformanceResourceTiming::requestStart() const { if (!m_allowTimingDetails) return 0.0; if (!m_timing) return connectEnd(); return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->sendStart); }
double PerformanceResourceTiming::secureConnectionStart() const { if (!m_allowTimingDetails) return 0.0; if (!m_timing || m_timing->sslStart == 0.0) // Secure connection not negotiated. return 0.0; return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->sslStart); }
double PerformanceResourceTiming::domainLookupEnd() const { if (!m_allowTimingDetails) return 0.0; if (!m_timing || m_timing->dnsEnd == 0.0) return domainLookupStart(); return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->dnsEnd); }
double PerformanceResourceTiming::fetchStart() const { if (m_lastRedirectEndTime) { // FIXME: ASSERT(m_timing) should be in constructor once timeticks of // AppCache is exposed from chrome network stack, crbug/251100 ASSERT(m_timing); return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->requestTime); } return PerformanceEntry::startTime(); }
double PerformanceResourceTiming::responseStart() const { if (!m_allowTimingDetails) return 0.0; if (!m_timing) return requestStart(); // FIXME: This number isn't exactly correct. See the notes in PerformanceTiming::responseStart(). return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->receiveHeadersEnd); }
double PerformanceResourceTiming::connectEnd() const { if (!m_allowTimingDetails) return 0.0; // connectStart will be zero when a network request is not made. if (!m_timing || m_timing->connectEnd == 0.0 || m_didReuseConnection) return connectStart(); return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->connectEnd); }
PerformanceResourceTiming::PerformanceResourceTiming(const ResourceTimingInfo& info, Document* requestingDocument, double startTime, double lastRedirectEndTime, bool allowTimingDetails, bool allowRedirectDetails) : PerformanceEntry(info.initialRequest().url().string(), "resource", monotonicTimeToDocumentMilliseconds(requestingDocument, startTime), monotonicTimeToDocumentMilliseconds(requestingDocument, info.loadFinishTime())) , m_initiatorType(info.initiatorType()) , m_timing(info.finalResponse().resourceLoadTiming()) , m_lastRedirectEndTime(lastRedirectEndTime) , m_finishTime(info.loadFinishTime()) , m_didReuseConnection(info.finalResponse().connectionReused()) , m_allowTimingDetails(allowTimingDetails) , m_allowRedirectDetails(allowRedirectDetails) , m_requestingDocument(requestingDocument) { }
double PerformanceResourceTiming::connectStart() const { if (!m_allowTimingDetails) return 0.0; // connectStart will be zero when a network request is not made. if (!m_timing || m_timing->connectStart == 0.0 || m_didReuseConnection) return domainLookupEnd(); // connectStart includes any DNS time, so we may need to trim that off. double connectStart = m_timing->connectStart; if (m_timing->dnsEnd > 0.0) connectStart = m_timing->dnsEnd; return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), connectStart); }
double PerformanceResourceTiming::resourceTimeToDocumentMilliseconds(int deltaMilliseconds) const { if (!deltaMilliseconds) return 0.0; return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_requestingDocument->loader()->timing().navigationStart()) + deltaMilliseconds; }
double PerformanceResourceTiming::resourceTimeToDocumentMilliseconds(int deltaMilliseconds) const { if (!deltaMilliseconds) return 0.0; return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->requestTime) + deltaMilliseconds; }