[Resource Timing] Gather timing information with reliable responseEnd time
[WebKit-https.git] / Source / WebCore / page / PerformanceTiming.cpp
index 2fb5ead..69efe8b 100644 (file)
@@ -39,7 +39,7 @@
 #include "Frame.h"
 #include "FrameLoader.h"
 #include "LoadTiming.h"
-#include "NetworkLoadTiming.h"
+#include "NetworkLoadMetrics.h"
 #include "Performance.h"
 #include "ResourceResponse.h"
 #include <wtf/CurrentTime.h>
@@ -123,11 +123,11 @@ unsigned long long PerformanceTiming::domainLookupStart() const
     if (!loader)
         return fetchStart();
     
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
     // This will be -1 when a DNS request is not performed.
     // Rather than exposing a special value that indicates no DNS, we "backfill" with fetchStart.
-    if (timing.domainLookupStart < 0)
+    if (timing.domainLookupStart < 0_ms)
         return fetchStart();
 
     return resourceLoadTimeRelativeToFetchStart(timing.domainLookupStart);
@@ -139,11 +139,11 @@ unsigned long long PerformanceTiming::domainLookupEnd() const
     if (!loader)
         return domainLookupStart();
     
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
     // 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)
+    if (timing.domainLookupEnd < 0_ms)
         return domainLookupStart();
 
     return resourceLoadTimeRelativeToFetchStart(timing.domainLookupEnd);
@@ -155,17 +155,17 @@ unsigned long long PerformanceTiming::connectStart() const
     if (!loader)
         return domainLookupEnd();
 
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
     // 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.
-    double connectStart = timing.connectStart;
-    if (connectStart < 0)
+    Seconds connectStart = timing.connectStart;
+    if (connectStart < 0_ms)
         return domainLookupEnd();
 
-    // NetworkLoadTiming's connect phase includes DNS, however Navigation Timing's
+    // NetworkLoadMetrics'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)
+    if (timing.domainLookupEnd >= 0_ms && timing.domainLookupEnd > connectStart)
         connectStart = timing.domainLookupEnd;
 
     return resourceLoadTimeRelativeToFetchStart(connectStart);
@@ -177,11 +177,11 @@ unsigned long long PerformanceTiming::connectEnd() const
     if (!loader)
         return connectStart();
 
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
     // 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)
+    if (timing.connectEnd < 0_ms)
         return connectStart();
 
     return resourceLoadTimeRelativeToFetchStart(timing.connectEnd);
@@ -193,9 +193,9 @@ unsigned long long PerformanceTiming::secureConnectionStart() const
     if (!loader)
         return 0;
 
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
-    if (timing.secureConnectionStart < 0)
+    if (timing.secureConnectionStart < 0_ms)
         return 0;
 
     return resourceLoadTimeRelativeToFetchStart(timing.secureConnectionStart);
@@ -207,9 +207,9 @@ unsigned long long PerformanceTiming::requestStart() const
     if (!loader)
         return connectEnd();
     
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
-    ASSERT(timing.requestStart >= 0);
+    ASSERT(timing.requestStart >= 0_ms);
     return resourceLoadTimeRelativeToFetchStart(timing.requestStart);
 }
 
@@ -219,9 +219,9 @@ unsigned long long PerformanceTiming::responseStart() const
     if (!loader)
         return requestStart();
 
-    const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
+    const NetworkLoadMetrics& timing = loader->response().deprecatedNetworkLoadMetrics();
     
-    ASSERT(timing.responseStart >= 0);
+    ASSERT(timing.responseStart >= 0_ms);
     return resourceLoadTimeRelativeToFetchStart(timing.responseStart);
 }
 
@@ -326,16 +326,16 @@ LoadTiming* PerformanceTiming::loadTiming() const
     return &loader->timing();
 }
 
-unsigned long long PerformanceTiming::resourceLoadTimeRelativeToFetchStart(double relativeMilliseconds) const
+unsigned long long PerformanceTiming::resourceLoadTimeRelativeToFetchStart(Seconds delta) const
 {
-    ASSERT(relativeMilliseconds >= 0);
+    ASSERT(delta >= 0_ms);
 
     LoadTiming* timing = loadTiming();
     if (!timing)
         return 0;
 
     WallTime fetchStart = timing->monotonicTimeToPseudoWallTime(timing->fetchStart());
-    WallTime combined = fetchStart + Seconds::fromMilliseconds(relativeMilliseconds);
+    WallTime combined = fetchStart + delta;
     Seconds reduced = Performance::reduceTimeResolution(combined.secondsSinceEpoch());
     return static_cast<unsigned long long>(reduced.milliseconds());
 }