unsigned long long PerformanceTiming::requestStart() const { ResourceLoadTiming* timing = resourceLoadTiming(); if (!timing) return connectEnd(); ASSERT(timing->sendStart >= 0); return resourceLoadTimeRelativeToAbsolute(timing->sendStart); }
unsigned long long PerformanceTiming::responseStart() const { DocumentLoader* loader = documentLoader(); if (!loader) return requestStart(); const ResourceLoadTiming& timing = loader->response().resourceLoadTiming(); ASSERT(timing.responseStart >= 0); return resourceLoadTimeRelativeToAbsolute(timing.responseStart); }
unsigned long long PerformanceTiming::secureConnectionStart() const { DocumentLoader* loader = documentLoader(); if (!loader) return 0; const ResourceLoadTiming& timing = loader->response().resourceLoadTiming(); if (timing.secureConnectionStart < 0) return 0; return resourceLoadTimeRelativeToAbsolute(timing.secureConnectionStart); }
unsigned long long PerformanceTiming::domainLookupEnd() const { ResourceLoadTiming* timing = resourceLoadTiming(); if (!timing) return domainLookupStart(); // This will be -1 when a DNS request is not performed. // Rather than exposing a special value that indicates no DNS, we "backfill" with domainLookupStart. int dnsEnd = timing->dnsEnd; if (dnsEnd < 0) return domainLookupStart(); return resourceLoadTimeRelativeToAbsolute(dnsEnd); }
unsigned long long PerformanceTiming::connectEnd() const { DocumentLoader* loader = documentLoader(); if (!loader) return connectStart(); const ResourceLoadTiming& timing = loader->response().resourceLoadTiming(); // connectEnd will be -1 when a network request is not made. // Rather than exposing a special value that indicates no new connection, we "backfill" with connectStart. if (timing.connectEnd < 0) return connectStart(); return resourceLoadTimeRelativeToAbsolute(timing.connectEnd); }
unsigned long long PerformanceTiming::domainLookupEnd() const { DocumentLoader* loader = documentLoader(); if (!loader) return domainLookupStart(); const ResourceLoadTiming& timing = loader->response().resourceLoadTiming(); // This will be -1 when a DNS request is not performed. // Rather than exposing a special value that indicates no DNS, we "backfill" with domainLookupStart. if (timing.domainLookupEnd < 0) return domainLookupStart(); return resourceLoadTimeRelativeToAbsolute(timing.domainLookupEnd); }
unsigned long long PerformanceTiming::responseStart() const { ResourceLoadTiming* timing = resourceLoadTiming(); if (!timing) return requestStart(); // FIXME: Response start needs to be the time of the first received byte. // However, the ResourceLoadTiming API currently only supports the time // the last header byte was received. For many responses with reasonable // sized cookies, the HTTP headers fit into a single packet so this time // is basically equivalent. But for some responses, particularly those with // headers larger than a single packet, this time will be too late. ASSERT(timing->receiveHeadersEnd >= 0); return resourceLoadTimeRelativeToAbsolute(timing->receiveHeadersEnd); }
unsigned long long PerformanceTiming::secureConnectionStart() const { DocumentLoader* loader = documentLoader(); if (!loader) return 0; ResourceLoadTiming* timing = loader->response().resourceLoadTiming(); if (!timing) return 0; int sslStart = timing->sslStart; if (sslStart < 0) return 0; return resourceLoadTimeRelativeToAbsolute(sslStart); }
unsigned long long PerformanceTiming::connectStart() const { DocumentLoader* loader = documentLoader(); if (!loader) return domainLookupEnd(); const ResourceLoadTiming& timing = loader->response().resourceLoadTiming(); // connectStart will be -1 when a network request is not made. // Rather than exposing a special value that indicates no new connection, we "backfill" with domainLookupEnd. int connectStart = timing.connectStart; if (connectStart < 0) return domainLookupEnd(); // ResourceLoadTiming's connect phase includes DNS, however Navigation Timing's // connect phase should not. So if there is DNS time, trim it from the start. if (timing.domainLookupEnd >= 0 && timing.domainLookupEnd > connectStart) connectStart = timing.domainLookupEnd; return resourceLoadTimeRelativeToAbsolute(connectStart); }