Repository: GoogleChrome/lighthouse
Pull request #8109 (2019-04-09 17:06:42)

clients(lr): apply Lightrider timings to NetworkRequests
<!-- Thank you for submitting a pull request! -->

**Summary**
Follow up to #7888 which now actually applies those LR timings.

Call out if I forgot to re-add anything.



Patch:
diff --git a/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js b/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js
index 807aaf506..03dd85a46 100644
--- a/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js
+++ b/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js
@@ -10,6 +10,8 @@ const LanternMetric = require('./lantern-metric.js');
 const BaseNode = require('../../lib/dependency-graph/base-node.js');
 
 /** @typedef {BaseNode.Node} Node */
+/** @typedef {import('../../lib/dependency-graph/cpu-node')} CPUNode */
+/** @typedef {import('../../lib/dependency-graph/network-node')} NetworkNode */
 
 class LanternFirstContentfulPaint extends LanternMetric {
   /**
@@ -24,52 +26,174 @@ class LanternFirstContentfulPaint extends LanternMetric {
   }
 
   /**
-   * @param {Node} dependencyGraph
-   * @param {LH.Artifacts.TraceOfTab} traceOfTab
-   * @return {Node}
+   * This function computes the set of URLs that *appeared* to be render-blocking based on our filter,
+   * *but definitely were not* render-blocking based on the timing of their EvaluateScript task.
+   * It also computes the set of corresponding CPU node ids that were needed for the paint at the
+   * given timestamp.
+   *
+   * @param {Node} graph
+   * @param {number} filterTimestamp The timestamp used to filter out tasks that occured after our
+   *    paint of interest. Typically this is First Contentful Paint or First Meaningful Paint.
+   * @param {function(NetworkNode):boolean} blockingScriptFilter The function that determines which scripts
+   *    should be considered *possibly* render-blocking.
+   * @param {(function(CPUNode):boolean)=} extraBlockingCpuNodesToIncludeFilter The function that determines which CPU nodes
+   *    should also be included in our blocking node IDs set.
+   * @return {{definitelyNotRenderBlockingScriptUrls: Set<string>, blockingCpuNodeIds: Set<string>}}
    */
-  static getOptimisticGraph(dependencyGraph, traceOfTab) {
-    const fcp = traceOfTab.timestamps.firstContentfulPaint;
-    const blockingScriptUrls = LanternMetric.getScriptUrls(dependencyGraph, node => {
-      return (
-        node.endTime <= fcp && node.hasRenderBlockingPriority() && node.initiatorType !== 'script'
-      );
-    });
+  static getBlockingNodeData(
+      graph,
+      filterTimestamp,
+      blockingScriptFilter,
+      extraBlockingCpuNodesToIncludeFilter
+  ) {
+    /** @type {Map<string, CPUNode>} A map of blocking script URLs to the earliest EvaluateScript task node that executed them. */
+    const scriptUrlToNodeMap = new Map();
 
-    return dependencyGraph.cloneWithRelationships(node => {
-      if (node.endTime > fcp && !node.isMainDocument()) return false;
-      // Include EvaluateScript tasks for blocking scripts
+    /** @type {Array<CPUNode>} */
+    const cpuNodes = [];
+    graph.traverse(node => {
       if (node.type === BaseNode.TYPES.CPU) {
-        return node.isEvaluateScriptFor(blockingScriptUrls);
+        // A task is *possibly* render blocking if it *started* before filterTimestamp.
+        // We use startTime here because the paint event can be *inside* the task that was render blocking.
+        if (node.startTime <= filterTimestamp) cpuNodes.push(node);
+
+        // Build our script URL map to find the earliest EvaluateScript task node.
+        const scriptUrls = node.getEvaluateScriptURLs();
+        for (const url of scriptUrls) {
+          // Use the earliest CPU node we find.
+          const existing = scriptUrlToNodeMap.get(url) || node;
+          scriptUrlToNodeMap.set(url, node.startTime < existing.startTime ? node : existing);
+        }
       }
+    });
+
+    cpuNodes.sort((a, b) => a.startTime - b.startTime);
 
-      // Include non-script-initiated network requests with a render-blocking priority
-      return node.hasRenderBlockingPriority() && node.initiatorType !== 'script';
+    // A script is *possibly* render blocking if it finished loading before filterTimestamp.
+    const possiblyRenderBlockingScriptUrls = LanternMetric.getScriptUrls(graph, node => {
+      return node.endTime <= filterTimestamp && blockingScriptFilter(node);
     });
+
+    // A script is *definitely not* render blocking if its EvaluateScript task started after filterTimestamp.
+    /** @type {Set<string>} */
+    const definitelyNotRenderBlockingScriptUrls = new Set();
+    /** @type {Set<string>} */
+    const blockingCpuNodeIds = new Set();
+    for (const url of possiblyRenderBlockingScriptUrls) {
+      // Lookup the CPU node that had the earliest EvaluateScript for this URL.
+      const cpuNodeForUrl = scriptUrlToNodeMap.get(url);
+
+      // If we can't find it at all, we can't conclude anything, so just skip it.
+      if (!cpuNodeForUrl) continue;
+
+      // If we found it and it was in our `cpuNodes` set that means it finished before filterTimestamp, so it really is render-blocking.
+      if (cpuNodes.includes(cpuNodeForUrl)) {
+        blockingCpuNodeIds.add(cpuNodeForUrl.id);
+        continue;
+      }
+
+      // We couldn't find the evaluate script in the set of CPU nodes that ran before our paint, so
+      // it must not have been necessary for the paint.
+      definitelyNotRenderBlockingScriptUrls.add(url);
+    }
+
+    // The first layout, first paint, and first ParseHTML are almost always necessary for first paint,
+    // so we always include those CPU nodes.
+    const firstLayout = cpuNodes.find(node => node.didPerformLayout());
+    if (firstLayout) blockingCpuNodeIds.add(firstLayout.id);
+    const firstPaint = cpuNodes.find(node => node.childEvents.some(e => e.name === 'Paint'));
+    if (firstPaint) blockingCpuNodeIds.add(firstPaint.id);
+    const firstParse = cpuNodes.find(node => node.childEvents.some(e => e.name === 'ParseHTML'));
+    if (firstParse) blockingCpuNodeIds.add(firstParse.id);
+
+    // If a CPU filter was passed in, we also want to include those extra nodes.
+    if (extraBlockingCpuNodesToIncludeFilter) {
+      cpuNodes
+        .filter(extraBlockingCpuNodesToIncludeFilter)
+        .forEach(node => blockingCpuNodeIds.add(node.id));
+    }
+
+    return {
+      definitelyNotRenderBlockingScriptUrls,
+      blockingCpuNodeIds,
+    };
   }
 
   /**
+   * This function computes the graph required for the first paint of interest.
+   *
    * @param {Node} dependencyGraph
-   * @param {LH.Artifacts.TraceOfTab} traceOfTab
+   * @param {number} paintTs The timestamp used to filter out tasks that occured after our
+   *    paint of interest. Typically this is First Contentful Paint or First Meaningful Paint.
+   * @param {function(NetworkNode):boolean} blockingResourcesFilter The function that determines which resources
+   *    should be considered *possibly* render-blocking.
+   * @param {(function(CPUNode):boolean)=} extraBlockingCpuNodesToIncludeFilter The function that determines which CPU nodes
+   *    should also be included in our blocking node IDs set.
    * @return {Node}
    */
-  static getPessimisticGraph(dependencyGraph, traceOfTab) {
-    const fcp = traceOfTab.timestamps.firstContentfulPaint;
-    const blockingScriptUrls = LanternMetric.getScriptUrls(dependencyGraph, node => {
-      return node.endTime <= fcp && node.hasRenderBlockingPriority();
-    });
+  static getFirstPaintBasedGraph(
+      dependencyGraph,
+      paintTs,
+      blockingResourcesFilter,
+      extraBlockingCpuNodesToIncludeFilter
+  ) {
+    const {
+      definitelyNotRenderBlockingScriptUrls,
+      blockingCpuNodeIds,
+    } = this.getBlockingNodeData(
+      dependencyGraph,
+      paintTs,
+      blockingResourcesFilter,
+      extraBlockingCpuNodesToIncludeFilter
+    );
 
     return dependencyGraph.cloneWithRelationships(node => {
-      if (node.endTime > fcp && !node.isMainDocument()) return false;
-      // Include EvaluateScript tasks for blocking scripts
-      if (node.type === BaseNode.TYPES.CPU) {
-        return node.isEvaluateScriptFor(blockingScriptUrls);
-      }
+      if (node.type === BaseNode.TYPES.NETWORK) {
+        // Exclude all nodes that ended after paintTs (except for the main document which we always consider necessary)
+        if (node.endTime > paintTs && !node.isMainDocument()) return false;
 
-      // Include non-script-initiated network requests with a render-blocking priority
-      return node.hasRenderBlockingPriority();
+        const url = node.record.url;
+        // If the URL definitely wasn't render-blocking then we filter it out.
+        if (definitelyNotRenderBlockingScriptUrls.has(url)) {
+          return false;
+        }
+
+        return blockingResourcesFilter(node);
+      } else {
+        // If it's a CPU node, just check if it was blocking.
+        return blockingCpuNodeIds.has(node.id);
+      }
     });
   }
+
+  /**
+   * @param {Node} dependencyGraph
+   * @param {LH.Artifacts.TraceOfTab} traceOfTab
+   * @return {Node}
+   */
+  static getOptimisticGraph(dependencyGraph, traceOfTab) {
+    return this.getFirstPaintBasedGraph(
+      dependencyGraph,
+      traceOfTab.timestamps.firstContentfulPaint,
+      // In the optimistic graph we exclude resources that appeared to be render blocking but were
+      // initiated by a script. While they typically have a very high importance and tend to have a
+      // significant impact on the page's content, these resources don't technically block rendering.
+      node => node.hasRenderBlockingPriority() && node.initiatorType !== 'script'
+    );
+  }
+
+  /**
+   * @param {Node} dependencyGraph
+   * @param {LH.Artifacts.TraceOfTab} traceOfTab
+   * @return {Node}
+   */
+  static getPessimisticGraph(dependencyGraph, traceOfTab) {
+    return this.getFirstPaintBasedGraph(
+      dependencyGraph,
+      traceOfTab.timestamps.firstContentfulPaint,
+      node => node.hasRenderBlockingPriority()
+    );
+  }
 }
 
 module.exports = makeComputedArtifact(LanternFirstContentfulPaint);
diff --git a/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js b/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js
index eef535031..3206d87c4 100644
--- a/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js
+++ b/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js
@@ -7,11 +7,10 @@
 
 const makeComputedArtifact = require('../computed-artifact.js');
 const LanternMetric = require('./lantern-metric.js');
-const BaseNode = require('../../lib/dependency-graph/base-node.js');
 const LHError = require('../../lib/lh-error.js');
 const LanternFirstContentfulPaint = require('./lantern-first-contentful-paint.js');
 
-/** @typedef {BaseNode.Node} Node */
+/** @typedef {import('../../lib/dependency-graph/base-node.js').Node} Node */
 
 class LanternFirstMeaningfulPaint extends LanternMetric {
   /**
@@ -36,22 +35,13 @@ class LanternFirstMeaningfulPaint extends LanternMetric {
       throw new LHError(LHError.errors.NO_FMP);
     }
 
-    const blockingScriptUrls = LanternMetric.getScriptUrls(dependencyGraph, node => {
-      return (
-        node.endTime <= fmp && node.hasRenderBlockingPriority() && node.initiatorType !== 'script'
-      );
-    });
-
-    return dependencyGraph.cloneWithRelationships(node => {
-      if (node.endTime > fmp && !node.isMainDocument()) return false;
-      // Include EvaluateScript tasks for blocking scripts
-      if (node.type === BaseNode.TYPES.CPU) {
-        return node.isEvaluateScriptFor(blockingScriptUrls);
-      }
-
-      // Include non-script-initiated network requests with a render-blocking priority
-      return node.hasRenderBlockingPriority() && node.initiatorType !== 'script';
-    });
+    return LanternFirstContentfulPaint.getFirstPaintBasedGraph(
+      dependencyGraph,
+      fmp,
+      // See LanterFirstContentfulPaint's getOptimisticGraph implementation for a longer description
+      // of why we exclude script initiated resources here.
+      node => node.hasRenderBlockingPriority() && node.initiatorType !== 'script'
+    );
   }
 
   /**
@@ -65,21 +55,13 @@ class LanternFirstMeaningfulPaint extends LanternMetric {
       throw new LHError(LHError.errors.NO_FMP);
     }
 
-    const requiredScriptUrls = LanternMetric.getScriptUrls(dependencyGraph, node => {
-      return node.endTime <= fmp && node.hasRenderBlockingPriority();
-    });
-
-    return dependencyGraph.cloneWithRelationships(node => {
-      if (node.endTime > fmp && !node.isMainDocument()) return false;
-
-      // Include CPU tasks that performed a layout or were evaluations of required scripts
-      if (node.type === BaseNode.TYPES.CPU) {
-        return node.didPerformLayout() || node.isEvaluateScriptFor(requiredScriptUrls);
-      }
-
-      // Include all network requests that had render-blocking priority (even script-initiated)
-      return node.hasRenderBlockingPriority();
-    });
+    return LanternFirstContentfulPaint.getFirstPaintBasedGraph(
+      dependencyGraph,
+      fmp,
+      node => node.hasRenderBlockingPriority(),
+      // For pessimistic FMP we'll include *all* layout nodes
+      node => node.didPerformLayout()
+    );
   }
 
   /**
diff --git a/lighthouse-core/lib/dependency-graph/cpu-node.js b/lighthouse-core/lib/dependency-graph/cpu-node.js
index 6853fece2..205626129 100644
--- a/lighthouse-core/lib/dependency-graph/cpu-node.js
+++ b/lighthouse-core/lib/dependency-graph/cpu-node.js
@@ -61,16 +61,18 @@ class CPUNode extends BaseNode {
   }
 
   /**
-   * Returns true if this node contains the EvaluateScript task for a URL in the given set.
-   * @param {Set<string>} urls
-   * @return {boolean}
+   * Returns the script URLs that had their EvaluateScript events occur in this task.
    */
-  isEvaluateScriptFor(urls) {
-    return this._childEvents.some(evt => {
-      return evt.name === 'EvaluateScript' &&
-        !!evt.args.data && !!evt.args.data.url &&
-        urls.has(evt.args.data.url);
-    });
+  getEvaluateScriptURLs() {
+    /** @type {Set<string>} */
+    const urls = new Set();
+    for (const event of this._childEvents) {
+      if (event.name !== 'EvaluateScript') continue;
+      if (!event.args.data || !event.args.data.url) continue;
+      urls.add(event.args.data.url);
+    }
+
+    return urls;
   }
 
   /**
diff --git a/lighthouse-core/lib/network-request.js b/lighthouse-core/lib/network-request.js
index c1be94fed..b93c7eeb1 100644
--- a/lighthouse-core/lib/network-request.js
+++ b/lighthouse-core/lib/network-request.js
@@ -428,8 +428,41 @@ class NetworkRequest {
       return;
     }
 
+    // Init timing.
+    this.timing = {
+      requestTime: this.startTime,
+      proxyStart: -1,
+      proxyEnd: -1,
+      dnsStart: -1,
+      dnsEnd: -1,
+      connectStart: -1,
+      connectEnd: -1,
+      sslStart: -1,
+      sslEnd: -1,
+      workerStart: -1,
+      workerReady: -1,
+      sendStart: -1,
+      sendEnd: -1,
+      pushStart: -1,
+      pushEnd: -1,
+      receiveHeadersEnd: -1,
+    };
+
+    const origEnd = this.endTime;
+    // `this.endTime` and `this.responseReceivedTime` are in seconds, so convert from milliseconds.
+    this.endTime = this.startTime + (totalMs / 1000);
+    this.responseReceivedTime = this.startTime + ((TCPMs + requestMs) / 1000);
+
+    this.timing.connectStart = 0;
+    this.timing.connectEnd = TCPMs;
+    this.timing.sslStart = TCPMs - SSLMs;
+    this.timing.sslEnd = TCPMs;
+    this.timing.sendStart = TCPMs;
+    this.timing.sendEnd = TCPMs;
+    this.timing.receiveHeadersEnd = TCPMs + requestMs;
+
     this.lrStatistics = {
-      endTimeDeltaMs: (this.endTime - (this.startTime + (totalMs / 1000))) * 1000,
+      endTimeDeltaMs: (origEnd - this.endTime) * 1000,
       TCPMs: TCPMs,
       requestMs: requestMs,
       responseMs: responseMs,


Test patch:
diff --git a/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap b/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap
index 521cf8e64..0807e76b8 100644
--- a/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap
+++ b/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap
@@ -2,13 +2,13 @@
 
 exports[`Performance: metrics evaluates valid input correctly 1`] = `
 Object {
-  "estimatedInputLatency": 100,
+  "estimatedInputLatency": 78,
   "estimatedInputLatencyTs": undefined,
   "firstCPUIdle": 3351,
   "firstCPUIdleTs": undefined,
-  "firstContentfulPaint": 911,
+  "firstContentfulPaint": 1307,
   "firstContentfulPaintTs": undefined,
-  "firstMeaningfulPaint": 1355,
+  "firstMeaningfulPaint": 1511,
   "firstMeaningfulPaintTs": undefined,
   "interactive": 3427,
   "interactiveTs": undefined,
diff --git a/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap b/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap
index cbfec6fd4..e90454e11 100644
--- a/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap
+++ b/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap
@@ -3,20 +3,20 @@
 exports[`Performance: predictive performance audit should compute the predicted values 1`] = `
 Object {
   "optimisticEIL": 93,
-  "optimisticFCP": 911,
-  "optimisticFMP": 1211,
+  "optimisticFCP": 1307,
+  "optimisticFMP": 1439,
   "optimisticSI": 605,
   "optimisticTTFCPUI": 3351,
   "optimisticTTI": 3351,
-  "pessimisticEIL": 158,
-  "pessimisticFCP": 911,
-  "pessimisticFMP": 1498,
+  "pessimisticEIL": 101,
+  "pessimisticFCP": 1307,
+  "pessimisticFMP": 1583,
   "pessimisticSI": 1631,
   "pessimisticTTFCPUI": 3502,
   "pessimisticTTI": 3502,
-  "roughEstimateOfEIL": 100,
-  "roughEstimateOfFCP": 911,
-  "roughEstimateOfFMP": 1355,
+  "roughEstimateOfEIL": 78,
+  "roughEstimateOfFCP": 1307,
+  "roughEstimateOfFMP": 1511,
   "roughEstimateOfSI": 1657,
   "roughEstimateOfTTFCPUI": 3351,
   "roughEstimateOfTTI": 3427,
diff --git a/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap b/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap
index 9b02f95fd..4ca3dd6f7 100644
--- a/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap
+++ b/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap
@@ -2,7 +2,7 @@
 
 exports[`Performance: first-meaningful-paint audit computes FMP correctly for simulated 1`] = `
 Object {
-  "rawValue": 1354.506000038469,
-  "score": 1,
+  "rawValue": 1510.6100000208241,
+  "score": 0.99,
 }
 `;
diff --git a/lighthouse-core/test/audits/metrics/first-contentful-paint-3g-test.js b/lighthouse-core/test/audits/metrics/first-contentful-paint-3g-test.js
index b569abe2f..b231a304d 100644
--- a/lighthouse-core/test/audits/metrics/first-contentful-paint-3g-test.js
+++ b/lighthouse-core/test/audits/metrics/first-contentful-paint-3g-test.js
@@ -28,8 +28,8 @@ describe('Performance: first-contentful-paint-3g audit', () => {
     // Use InlineSnapshot here so changes to Lantern coefficients can be easily updated en masse
     expect({score: result.score, value: Math.round(result.rawValue)}).toMatchInlineSnapshot(`
 Object {
-  "score": 1,
-  "value": 1661,
+  "score": 0.99,
+  "value": 2057,
 }
 `);
   });
diff --git a/lighthouse-core/test/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap b/lighthouse-core/test/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap
index 350a5d8ee..d0fbfa566 100644
--- a/lighthouse-core/test/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap
+++ b/lighthouse-core/test/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap
@@ -3,7 +3,7 @@
 exports[`Metrics: EIL should compute a simulated value 1`] = `
 Object {
   "optimistic": 93,
-  "pessimistic": 158,
-  "timing": 100,
+  "pessimistic": 101,
+  "timing": 78,
 }
 `;
diff --git a/lighthouse-core/test/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap b/lighthouse-core/test/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap
index 36371a798..46952d9a1 100644
--- a/lighthouse-core/test/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap
+++ b/lighthouse-core/test/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap
@@ -2,8 +2,8 @@
 
 exports[`Metrics: FCP should compute a simulated value 1`] = `
 Object {
-  "optimistic": 911,
-  "pessimistic": 911,
-  "timing": 911,
+  "optimistic": 1307,
+  "pessimistic": 1307,
+  "timing": 1307,
 }
 `;
diff --git a/lighthouse-core/test/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap b/lighthouse-core/test/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap
index 073b65db0..a8e19ad40 100644
--- a/lighthouse-core/test/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap
+++ b/lighthouse-core/test/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap
@@ -2,8 +2,8 @@
 
 exports[`Metrics: FMP should compute a simulated value 1`] = `
 Object {
-  "optimistic": 1211,
-  "pessimistic": 1498,
-  "timing": 1355,
+  "optimistic": 1439,
+  "pessimistic": 1583,
+  "timing": 1511,
 }
 `;
diff --git a/lighthouse-core/test/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap b/lighthouse-core/test/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap
index a01fae4b9..39ee26a0e 100644
--- a/lighthouse-core/test/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap
+++ b/lighthouse-core/test/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap
@@ -3,7 +3,7 @@
 exports[`Metrics: Lantern EIL should compute a simulated value 1`] = `
 Object {
   "optimistic": 93,
-  "pessimistic": 158,
-  "timing": 100,
+  "pessimistic": 101,
+  "timing": 78,
 }
 `;
diff --git a/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap b/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap
index 74cb6de25..40de86a42 100644
--- a/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap
+++ b/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap
@@ -2,8 +2,8 @@
 
 exports[`Metrics: Lantern FCP should compute predicted value 1`] = `
 Object {
-  "optimistic": 911,
-  "pessimistic": 911,
-  "timing": 911,
+  "optimistic": 1307,
+  "pessimistic": 1307,
+  "timing": 1307,
 }
 `;
diff --git a/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap b/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap
index ac3469f50..cea3d8c16 100644
--- a/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap
+++ b/lighthouse-core/test/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap
@@ -2,8 +2,8 @@
 
 exports[`Metrics: Lantern FMP should compute predicted value 1`] = `
 Object {
-  "optimistic": 1211,
-  "pessimistic": 1498,
-  "timing": 1355,
+  "optimistic": 1439,
+  "pessimistic": 1583,
+  "timing": 1511,
 }
 `;
diff --git a/lighthouse-core/test/computed/metrics/first-meaningful-paint-test.js b/lighthouse-core/test/computed/metrics/first-meaningful-paint-test.js
index 28c0abc9e..659df99e9 100644
--- a/lighthouse-core/test/computed/metrics/first-meaningful-paint-test.js
+++ b/lighthouse-core/test/computed/metrics/first-meaningful-paint-test.js
@@ -51,8 +51,8 @@ describe('Metrics: FMP', () => {
       optimistic: Math.round(result.optimisticEstimate.timeInMs),
       pessimistic: Math.round(result.pessimisticEstimate.timeInMs),
     }).toMatchSnapshot();
-    assert.equal(result.optimisticEstimate.nodeTimings.size, 4);
-    assert.equal(result.pessimisticEstimate.nodeTimings.size, 7);
+    assert.equal(result.optimisticEstimate.nodeTimings.size, 5);
+    assert.equal(result.pessimisticEstimate.nodeTimings.size, 8);
     assert.ok(result.optimisticGraph, 'should have created optimistic graph');
     assert.ok(result.pessimisticGraph, 'should have created pessimistic graph');
   });
diff --git a/lighthouse-core/test/computed/metrics/lantern-first-meaningful-paint-test.js b/lighthouse-core/test/computed/metrics/lantern-first-meaningful-paint-test.js
index 1c5829894..e8de565ed 100644
--- a/lighthouse-core/test/computed/metrics/lantern-first-meaningful-paint-test.js
+++ b/lighthouse-core/test/computed/metrics/lantern-first-meaningful-paint-test.js
@@ -24,8 +24,8 @@ describe('Metrics: Lantern FMP', () => {
       optimistic: Math.round(result.optimisticEstimate.timeInMs),
       pessimistic: Math.round(result.pessimisticEstimate.timeInMs),
     }).toMatchSnapshot();
-    assert.equal(result.optimisticEstimate.nodeTimings.size, 4);
-    assert.equal(result.pessimisticEstimate.nodeTimings.size, 7);
+    assert.equal(result.optimisticEstimate.nodeTimings.size, 5);
+    assert.equal(result.pessimisticEstimate.nodeTimings.size, 8);
     assert.ok(result.optimisticGraph, 'should have created optimistic graph');
     assert.ok(result.pessimisticGraph, 'should have created pessimistic graph');
   });
diff --git a/lighthouse-core/test/fixtures/lantern-master-computed-values.json b/lighthouse-core/test/fixtures/lantern-master-computed-values.json
index 45a560f74..ec6b63803 100644
--- a/lighthouse-core/test/fixtures/lantern-master-computed-values.json
+++ b/lighthouse-core/test/fixtures/lantern-master-computed-values.json
@@ -1,33 +1,33 @@
 {
   "sites": [
-    {"url": "https://flipkart.com", "roughEstimateOfFCP": 2617, "optimisticFCP": 2617, "pessimisticFCP": 2617, "roughEstimateOfFMP": 5860, "optimisticFMP": 5860, "pessimisticFMP": 5860, "roughEstimateOfTTI": 11388, "optimisticTTI": 10263, "pessimisticTTI": 12513, "roughEstimateOfTTFCPUI": 10263, "optimisticTTFCPUI": 10263, "pessimisticTTFCPUI": 12513, "roughEstimateOfSI": 6613, "optimisticSI": 3687, "pessimisticSI": 2617, "roughEstimateOfEIL": 766, "optimisticEIL": 957, "pessimisticEIL": 957},
-    {"url": "https://vine.co/", "roughEstimateOfFCP": 1851, "optimisticFCP": 1851, "pessimisticFCP": 1851, "roughEstimateOfFMP": 2676, "optimisticFMP": 1851, "pessimisticFMP": 3501, "roughEstimateOfTTI": 7846, "optimisticTTI": 6822, "pessimisticTTI": 8869, "roughEstimateOfTTFCPUI": 6822, "optimisticTTFCPUI": 6822, "pessimisticTTFCPUI": 8869, "roughEstimateOfSI": 4097, "optimisticSI": 2246, "pessimisticSI": 1851, "roughEstimateOfEIL": 961, "optimisticEIL": 1202, "pessimisticEIL": 1202},
-    {"url": "https://weather.com/", "roughEstimateOfFCP": 5161, "optimisticFCP": 5161, "pessimisticFCP": 5161, "roughEstimateOfFMP": 5161, "optimisticFMP": 5161, "pessimisticFMP": 5161, "roughEstimateOfTTI": 25680, "optimisticTTI": 23104, "pessimisticTTI": 28255, "roughEstimateOfTTFCPUI": 23104, "optimisticTTFCPUI": 23104, "pessimisticTTFCPUI": 28255, "roughEstimateOfSI": 6691, "optimisticSI": 2561, "pessimisticSI": 5161, "roughEstimateOfEIL": 1648, "optimisticEIL": 2060, "pessimisticEIL": 2060},
+    {"url": "https://flipkart.com", "roughEstimateOfFCP": 2661, "optimisticFCP": 2661, "pessimisticFCP": 2661, "roughEstimateOfFMP": 5860, "optimisticFMP": 5860, "pessimisticFMP": 5860, "roughEstimateOfTTI": 11388, "optimisticTTI": 10263, "pessimisticTTI": 12513, "roughEstimateOfTTFCPUI": 10263, "optimisticTTFCPUI": 10263, "pessimisticTTFCPUI": 12513, "roughEstimateOfSI": 6642, "optimisticSI": 3687, "pessimisticSI": 2661, "roughEstimateOfEIL": 766, "optimisticEIL": 957, "pessimisticEIL": 957},
+    {"url": "https://vine.co/", "roughEstimateOfFCP": 1851, "optimisticFCP": 1851, "pessimisticFCP": 1851, "roughEstimateOfFMP": 4962, "optimisticFMP": 4962, "pessimisticFMP": 4962, "roughEstimateOfTTI": 7846, "optimisticTTI": 6822, "pessimisticTTI": 8869, "roughEstimateOfTTFCPUI": 6822, "optimisticTTFCPUI": 6822, "pessimisticTTFCPUI": 8869, "roughEstimateOfSI": 4097, "optimisticSI": 2246, "pessimisticSI": 1851, "roughEstimateOfEIL": 961, "optimisticEIL": 1202, "pessimisticEIL": 1202},
+    {"url": "https://weather.com/", "roughEstimateOfFCP": 2461, "optimisticFCP": 2461, "pessimisticFCP": 2461, "roughEstimateOfFMP": 2461, "optimisticFMP": 2461, "pessimisticFMP": 2461, "roughEstimateOfTTI": 25680, "optimisticTTI": 23104, "pessimisticTTI": 28255, "roughEstimateOfTTFCPUI": 23104, "optimisticTTFCPUI": 23104, "pessimisticTTFCPUI": 28255, "roughEstimateOfSI": 4936, "optimisticSI": 2561, "pessimisticSI": 2461, "roughEstimateOfEIL": 2146, "optimisticEIL": 2683, "pessimisticEIL": 2683},
     {"url": "http://www.4399.com/", "roughEstimateOfFCP": 3254, "optimisticFCP": 3254, "pessimisticFCP": 3254, "roughEstimateOfFMP": 3585, "optimisticFMP": 3585, "pessimisticFMP": 3585, "roughEstimateOfTTI": 4875, "optimisticTTI": 3585, "pessimisticTTI": 6165, "roughEstimateOfTTFCPUI": 3585, "optimisticTTFCPUI": 3296, "pessimisticTTFCPUI": 6165, "roughEstimateOfSI": 3254, "optimisticSI": 350, "pessimisticSI": 3254, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.4shared.com/", "roughEstimateOfFCP": 4037, "optimisticFCP": 4037, "pessimisticFCP": 4037, "roughEstimateOfFMP": 4037, "optimisticFMP": 4037, "pessimisticFMP": 4037, "roughEstimateOfTTI": 5217, "optimisticTTI": 4973, "pessimisticTTI": 5460, "roughEstimateOfTTFCPUI": 4973, "optimisticTTFCPUI": 4973, "pessimisticTTFCPUI": 5460, "roughEstimateOfSI": 4427, "optimisticSI": 1467, "pessimisticSI": 4037, "roughEstimateOfEIL": 51, "optimisticEIL": 63, "pessimisticEIL": 63},
-    {"url": "http://www.56.com/", "roughEstimateOfFCP": 3743, "optimisticFCP": 3743, "pessimisticFCP": 3743, "roughEstimateOfFMP": 3743, "optimisticFMP": 3743, "pessimisticFMP": 3743, "roughEstimateOfTTI": 10587, "optimisticTTI": 4248, "pessimisticTTI": 16926, "roughEstimateOfTTFCPUI": 4248, "optimisticTTFCPUI": 4248, "pessimisticTTFCPUI": 2226, "roughEstimateOfSI": 10467, "optimisticSI": 5917, "pessimisticSI": 3743, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
-    {"url": "http://www.58.com/", "roughEstimateOfFCP": 3881, "optimisticFCP": 3881, "pessimisticFCP": 3881, "roughEstimateOfFMP": 3881, "optimisticFMP": 3881, "pessimisticFMP": 3881, "roughEstimateOfTTI": 4805, "optimisticTTI": 4264, "pessimisticTTI": 5347, "roughEstimateOfTTFCPUI": 4264, "optimisticTTFCPUI": 4264, "pessimisticTTFCPUI": 5347, "roughEstimateOfSI": 7655, "optimisticSI": 3844, "pessimisticSI": 3881, "roughEstimateOfEIL": 45, "optimisticEIL": 56, "pessimisticEIL": 56},
+    {"url": "http://www.56.com/", "roughEstimateOfFCP": 3894, "optimisticFCP": 3894, "pessimisticFCP": 3894, "roughEstimateOfFMP": 3894, "optimisticFMP": 3894, "pessimisticFMP": 3894, "roughEstimateOfTTI": 10587, "optimisticTTI": 4248, "pessimisticTTI": 16926, "roughEstimateOfTTFCPUI": 4248, "optimisticTTFCPUI": 4248, "pessimisticTTFCPUI": 2226, "roughEstimateOfSI": 10565, "optimisticSI": 5917, "pessimisticSI": 3894, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
+    {"url": "http://www.58.com/", "roughEstimateOfFCP": 4249, "optimisticFCP": 4160, "pessimisticFCP": 4338, "roughEstimateOfFMP": 4249, "optimisticFMP": 4160, "pessimisticFMP": 4338, "roughEstimateOfTTI": 4805, "optimisticTTI": 4264, "pessimisticTTI": 5347, "roughEstimateOfTTFCPUI": 4264, "optimisticTTFCPUI": 4264, "pessimisticTTFCPUI": 5347, "roughEstimateOfSI": 7951, "optimisticSI": 3844, "pessimisticSI": 4338, "roughEstimateOfEIL": 29, "optimisticEIL": 16, "pessimisticEIL": 56},
     {"url": "http://www.7k7k.com/", "roughEstimateOfFCP": 5097, "optimisticFCP": 5091, "pessimisticFCP": 5102, "roughEstimateOfFMP": 5097, "optimisticFMP": 5091, "pessimisticFMP": 5102, "roughEstimateOfTTI": 9234, "optimisticTTI": 5966, "pessimisticTTI": 12502, "roughEstimateOfTTFCPUI": 5966, "optimisticTTFCPUI": 5966, "pessimisticTTFCPUI": 2780, "roughEstimateOfSI": 9554, "optimisticSI": 4634, "pessimisticSI": 5102, "roughEstimateOfEIL": 1669, "optimisticEIL": 2086, "pessimisticEIL": 2086},
     {"url": "http://www.addthis.com/", "roughEstimateOfFCP": 2843, "optimisticFCP": 2843, "pessimisticFCP": 2843, "roughEstimateOfFMP": 2843, "optimisticFMP": 2843, "pessimisticFMP": 2843, "roughEstimateOfTTI": 9096, "optimisticTTI": 8167, "pessimisticTTI": 10026, "roughEstimateOfTTFCPUI": 8167, "optimisticTTFCPUI": 8167, "pessimisticTTFCPUI": 10026, "roughEstimateOfSI": 3731, "optimisticSI": 1524, "pessimisticSI": 2843, "roughEstimateOfEIL": 167, "optimisticEIL": 209, "pessimisticEIL": 209},
     {"url": "http://www.alexa.com/", "roughEstimateOfFCP": 6525, "optimisticFCP": 6525, "pessimisticFCP": 6525, "roughEstimateOfFMP": 6847, "optimisticFMP": 6847, "pessimisticFMP": 6847, "roughEstimateOfTTI": 14402, "optimisticTTI": 13274, "pessimisticTTI": 15530, "roughEstimateOfTTFCPUI": 13274, "optimisticTTFCPUI": 13274, "pessimisticTTFCPUI": 15530, "roughEstimateOfSI": 7060, "optimisticSI": 2192, "pessimisticSI": 6525, "roughEstimateOfEIL": 416, "optimisticEIL": 520, "pessimisticEIL": 520},
     {"url": "http://www.amazon.co.jp/", "roughEstimateOfFCP": 3059, "optimisticFCP": 3059, "pessimisticFCP": 3059, "roughEstimateOfFMP": 3163, "optimisticFMP": 3059, "pessimisticFMP": 3268, "roughEstimateOfTTI": 7491, "optimisticTTI": 6221, "pessimisticTTI": 8761, "roughEstimateOfTTFCPUI": 6221, "optimisticTTFCPUI": 6221, "pessimisticTTFCPUI": 8761, "roughEstimateOfSI": 4791, "optimisticSI": 2181, "pessimisticSI": 3059, "roughEstimateOfEIL": 262, "optimisticEIL": 328, "pessimisticEIL": 328},
     {"url": "http://www.att.com/", "roughEstimateOfFCP": 4945, "optimisticFCP": 4133, "pessimisticFCP": 5758, "roughEstimateOfFMP": 6114, "optimisticFMP": 4917, "pessimisticFMP": 7311, "roughEstimateOfTTI": 28951, "optimisticTTI": 24396, "pessimisticTTI": 33505, "roughEstimateOfTTFCPUI": 24396, "optimisticTTFCPUI": 24396, "pessimisticTTFCPUI": 33505, "roughEstimateOfSI": 16106, "optimisticSI": 9009, "pessimisticSI": 5758, "roughEstimateOfEIL": 1542, "optimisticEIL": 1928, "pessimisticEIL": 1928},
-    {"url": "http://www.bing.com/", "roughEstimateOfFCP": 752, "optimisticFCP": 752, "pessimisticFCP": 752, "roughEstimateOfFMP": 1205, "optimisticFMP": 903, "pessimisticFMP": 1507, "roughEstimateOfTTI": 4849, "optimisticTTI": 4187, "pessimisticTTI": 5512, "roughEstimateOfTTFCPUI": 4187, "optimisticTTFCPUI": 4187, "pessimisticTTFCPUI": 5512, "roughEstimateOfSI": 2215, "optimisticSI": 1412, "pessimisticSI": 752, "roughEstimateOfEIL": 558, "optimisticEIL": 698, "pessimisticEIL": 698},
-    {"url": "http://www.blogspot.com/", "roughEstimateOfFCP": 3213, "optimisticFCP": 3213, "pessimisticFCP": 3213, "roughEstimateOfFMP": 3213, "optimisticFMP": 3213, "pessimisticFMP": 3213, "roughEstimateOfTTI": 3852, "optimisticTTI": 3794, "pessimisticTTI": 3910, "roughEstimateOfTTFCPUI": 3794, "optimisticTTFCPUI": 3794, "pessimisticTTFCPUI": 3910, "roughEstimateOfSI": 12019, "optimisticSI": 7272, "pessimisticSI": 3213, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
-    {"url": "http://www.brothersoft.com/", "roughEstimateOfFCP": 2310, "optimisticFCP": 2310, "pessimisticFCP": 2310, "roughEstimateOfFMP": 2930, "optimisticFMP": 2808, "pessimisticFMP": 3052, "roughEstimateOfTTI": 15168, "optimisticTTI": 13200, "pessimisticTTI": 17136, "roughEstimateOfTTFCPUI": 13200, "optimisticTTFCPUI": 13200, "pessimisticTTFCPUI": 17136, "roughEstimateOfSI": 4474, "optimisticSI": 2302, "pessimisticSI": 2310, "roughEstimateOfEIL": 636, "optimisticEIL": 795, "pessimisticEIL": 795},
+    {"url": "http://www.bing.com/", "roughEstimateOfFCP": 826, "optimisticFCP": 826, "pessimisticFCP": 826, "roughEstimateOfFMP": 1281, "optimisticFMP": 903, "pessimisticFMP": 1658, "roughEstimateOfTTI": 4849, "optimisticTTI": 4187, "pessimisticTTI": 5512, "roughEstimateOfTTFCPUI": 4187, "optimisticTTFCPUI": 4187, "pessimisticTTFCPUI": 5512, "roughEstimateOfSI": 2263, "optimisticSI": 1412, "pessimisticSI": 826, "roughEstimateOfEIL": 558, "optimisticEIL": 698, "pessimisticEIL": 698},
+    {"url": "http://www.blogspot.com/", "roughEstimateOfFCP": 3398, "optimisticFCP": 3398, "pessimisticFCP": 3398, "roughEstimateOfFMP": 3398, "optimisticFMP": 3398, "pessimisticFMP": 3398, "roughEstimateOfTTI": 3852, "optimisticTTI": 3794, "pessimisticTTI": 3910, "roughEstimateOfTTFCPUI": 3794, "optimisticTTFCPUI": 3794, "pessimisticTTFCPUI": 3910, "roughEstimateOfSI": 12140, "optimisticSI": 7272, "pessimisticSI": 3398, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
+    {"url": "http://www.brothersoft.com/", "roughEstimateOfFCP": 1860, "optimisticFCP": 1764, "pessimisticFCP": 1956, "roughEstimateOfFMP": 2626, "optimisticFMP": 2626, "pessimisticFMP": 2626, "roughEstimateOfTTI": 15168, "optimisticTTI": 13200, "pessimisticTTI": 17136, "roughEstimateOfTTFCPUI": 13200, "optimisticTTFCPUI": 13200, "pessimisticTTFCPUI": 17136, "roughEstimateOfSI": 4244, "optimisticSI": 2302, "pessimisticSI": 1956, "roughEstimateOfEIL": 636, "optimisticEIL": 795, "pessimisticEIL": 795},
     {"url": "http://www.china.com.cn/", "roughEstimateOfFCP": 4814, "optimisticFCP": 4166, "pessimisticFCP": 5462, "roughEstimateOfFMP": 4814, "optimisticFMP": 4166, "pessimisticFMP": 5462, "roughEstimateOfTTI": 6893, "optimisticTTI": 4773, "pessimisticTTI": 9012, "roughEstimateOfTTFCPUI": 4814, "optimisticTTFCPUI": 4773, "pessimisticTTFCPUI": 2707, "roughEstimateOfSI": 8687, "optimisticSI": 3848, "pessimisticSI": 5462, "roughEstimateOfEIL": 20, "optimisticEIL": 25, "pessimisticEIL": 25},
     {"url": "http://www.cnet.com/", "roughEstimateOfFCP": 2162, "optimisticFCP": 1980, "pessimisticFCP": 2343, "roughEstimateOfFMP": 2512, "optimisticFMP": 1980, "pessimisticFMP": 3044, "roughEstimateOfTTI": 24972, "optimisticTTI": 20714, "pessimisticTTI": 29229, "roughEstimateOfTTFCPUI": 20714, "optimisticTTFCPUI": 20714, "pessimisticTTFCPUI": 29229, "roughEstimateOfSI": 4616, "optimisticSI": 2388, "pessimisticSI": 2343, "roughEstimateOfEIL": 1061, "optimisticEIL": 1326, "pessimisticEIL": 1326},
     {"url": "http://www.cntv.cn/", "roughEstimateOfFCP": 3597, "optimisticFCP": 3597, "pessimisticFCP": 3597, "roughEstimateOfFMP": 3597, "optimisticFMP": 3597, "pessimisticFMP": 3597, "roughEstimateOfTTI": 3747, "optimisticTTI": 3597, "pessimisticTTI": 3897, "roughEstimateOfTTFCPUI": 3597, "optimisticTTFCPUI": 3597, "pessimisticTTFCPUI": 3897, "roughEstimateOfSI": 4475, "optimisticSI": 1705, "pessimisticSI": 3597, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.conduit.com/", "roughEstimateOfFCP": 2107, "optimisticFCP": 2107, "pessimisticFCP": 2107, "roughEstimateOfFMP": 2107, "optimisticFMP": 2107, "pessimisticFMP": 2107, "roughEstimateOfTTI": 2811, "optimisticTTI": 2409, "pessimisticTTI": 3212, "roughEstimateOfTTFCPUI": 2409, "optimisticTTFCPUI": 2409, "pessimisticTTFCPUI": 3212, "roughEstimateOfSI": 2929, "optimisticSI": 1292, "pessimisticSI": 2107, "roughEstimateOfEIL": 20, "optimisticEIL": 25, "pessimisticEIL": 25},
-    {"url": "http://www.craigslist.org/", "roughEstimateOfFCP": 3652, "optimisticFCP": 3534, "pessimisticFCP": 3769, "roughEstimateOfFMP": 5222, "optimisticFMP": 5101, "pessimisticFMP": 5343, "roughEstimateOfTTI": 5222, "optimisticTTI": 5101, "pessimisticTTI": 5343, "roughEstimateOfTTFCPUI": 5222, "optimisticTTFCPUI": 4801, "pessimisticTTFCPUI": 5343, "roughEstimateOfSI": 4068, "optimisticSI": 1334, "pessimisticSI": 3769, "roughEstimateOfEIL": 97, "optimisticEIL": 16, "pessimisticEIL": 227},
+    {"url": "http://www.craigslist.org/", "roughEstimateOfFCP": 3541, "optimisticFCP": 3534, "pessimisticFCP": 3548, "roughEstimateOfFMP": 5222, "optimisticFMP": 5101, "pessimisticFMP": 5343, "roughEstimateOfTTI": 5222, "optimisticTTI": 5101, "pessimisticTTI": 5343, "roughEstimateOfTTFCPUI": 5222, "optimisticTTFCPUI": 4801, "pessimisticTTFCPUI": 5343, "roughEstimateOfSI": 3925, "optimisticSI": 1334, "pessimisticSI": 3548, "roughEstimateOfEIL": 97, "optimisticEIL": 16, "pessimisticEIL": 227},
     {"url": "http://www.dawn.com/", "roughEstimateOfFCP": 3514, "optimisticFCP": 3295, "pessimisticFCP": 3733, "roughEstimateOfFMP": 3514, "optimisticFMP": 3295, "pessimisticFMP": 3733, "roughEstimateOfTTI": 16175, "optimisticTTI": 13751, "pessimisticTTI": 18599, "roughEstimateOfTTFCPUI": 13751, "optimisticTTFCPUI": 13751, "pessimisticTTFCPUI": 18599, "roughEstimateOfSI": 5317, "optimisticSI": 2243, "pessimisticSI": 3733, "roughEstimateOfEIL": 298, "optimisticEIL": 373, "pessimisticEIL": 373},
     {"url": "http://www.depositfiles.com/", "roughEstimateOfFCP": 8437, "optimisticFCP": 8437, "pessimisticFCP": 8437, "roughEstimateOfFMP": 8437, "optimisticFMP": 8437, "pessimisticFMP": 8437, "roughEstimateOfTTI": 9701, "optimisticTTI": 9551, "pessimisticTTI": 9851, "roughEstimateOfTTFCPUI": 8437, "optimisticTTFCPUI": 1075, "pessimisticTTFCPUI": 1173, "roughEstimateOfSI": 13239, "optimisticSI": 5718, "pessimisticSI": 8437, "roughEstimateOfEIL": 273, "optimisticEIL": 341, "pessimisticEIL": 341},
     {"url": "http://www.deviantart.com/", "roughEstimateOfFCP": 4321, "optimisticFCP": 4321, "pessimisticFCP": 4321, "roughEstimateOfFMP": 5712, "optimisticFMP": 5712, "pessimisticFMP": 5712, "roughEstimateOfTTI": 32691, "optimisticTTI": 21101, "pessimisticTTI": 44282, "roughEstimateOfTTFCPUI": 9961, "optimisticTTFCPUI": 9961, "pessimisticTTFCPUI": 9961, "roughEstimateOfSI": 6071, "optimisticSI": 2509, "pessimisticSI": 4321, "roughEstimateOfEIL": 624, "optimisticEIL": 780, "pessimisticEIL": 780},
-    {"url": "http://www.dion.ne.jp/", "roughEstimateOfFCP": 8318, "optimisticFCP": 5602, "pessimisticFCP": 11033, "roughEstimateOfFMP": 8318, "optimisticFMP": 5602, "pessimisticFMP": 11033, "roughEstimateOfTTI": 26723, "optimisticTTI": 14518, "pessimisticTTI": 38929, "roughEstimateOfTTFCPUI": 14518, "optimisticTTFCPUI": 14518, "pessimisticTTFCPUI": 26881, "roughEstimateOfSI": 18212, "optimisticSI": 8065, "pessimisticSI": 11033, "roughEstimateOfEIL": 1028, "optimisticEIL": 1285, "pessimisticEIL": 1285},
+    {"url": "http://www.dion.ne.jp/", "roughEstimateOfFCP": 8384, "optimisticFCP": 5734, "pessimisticFCP": 11033, "roughEstimateOfFMP": 8384, "optimisticFMP": 5734, "pessimisticFMP": 11033, "roughEstimateOfTTI": 26723, "optimisticTTI": 14518, "pessimisticTTI": 38929, "roughEstimateOfTTFCPUI": 14518, "optimisticTTFCPUI": 14518, "pessimisticTTFCPUI": 26881, "roughEstimateOfSI": 18212, "optimisticSI": 8065, "pessimisticSI": 11033, "roughEstimateOfEIL": 1028, "optimisticEIL": 1285, "pessimisticEIL": 1285},
     {"url": "http://www.domaintools.com/", "roughEstimateOfFCP": 1599, "optimisticFCP": 1599, "pessimisticFCP": 1599, "roughEstimateOfFMP": 2750, "optimisticFMP": 2469, "pessimisticFMP": 3031, "roughEstimateOfTTI": 8329, "optimisticTTI": 8077, "pessimisticTTI": 8581, "roughEstimateOfTTFCPUI": 8077, "optimisticTTFCPUI": 8077, "pessimisticTTFCPUI": 8581, "roughEstimateOfSI": 9504, "optimisticSI": 6225, "pessimisticSI": 1599, "roughEstimateOfEIL": 920, "optimisticEIL": 617, "pessimisticEIL": 1682},
     {"url": "http://www.douban.com/", "roughEstimateOfFCP": 6832, "optimisticFCP": 6832, "pessimisticFCP": 6832, "roughEstimateOfFMP": 6832, "optimisticFMP": 6832, "pessimisticFMP": 6832, "roughEstimateOfTTI": 7997, "optimisticTTI": 7676, "pessimisticTTI": 8318, "roughEstimateOfTTFCPUI": 7676, "optimisticTTFCPUI": 7676, "pessimisticTTFCPUI": 8318, "roughEstimateOfSI": 10560, "optimisticSI": 4549, "pessimisticSI": 6832, "roughEstimateOfEIL": 558, "optimisticEIL": 697, "pessimisticEIL": 697},
     {"url": "http://www.ebay.com/", "roughEstimateOfFCP": 2985, "optimisticFCP": 2985, "pessimisticFCP": 2985, "roughEstimateOfFMP": 2985, "optimisticFMP": 2985, "pessimisticFMP": 2985, "roughEstimateOfTTI": 8555, "optimisticTTI": 7746, "pessimisticTTI": 9364, "roughEstimateOfTTFCPUI": 7746, "optimisticTTFCPUI": 7746, "pessimisticTTFCPUI": 9364, "roughEstimateOfSI": 4313, "optimisticSI": 1873, "pessimisticSI": 2985, "roughEstimateOfEIL": 187, "optimisticEIL": 233, "pessimisticEIL": 233},
-    {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 5979, "optimisticFCP": 4082, "pessimisticFCP": 7876, "roughEstimateOfFMP": 6547, "optimisticFMP": 4461, "pessimisticFMP": 8633, "roughEstimateOfTTI": 14549, "optimisticTTI": 7912, "pessimisticTTI": 21185, "roughEstimateOfTTFCPUI": 7912, "optimisticTTFCPUI": 7912, "pessimisticTTFCPUI": 4400, "roughEstimateOfSI": 10318, "optimisticSI": 3892, "pessimisticSI": 7876, "roughEstimateOfEIL": 258, "optimisticEIL": 322, "pessimisticEIL": 322},
+    {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 6055, "optimisticFCP": 4233, "pessimisticFCP": 7876, "roughEstimateOfFMP": 6547, "optimisticFMP": 4461, "pessimisticFMP": 8633, "roughEstimateOfTTI": 14549, "optimisticTTI": 7912, "pessimisticTTI": 21185, "roughEstimateOfTTFCPUI": 7912, "optimisticTTFCPUI": 7912, "pessimisticTTFCPUI": 4400, "roughEstimateOfSI": 10318, "optimisticSI": 3892, "pessimisticSI": 7876, "roughEstimateOfEIL": 258, "optimisticEIL": 322, "pessimisticEIL": 322},
     {"url": "http://www.espn.com/", "roughEstimateOfFCP": 2706, "optimisticFCP": 2706, "pessimisticFCP": 2706, "roughEstimateOfFMP": 3653, "optimisticFMP": 2706, "pessimisticFMP": 4600, "roughEstimateOfTTI": 24654, "optimisticTTI": 21544, "pessimisticTTI": 27764, "roughEstimateOfTTFCPUI": 21544, "optimisticTTFCPUI": 21544, "pessimisticTTFCPUI": 26146, "roughEstimateOfSI": 4175, "optimisticSI": 1904, "pessimisticSI": 2706, "roughEstimateOfEIL": 1316, "optimisticEIL": 1645, "pessimisticEIL": 1645},
     {"url": "http://www.facebook.com/", "roughEstimateOfFCP": 3485, "optimisticFCP": 3485, "pessimisticFCP": 3485, "roughEstimateOfFMP": 3485, "optimisticFMP": 3485, "pessimisticFMP": 3485, "roughEstimateOfTTI": 5230, "optimisticTTI": 4621, "pessimisticTTI": 5838, "roughEstimateOfTTFCPUI": 4621, "optimisticTTFCPUI": 4621, "pessimisticTTFCPUI": 5838, "roughEstimateOfSI": 4254, "optimisticSI": 1599, "pessimisticSI": 3485, "roughEstimateOfEIL": 65, "optimisticEIL": 82, "pessimisticEIL": 82},
     {"url": "http://www.fc2.com/", "roughEstimateOfFCP": 3142, "optimisticFCP": 3142, "pessimisticFCP": 3142, "roughEstimateOfFMP": 3142, "optimisticFMP": 3142, "pessimisticFMP": 3142, "roughEstimateOfTTI": 3439, "optimisticTTI": 3340, "pessimisticTTI": 3538, "roughEstimateOfTTFCPUI": 3340, "optimisticTTFCPUI": 3340, "pessimisticTTFCPUI": 3538, "roughEstimateOfSI": 3816, "optimisticSI": 1446, "pessimisticSI": 3142, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
@@ -35,31 +35,31 @@
     {"url": "http://www.foxnews.com/", "roughEstimateOfFCP": 3188, "optimisticFCP": 3188, "pessimisticFCP": 3188, "roughEstimateOfFMP": 3188, "optimisticFMP": 3188, "pessimisticFMP": 3188, "roughEstimateOfTTI": 30683, "optimisticTTI": 22636, "pessimisticTTI": 38731, "roughEstimateOfTTFCPUI": 22636, "optimisticTTFCPUI": 22636, "pessimisticTTFCPUI": 29570, "roughEstimateOfSI": 11505, "optimisticSI": 6916, "pessimisticSI": 3188, "roughEstimateOfEIL": 731, "optimisticEIL": 914, "pessimisticEIL": 914},
     {"url": "http://www.getpersonas.com/", "roughEstimateOfFCP": 4232, "optimisticFCP": 4221, "pessimisticFCP": 4244, "roughEstimateOfFMP": 6497, "optimisticFMP": 6497, "pessimisticFMP": 6497, "roughEstimateOfTTI": 11146, "optimisticTTI": 9569, "pessimisticTTI": 12722, "roughEstimateOfTTFCPUI": 9569, "optimisticTTFCPUI": 9569, "pessimisticTTFCPUI": 12722, "roughEstimateOfSI": 4621, "optimisticSI": 1509, "pessimisticSI": 4244, "roughEstimateOfEIL": 1510, "optimisticEIL": 1888, "pessimisticEIL": 1888},
     {"url": "http://www.globo.com/", "roughEstimateOfFCP": 3289, "optimisticFCP": 3289, "pessimisticFCP": 3289, "roughEstimateOfFMP": 3733, "optimisticFMP": 3557, "pessimisticFMP": 3910, "roughEstimateOfTTI": 20256, "optimisticTTI": 17348, "pessimisticTTI": 23164, "roughEstimateOfTTFCPUI": 17348, "optimisticTTFCPUI": 17348, "pessimisticTTFCPUI": 23164, "roughEstimateOfSI": 4859, "optimisticSI": 2122, "pessimisticSI": 3289, "roughEstimateOfEIL": 2070, "optimisticEIL": 2588, "pessimisticEIL": 2588},
-    {"url": "http://www.gmx.net/", "roughEstimateOfFCP": 1837, "optimisticFCP": 1837, "pessimisticFCP": 1837, "roughEstimateOfFMP": 1837, "optimisticFMP": 1837, "pessimisticFMP": 1837, "roughEstimateOfTTI": 8828, "optimisticTTI": 7677, "pessimisticTTI": 9980, "roughEstimateOfTTFCPUI": 7677, "optimisticTTFCPUI": 7677, "pessimisticTTFCPUI": 9980, "roughEstimateOfSI": 5165, "optimisticSI": 3015, "pessimisticSI": 1837, "roughEstimateOfEIL": 453, "optimisticEIL": 566, "pessimisticEIL": 566},
+    {"url": "http://www.gmx.net/", "roughEstimateOfFCP": 2029, "optimisticFCP": 2029, "pessimisticFCP": 2029, "roughEstimateOfFMP": 2029, "optimisticFMP": 2029, "pessimisticFMP": 2029, "roughEstimateOfTTI": 8828, "optimisticTTI": 7677, "pessimisticTTI": 9980, "roughEstimateOfTTFCPUI": 7677, "optimisticTTFCPUI": 7677, "pessimisticTTFCPUI": 9980, "roughEstimateOfSI": 5290, "optimisticSI": 3015, "pessimisticSI": 2029, "roughEstimateOfEIL": 453, "optimisticEIL": 566, "pessimisticEIL": 566},
     {"url": "http://www.hatena.ne.jp/", "roughEstimateOfFCP": 1451, "optimisticFCP": 1325, "pessimisticFCP": 1576, "roughEstimateOfFMP": 1788, "optimisticFMP": 1788, "pessimisticFMP": 1788, "roughEstimateOfTTI": 24920, "optimisticTTI": 13420, "pessimisticTTI": 36420, "roughEstimateOfTTFCPUI": 13420, "optimisticTTFCPUI": 13420, "pessimisticTTFCPUI": 4439, "roughEstimateOfSI": 4725, "optimisticSI": 2821, "pessimisticSI": 1576, "roughEstimateOfEIL": 211, "optimisticEIL": 264, "pessimisticEIL": 264},
     {"url": "http://www.hexun.com/", "roughEstimateOfFCP": 4178, "optimisticFCP": 4178, "pessimisticFCP": 4178, "roughEstimateOfFMP": 5394, "optimisticFMP": 4178, "pessimisticFMP": 6609, "roughEstimateOfTTI": 6974, "optimisticTTI": 6840, "pessimisticTTI": 7107, "roughEstimateOfTTFCPUI": 6840, "optimisticTTFCPUI": 6840, "pessimisticTTFCPUI": 7107, "roughEstimateOfSI": 13345, "optimisticSI": 7771, "pessimisticSI": 4178, "roughEstimateOfEIL": 42, "optimisticEIL": 16, "pessimisticEIL": 88},
-    {"url": "http://www.hotfile.com/", "roughEstimateOfFCP": 4984, "optimisticFCP": 4276, "pessimisticFCP": 5692, "roughEstimateOfFMP": 4984, "optimisticFMP": 4276, "pessimisticFMP": 5692, "roughEstimateOfTTI": 7976, "optimisticTTI": 6213, "pessimisticTTI": 9740, "roughEstimateOfTTFCPUI": 6213, "optimisticTTFCPUI": 6213, "pessimisticTTFCPUI": 9740, "roughEstimateOfSI": 10180, "optimisticSI": 4807, "pessimisticSI": 5692, "roughEstimateOfEIL": 104, "optimisticEIL": 126, "pessimisticEIL": 134},
-    {"url": "http://www.hp.com/", "roughEstimateOfFCP": 8671, "optimisticFCP": 7087, "pessimisticFCP": 10255, "roughEstimateOfFMP": 9844, "optimisticFMP": 8298, "pessimisticFMP": 11390, "roughEstimateOfTTI": 17358, "optimisticTTI": 15882, "pessimisticTTI": 18834, "roughEstimateOfTTFCPUI": 15882, "optimisticTTFCPUI": 15882, "pessimisticTTFCPUI": 18834, "roughEstimateOfSI": 9773, "optimisticSI": 2398, "pessimisticSI": 10255, "roughEstimateOfEIL": 333, "optimisticEIL": 315, "pessimisticEIL": 517},
+    {"url": "http://www.hotfile.com/", "roughEstimateOfFCP": 5063, "optimisticFCP": 4434, "pessimisticFCP": 5692, "roughEstimateOfFMP": 5063, "optimisticFMP": 4434, "pessimisticFMP": 5692, "roughEstimateOfTTI": 7976, "optimisticTTI": 6213, "pessimisticTTI": 9740, "roughEstimateOfTTFCPUI": 6213, "optimisticTTFCPUI": 6213, "pessimisticTTFCPUI": 9740, "roughEstimateOfSI": 10180, "optimisticSI": 4807, "pessimisticSI": 5692, "roughEstimateOfEIL": 104, "optimisticEIL": 126, "pessimisticEIL": 134},
+    {"url": "http://www.hp.com/", "roughEstimateOfFCP": 8465, "optimisticFCP": 6953, "pessimisticFCP": 9978, "roughEstimateOfFMP": 9844, "optimisticFMP": 8298, "pessimisticFMP": 11390, "roughEstimateOfTTI": 17358, "optimisticTTI": 15882, "pessimisticTTI": 18834, "roughEstimateOfTTFCPUI": 15882, "optimisticTTFCPUI": 15882, "pessimisticTTFCPUI": 18834, "roughEstimateOfSI": 9592, "optimisticSI": 2398, "pessimisticSI": 9978, "roughEstimateOfEIL": 333, "optimisticEIL": 315, "pessimisticEIL": 517},
     {"url": "http://www.huffingtonpost.com/", "roughEstimateOfFCP": 3346, "optimisticFCP": 3346, "pessimisticFCP": 3346, "roughEstimateOfFMP": 3346, "optimisticFMP": 3346, "pessimisticFMP": 3346, "roughEstimateOfTTI": 20925, "optimisticTTI": 17455, "pessimisticTTI": 24396, "roughEstimateOfTTFCPUI": 17455, "optimisticTTFCPUI": 17455, "pessimisticTTFCPUI": 16115, "roughEstimateOfSI": 4689, "optimisticSI": 1974, "pessimisticSI": 3346, "roughEstimateOfEIL": 337, "optimisticEIL": 421, "pessimisticEIL": 421},
-    {"url": "http://www.hulu.com/", "roughEstimateOfFCP": 12159, "optimisticFCP": 9521, "pessimisticFCP": 14797, "roughEstimateOfFMP": 14120, "optimisticFMP": 10300, "pessimisticFMP": 17940, "roughEstimateOfTTI": 23027, "optimisticTTI": 20599, "pessimisticTTI": 25456, "roughEstimateOfTTFCPUI": 20599, "optimisticTTFCPUI": 20599, "pessimisticTTFCPUI": 25456, "roughEstimateOfSI": 15130, "optimisticSI": 4115, "pessimisticSI": 14797, "roughEstimateOfEIL": 1254, "optimisticEIL": 1300, "pessimisticEIL": 1835},
+    {"url": "http://www.hulu.com/", "roughEstimateOfFCP": 12256, "optimisticFCP": 9521, "pessimisticFCP": 14992, "roughEstimateOfFMP": 14218, "optimisticFMP": 10495, "pessimisticFMP": 17940, "roughEstimateOfTTI": 23027, "optimisticTTI": 20599, "pessimisticTTI": 25456, "roughEstimateOfTTFCPUI": 20599, "optimisticTTFCPUI": 20599, "pessimisticTTFCPUI": 25456, "roughEstimateOfSI": 15256, "optimisticSI": 4115, "pessimisticSI": 14992, "roughEstimateOfEIL": 1254, "optimisticEIL": 1300, "pessimisticEIL": 1835},
     {"url": "http://www.iciba.com/", "roughEstimateOfFCP": 1445, "optimisticFCP": 1445, "pessimisticFCP": 1445, "roughEstimateOfFMP": 1445, "optimisticFMP": 1445, "pessimisticFMP": 1445, "roughEstimateOfTTI": 3517, "optimisticTTI": 3030, "pessimisticTTI": 4004, "roughEstimateOfTTFCPUI": 3030, "optimisticTTFCPUI": 3030, "pessimisticTTFCPUI": 4004, "roughEstimateOfSI": 5012, "optimisticSI": 3088, "pessimisticSI": 1445, "roughEstimateOfEIL": 394, "optimisticEIL": 492, "pessimisticEIL": 492},
-    {"url": "http://www.ifeng.com/", "roughEstimateOfFCP": 3534, "optimisticFCP": 3534, "pessimisticFCP": 3534, "roughEstimateOfFMP": 3534, "optimisticFMP": 3534, "pessimisticFMP": 3534, "roughEstimateOfTTI": 5355, "optimisticTTI": 3534, "pessimisticTTI": 7177, "roughEstimateOfTTFCPUI": 3534, "optimisticTTFCPUI": 3494, "pessimisticTTFCPUI": 7177, "roughEstimateOfSI": 3534, "optimisticSI": 879, "pessimisticSI": 3534, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
+    {"url": "http://www.ifeng.com/", "roughEstimateOfFCP": 3576, "optimisticFCP": 3534, "pessimisticFCP": 3619, "roughEstimateOfFMP": 3576, "optimisticFMP": 3534, "pessimisticFMP": 3619, "roughEstimateOfTTI": 5355, "optimisticTTI": 3534, "pessimisticTTI": 7177, "roughEstimateOfTTFCPUI": 3576, "optimisticTTFCPUI": 3494, "pessimisticTTFCPUI": 7177, "roughEstimateOfSI": 3576, "optimisticSI": 879, "pessimisticSI": 3619, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.imageshack.us/", "roughEstimateOfFCP": 7087, "optimisticFCP": 6859, "pessimisticFCP": 7315, "roughEstimateOfFMP": 7087, "optimisticFMP": 6859, "pessimisticFMP": 7315, "roughEstimateOfTTI": 9115, "optimisticTTI": 8965, "pessimisticTTI": 9265, "roughEstimateOfTTFCPUI": 8965, "optimisticTTFCPUI": 8965, "pessimisticTTFCPUI": 9265, "roughEstimateOfSI": 7087, "optimisticSI": 1817, "pessimisticSI": 7315, "roughEstimateOfEIL": 1491, "optimisticEIL": 1864, "pessimisticEIL": 1864},
     {"url": "http://www.irs.gov/", "roughEstimateOfFCP": 2757, "optimisticFCP": 2757, "pessimisticFCP": 2757, "roughEstimateOfFMP": 3906, "optimisticFMP": 3706, "pessimisticFMP": 4106, "roughEstimateOfTTI": 11072, "optimisticTTI": 10097, "pessimisticTTI": 12047, "roughEstimateOfTTFCPUI": 10097, "optimisticTTFCPUI": 10097, "pessimisticTTFCPUI": 12047, "roughEstimateOfSI": 3559, "optimisticSI": 1440, "pessimisticSI": 2757, "roughEstimateOfEIL": 213, "optimisticEIL": 255, "pessimisticEIL": 277},
     {"url": "http://www.java.com/", "roughEstimateOfFCP": 1268, "optimisticFCP": 1268, "pessimisticFCP": 1268, "roughEstimateOfFMP": 1268, "optimisticFMP": 1268, "pessimisticFMP": 1268, "roughEstimateOfTTI": 3189, "optimisticTTI": 2510, "pessimisticTTI": 3868, "roughEstimateOfTTFCPUI": 2510, "optimisticTTFCPUI": 2510, "pessimisticTTFCPUI": 3868, "roughEstimateOfSI": 2372, "optimisticSI": 1284, "pessimisticSI": 1268, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.linkedin.com/", "roughEstimateOfFCP": 4621, "optimisticFCP": 4621, "pessimisticFCP": 4621, "roughEstimateOfFMP": 4621, "optimisticFMP": 4621, "pessimisticFMP": 4621, "roughEstimateOfTTI": 5034, "optimisticTTI": 4875, "pessimisticTTI": 5193, "roughEstimateOfTTFCPUI": 4875, "optimisticTTFCPUI": 4875, "pessimisticTTFCPUI": 5193, "roughEstimateOfSI": 4621, "optimisticSI": 1074, "pessimisticSI": 4621, "roughEstimateOfEIL": 1598, "optimisticEIL": 1998, "pessimisticEIL": 1998},
-    {"url": "http://www.livedoor.jp/", "roughEstimateOfFCP": 3285, "optimisticFCP": 3084, "pessimisticFCP": 3485, "roughEstimateOfFMP": 3285, "optimisticFMP": 3084, "pessimisticFMP": 3485, "roughEstimateOfTTI": 15652, "optimisticTTI": 12720, "pessimisticTTI": 18583, "roughEstimateOfTTFCPUI": 12720, "optimisticTTFCPUI": 12720, "pessimisticTTFCPUI": 18583, "roughEstimateOfSI": 7979, "optimisticSI": 4260, "pessimisticSI": 3485, "roughEstimateOfEIL": 246, "optimisticEIL": 307, "pessimisticEIL": 307},
+    {"url": "http://www.livedoor.jp/", "roughEstimateOfFCP": 3084, "optimisticFCP": 3084, "pessimisticFCP": 3084, "roughEstimateOfFMP": 3084, "optimisticFMP": 3084, "pessimisticFMP": 3084, "roughEstimateOfTTI": 15652, "optimisticTTI": 12720, "pessimisticTTI": 18583, "roughEstimateOfTTFCPUI": 12720, "optimisticTTFCPUI": 12720, "pessimisticTTFCPUI": 18583, "roughEstimateOfSI": 7718, "optimisticSI": 4260, "pessimisticSI": 3084, "roughEstimateOfEIL": 246, "optimisticEIL": 307, "pessimisticEIL": 307},
     {"url": "http://www.liveperson.net/", "roughEstimateOfFCP": 11037, "optimisticFCP": 10841, "pessimisticFCP": 11234, "roughEstimateOfFMP": 11724, "optimisticFMP": 11626, "pessimisticFMP": 11822, "roughEstimateOfTTI": 25782, "optimisticTTI": 19603, "pessimisticTTI": 31961, "roughEstimateOfTTFCPUI": 11724, "optimisticTTFCPUI": 10882, "pessimisticTTFCPUI": 14138, "roughEstimateOfSI": 11037, "optimisticSI": 2248, "pessimisticSI": 11234, "roughEstimateOfEIL": 370, "optimisticEIL": 463, "pessimisticEIL": 463},
     {"url": "http://www.mail.ru/", "roughEstimateOfFCP": 5150, "optimisticFCP": 5150, "pessimisticFCP": 5150, "roughEstimateOfFMP": 5150, "optimisticFMP": 5150, "pessimisticFMP": 5150, "roughEstimateOfTTI": 10964, "optimisticTTI": 9846, "pessimisticTTI": 12082, "roughEstimateOfTTFCPUI": 9846, "optimisticTTFCPUI": 9846, "pessimisticTTFCPUI": 12082, "roughEstimateOfSI": 8487, "optimisticSI": 3849, "pessimisticSI": 5150, "roughEstimateOfEIL": 38, "optimisticEIL": 48, "pessimisticEIL": 48},
     {"url": "http://www.maktoob.com/", "roughEstimateOfFCP": 4278, "optimisticFCP": 4278, "pessimisticFCP": 4278, "roughEstimateOfFMP": 4278, "optimisticFMP": 4278, "pessimisticFMP": 4278, "roughEstimateOfTTI": 11438, "optimisticTTI": 10732, "pessimisticTTI": 12145, "roughEstimateOfTTFCPUI": 10732, "optimisticTTFCPUI": 10732, "pessimisticTTFCPUI": 12145, "roughEstimateOfSI": 5496, "optimisticSI": 2118, "pessimisticSI": 4278, "roughEstimateOfEIL": 265, "optimisticEIL": 332, "pessimisticEIL": 332},
     {"url": "http://www.marketgid.com/", "roughEstimateOfFCP": 3552, "optimisticFCP": 3552, "pessimisticFCP": 3552, "roughEstimateOfFMP": 6083, "optimisticFMP": 6083, "pessimisticFMP": 6083, "roughEstimateOfTTI": 8648, "optimisticTTI": 7823, "pessimisticTTI": 9473, "roughEstimateOfTTFCPUI": 7823, "optimisticTTFCPUI": 7823, "pessimisticTTFCPUI": 9473, "roughEstimateOfSI": 5185, "optimisticSI": 2233, "pessimisticSI": 3552, "roughEstimateOfEIL": 226, "optimisticEIL": 283, "pessimisticEIL": 283},
-    {"url": "http://www.metacafe.com/", "roughEstimateOfFCP": 1848, "optimisticFCP": 1848, "pessimisticFCP": 1848, "roughEstimateOfFMP": 1849, "optimisticFMP": 1848, "pessimisticFMP": 1850, "roughEstimateOfTTI": 15342, "optimisticTTI": 13549, "pessimisticTTI": 17134, "roughEstimateOfTTFCPUI": 13549, "optimisticTTFCPUI": 13549, "pessimisticTTFCPUI": 17134, "roughEstimateOfSI": 2902, "optimisticSI": 1393, "pessimisticSI": 1848, "roughEstimateOfEIL": 361, "optimisticEIL": 451, "pessimisticEIL": 451},
+    {"url": "http://www.metacafe.com/", "roughEstimateOfFCP": 1848, "optimisticFCP": 1848, "pessimisticFCP": 1848, "roughEstimateOfFMP": 2048, "optimisticFMP": 2047, "pessimisticFMP": 2049, "roughEstimateOfTTI": 15342, "optimisticTTI": 13549, "pessimisticTTI": 17134, "roughEstimateOfTTFCPUI": 13549, "optimisticTTFCPUI": 13549, "pessimisticTTFCPUI": 17134, "roughEstimateOfSI": 2902, "optimisticSI": 1393, "pessimisticSI": 1848, "roughEstimateOfEIL": 361, "optimisticEIL": 451, "pessimisticEIL": 451},
     {"url": "http://www.metrolyrics.com/", "roughEstimateOfFCP": 3155, "optimisticFCP": 3056, "pessimisticFCP": 3254, "roughEstimateOfFMP": 3155, "optimisticFMP": 3056, "pessimisticFMP": 3254, "roughEstimateOfTTI": 57192, "optimisticTTI": 39593, "pessimisticTTI": 74790, "roughEstimateOfTTFCPUI": 39593, "optimisticTTFCPUI": 39593, "pessimisticTTFCPUI": 15704, "roughEstimateOfSI": 15355, "optimisticSI": 9636, "pessimisticSI": 3254, "roughEstimateOfEIL": 1134, "optimisticEIL": 1417, "pessimisticEIL": 1417},
     {"url": "http://www.mlb.com/", "roughEstimateOfFCP": 3023, "optimisticFCP": 2724, "pessimisticFCP": 3322, "roughEstimateOfFMP": 3023, "optimisticFMP": 2724, "pessimisticFMP": 3322, "roughEstimateOfTTI": 30460, "optimisticTTI": 26219, "pessimisticTTI": 34700, "roughEstimateOfTTFCPUI": 8141, "optimisticTTFCPUI": 8141, "pessimisticTTFCPUI": 8792, "roughEstimateOfSI": 7632, "optimisticSI": 4088, "pessimisticSI": 3322, "roughEstimateOfEIL": 689, "optimisticEIL": 861, "pessimisticEIL": 861},
     {"url": "http://www.mop.com/", "roughEstimateOfFCP": 6918, "optimisticFCP": 6380, "pessimisticFCP": 7456, "roughEstimateOfFMP": 6918, "optimisticFMP": 6380, "pessimisticFMP": 7456, "roughEstimateOfTTI": 21136, "optimisticTTI": 10735, "pessimisticTTI": 31536, "roughEstimateOfTTFCPUI": 10735, "optimisticTTFCPUI": 10735, "pessimisticTTFCPUI": 3194, "roughEstimateOfSI": 10204, "optimisticSI": 4006, "pessimisticSI": 7456, "roughEstimateOfEIL": 828, "optimisticEIL": 1035, "pessimisticEIL": 1035},
     {"url": "http://www.mozilla.org/", "roughEstimateOfFCP": 2111, "optimisticFCP": 1755, "pessimisticFCP": 2466, "roughEstimateOfFMP": 2487, "optimisticFMP": 1755, "pessimisticFMP": 3219, "roughEstimateOfTTI": 4300, "optimisticTTI": 4150, "pessimisticTTI": 4449, "roughEstimateOfTTFCPUI": 4150, "optimisticTTFCPUI": 4150, "pessimisticTTFCPUI": 4449, "roughEstimateOfSI": 2993, "optimisticSI": 1172, "pessimisticSI": 2466, "roughEstimateOfEIL": 842, "optimisticEIL": 1053, "pessimisticEIL": 1053},
     {"url": "http://www.msn.com/", "roughEstimateOfFCP": 2465, "optimisticFCP": 2465, "pessimisticFCP": 2465, "roughEstimateOfFMP": 2563, "optimisticFMP": 2465, "pessimisticFMP": 2661, "roughEstimateOfTTI": 11341, "optimisticTTI": 9536, "pessimisticTTI": 13147, "roughEstimateOfTTFCPUI": 9536, "optimisticTTFCPUI": 9536, "pessimisticTTFCPUI": 13147, "roughEstimateOfSI": 4081, "optimisticSI": 1949, "pessimisticSI": 2465, "roughEstimateOfEIL": 283, "optimisticEIL": 353, "pessimisticEIL": 353},
-    {"url": "http://www.netflix.com/", "roughEstimateOfFCP": 2504, "optimisticFCP": 2504, "pessimisticFCP": 2504, "roughEstimateOfFMP": 2504, "optimisticFMP": 2504, "pessimisticFMP": 2504, "roughEstimateOfTTI": 6172, "optimisticTTI": 5613, "pessimisticTTI": 6731, "roughEstimateOfTTFCPUI": 5613, "optimisticTTFCPUI": 5613, "pessimisticTTFCPUI": 6731, "roughEstimateOfSI": 3356, "optimisticSI": 1413, "pessimisticSI": 2504, "roughEstimateOfEIL": 393, "optimisticEIL": 491, "pessimisticEIL": 491},
+    {"url": "http://www.netflix.com/", "roughEstimateOfFCP": 2909, "optimisticFCP": 2909, "pessimisticFCP": 2909, "roughEstimateOfFMP": 2909, "optimisticFMP": 2909, "pessimisticFMP": 2909, "roughEstimateOfTTI": 6172, "optimisticTTI": 5613, "pessimisticTTI": 6731, "roughEstimateOfTTFCPUI": 5613, "optimisticTTFCPUI": 5613, "pessimisticTTFCPUI": 6731, "roughEstimateOfSI": 3620, "optimisticSI": 1413, "pessimisticSI": 2909, "roughEstimateOfEIL": 98, "optimisticEIL": 123, "pessimisticEIL": 123},
     {"url": "http://www.nih.gov/", "roughEstimateOfFCP": 4440, "optimisticFCP": 3999, "pessimisticFCP": 4882, "roughEstimateOfFMP": 4440, "optimisticFMP": 3999, "pessimisticFMP": 4882, "roughEstimateOfTTI": 6450, "optimisticTTI": 5884, "pessimisticTTI": 7016, "roughEstimateOfTTFCPUI": 5884, "optimisticTTFCPUI": 5884, "pessimisticTTFCPUI": 7016, "roughEstimateOfSI": 6852, "optimisticSI": 2807, "pessimisticSI": 4882, "roughEstimateOfEIL": 129, "optimisticEIL": 162, "pessimisticEIL": 162},
     {"url": "http://www.ning.com/", "roughEstimateOfFCP": 2711, "optimisticFCP": 2711, "pessimisticFCP": 2711, "roughEstimateOfFMP": 3004, "optimisticFMP": 3004, "pessimisticFMP": 3004, "roughEstimateOfTTI": 13436, "optimisticTTI": 11659, "pessimisticTTI": 15214, "roughEstimateOfTTFCPUI": 11659, "optimisticTTFCPUI": 11659, "pessimisticTTFCPUI": 15214, "roughEstimateOfSI": 3793, "optimisticSI": 1629, "pessimisticSI": 2711, "roughEstimateOfEIL": 274, "optimisticEIL": 343, "pessimisticEIL": 343},
     {"url": "http://www.nokia.com/", "roughEstimateOfFCP": 5687, "optimisticFCP": 5687, "pessimisticFCP": 5687, "roughEstimateOfFMP": 5888, "optimisticFMP": 5888, "pessimisticFMP": 5888, "roughEstimateOfTTI": 12469, "optimisticTTI": 11132, "pessimisticTTI": 13806, "roughEstimateOfTTFCPUI": 11132, "optimisticTTFCPUI": 11132, "pessimisticTTFCPUI": 13806, "roughEstimateOfSI": 6343, "optimisticSI": 2069, "pessimisticSI": 5687, "roughEstimateOfEIL": 211, "optimisticEIL": 264, "pessimisticEIL": 264},
@@ -70,11 +70,11 @@
     {"url": "http://www.orkut.com/", "roughEstimateOfFCP": 1463, "optimisticFCP": 1420, "pessimisticFCP": 1506, "roughEstimateOfFMP": 1463, "optimisticFMP": 1420, "pessimisticFMP": 1506, "roughEstimateOfTTI": 2036, "optimisticTTI": 2036, "pessimisticTTI": 2036, "roughEstimateOfTTFCPUI": 2036, "optimisticTTFCPUI": 2036, "pessimisticTTFCPUI": 2036, "roughEstimateOfSI": 1952, "optimisticSI": 873, "pessimisticSI": 1506, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.partypoker.com/", "roughEstimateOfFCP": 5630, "optimisticFCP": 5484, "pessimisticFCP": 5776, "roughEstimateOfFMP": 5630, "optimisticFMP": 5484, "pessimisticFMP": 5776, "roughEstimateOfTTI": 17073, "optimisticTTI": 13145, "pessimisticTTI": 21001, "roughEstimateOfTTFCPUI": 13145, "optimisticTTFCPUI": 13145, "pessimisticTTFCPUI": 12013, "roughEstimateOfSI": 10885, "optimisticSI": 5272, "pessimisticSI": 5776, "roughEstimateOfEIL": 220, "optimisticEIL": 275, "pessimisticEIL": 275},
     {"url": "http://www.pcpop.com/", "roughEstimateOfFCP": 2710, "optimisticFCP": 2710, "pessimisticFCP": 2711, "roughEstimateOfFMP": 2710, "optimisticFMP": 2710, "pessimisticFMP": 2711, "roughEstimateOfTTI": 7595, "optimisticTTI": 4791, "pessimisticTTI": 10400, "roughEstimateOfTTFCPUI": 4791, "optimisticTTFCPUI": 4791, "pessimisticTTFCPUI": 10400, "roughEstimateOfSI": 5771, "optimisticSI": 3042, "pessimisticSI": 2711, "roughEstimateOfEIL": 80, "optimisticEIL": 100, "pessimisticEIL": 100},
-    {"url": "http://www.pdfqueen.com/", "roughEstimateOfFCP": 2642, "optimisticFCP": 2457, "pessimisticFCP": 2828, "roughEstimateOfFMP": 2642, "optimisticFMP": 2457, "pessimisticFMP": 2828, "roughEstimateOfTTI": 3953, "optimisticTTI": 3803, "pessimisticTTI": 4103, "roughEstimateOfTTFCPUI": 3803, "optimisticTTFCPUI": 3803, "pessimisticTTFCPUI": 4103, "roughEstimateOfSI": 2730, "optimisticSI": 816, "pessimisticSI": 2828, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
+    {"url": "http://www.pdfqueen.com/", "roughEstimateOfFCP": 2549, "optimisticFCP": 2271, "pessimisticFCP": 2828, "roughEstimateOfFMP": 2549, "optimisticFMP": 2271, "pessimisticFMP": 2828, "roughEstimateOfTTI": 3953, "optimisticTTI": 3803, "pessimisticTTI": 4103, "roughEstimateOfTTFCPUI": 3803, "optimisticTTFCPUI": 3803, "pessimisticTTFCPUI": 4103, "roughEstimateOfSI": 2730, "optimisticSI": 816, "pessimisticSI": 2828, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.pptv.com/", "roughEstimateOfFCP": 2925, "optimisticFCP": 2925, "pessimisticFCP": 2925, "roughEstimateOfFMP": 2925, "optimisticFMP": 2925, "pessimisticFMP": 2925, "roughEstimateOfTTI": 8687, "optimisticTTI": 6979, "pessimisticTTI": 10394, "roughEstimateOfTTFCPUI": 6979, "optimisticTTFCPUI": 6979, "pessimisticTTFCPUI": 10394, "roughEstimateOfSI": 11800, "optimisticSI": 7249, "pessimisticSI": 2925, "roughEstimateOfEIL": 623, "optimisticEIL": 779, "pessimisticEIL": 779},
     {"url": "http://www.rakuten.co.jp/", "roughEstimateOfFCP": 3655, "optimisticFCP": 3655, "pessimisticFCP": 3655, "roughEstimateOfFMP": 3655, "optimisticFMP": 3655, "pessimisticFMP": 3655, "roughEstimateOfTTI": 22747, "optimisticTTI": 13628, "pessimisticTTI": 31866, "roughEstimateOfTTFCPUI": 13628, "optimisticTTFCPUI": 13628, "pessimisticTTFCPUI": 20858, "roughEstimateOfSI": 5651, "optimisticSI": 2518, "pessimisticSI": 3655, "roughEstimateOfEIL": 1283, "optimisticEIL": 1604, "pessimisticEIL": 1604},
     {"url": "http://www.rakuten.ne.jp/", "roughEstimateOfFCP": 2750, "optimisticFCP": 2686, "pessimisticFCP": 2813, "roughEstimateOfFMP": 2750, "optimisticFMP": 2686, "pessimisticFMP": 2813, "roughEstimateOfTTI": 23108, "optimisticTTI": 13257, "pessimisticTTI": 32958, "roughEstimateOfTTFCPUI": 13257, "optimisticTTFCPUI": 13257, "pessimisticTTFCPUI": 18764, "roughEstimateOfSI": 4733, "optimisticSI": 2253, "pessimisticSI": 2813, "roughEstimateOfEIL": 1719, "optimisticEIL": 2149, "pessimisticEIL": 2149},
-    {"url": "http://www.scribd.com/", "roughEstimateOfFCP": 2622, "optimisticFCP": 2622, "pessimisticFCP": 2622, "roughEstimateOfFMP": 3809, "optimisticFMP": 3808, "pessimisticFMP": 3810, "roughEstimateOfTTI": 12577, "optimisticTTI": 11222, "pessimisticTTI": 13931, "roughEstimateOfTTFCPUI": 11222, "optimisticTTFCPUI": 11222, "pessimisticTTFCPUI": 13931, "roughEstimateOfSI": 3776, "optimisticSI": 1658, "pessimisticSI": 2622, "roughEstimateOfEIL": 833, "optimisticEIL": 1041, "pessimisticEIL": 1041},
+    {"url": "http://www.scribd.com/", "roughEstimateOfFCP": 2622, "optimisticFCP": 2622, "pessimisticFCP": 2622, "roughEstimateOfFMP": 3810, "optimisticFMP": 3810, "pessimisticFMP": 3810, "roughEstimateOfTTI": 12577, "optimisticTTI": 11222, "pessimisticTTI": 13931, "roughEstimateOfTTFCPUI": 11222, "optimisticTTFCPUI": 11222, "pessimisticTTFCPUI": 13931, "roughEstimateOfSI": 3776, "optimisticSI": 1658, "pessimisticSI": 2622, "roughEstimateOfEIL": 833, "optimisticEIL": 1041, "pessimisticEIL": 1041},
     {"url": "http://www.shopping.com/", "roughEstimateOfFCP": 2287, "optimisticFCP": 2287, "pessimisticFCP": 2287, "roughEstimateOfFMP": 2287, "optimisticFMP": 2287, "pessimisticFMP": 2287, "roughEstimateOfTTI": 2595, "optimisticTTI": 2432, "pessimisticTTI": 2758, "roughEstimateOfTTFCPUI": 2432, "optimisticTTFCPUI": 2432, "pessimisticTTFCPUI": 2758, "roughEstimateOfSI": 2499, "optimisticSI": 902, "pessimisticSI": 2287, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
     {"url": "http://www.skype.com/", "roughEstimateOfFCP": 4362, "optimisticFCP": 4362, "pessimisticFCP": 4362, "roughEstimateOfFMP": 4362, "optimisticFMP": 4362, "pessimisticFMP": 4362, "roughEstimateOfTTI": 7554, "optimisticTTI": 6470, "pessimisticTTI": 8638, "roughEstimateOfTTFCPUI": 6470, "optimisticTTFCPUI": 6470, "pessimisticTTFCPUI": 8638, "roughEstimateOfSI": 5568, "optimisticSI": 2131, "pessimisticSI": 4362, "roughEstimateOfEIL": 111, "optimisticEIL": 139, "pessimisticEIL": 139},
     {"url": "http://www.so-net.ne.jp/", "roughEstimateOfFCP": 4713, "optimisticFCP": 3769, "pessimisticFCP": 5658, "roughEstimateOfFMP": 4713, "optimisticFMP": 3769, "pessimisticFMP": 5658, "roughEstimateOfTTI": 12178, "optimisticTTI": 10944, "pessimisticTTI": 13411, "roughEstimateOfTTFCPUI": 10944, "optimisticTTFCPUI": 10944, "pessimisticTTFCPUI": 13411, "roughEstimateOfSI": 8667, "optimisticSI": 3742, "pessimisticSI": 5658, "roughEstimateOfEIL": 1798, "optimisticEIL": 2248, "pessimisticEIL": 2248},
@@ -82,22 +82,22 @@
     {"url": "http://www.sogou.com/", "roughEstimateOfFCP": 2804, "optimisticFCP": 2804, "pessimisticFCP": 2804, "roughEstimateOfFMP": 2804, "optimisticFMP": 2804, "pessimisticFMP": 2804, "roughEstimateOfTTI": 5086, "optimisticTTI": 4122, "pessimisticTTI": 6050, "roughEstimateOfTTFCPUI": 4122, "optimisticTTFCPUI": 4122, "pessimisticTTFCPUI": 6050, "roughEstimateOfSI": 6731, "optimisticSI": 3684, "pessimisticSI": 2804, "roughEstimateOfEIL": 261, "optimisticEIL": 326, "pessimisticEIL": 326},
     {"url": "http://www.soso.com/", "roughEstimateOfFCP": 2211, "optimisticFCP": 2090, "pessimisticFCP": 2333, "roughEstimateOfFMP": 2211, "optimisticFMP": 2090, "pessimisticFMP": 2333, "roughEstimateOfTTI": 6223, "optimisticTTI": 4540, "pessimisticTTI": 7906, "roughEstimateOfTTFCPUI": 4540, "optimisticTTFCPUI": 4540, "pessimisticTTFCPUI": 5672, "roughEstimateOfSI": 4821, "optimisticSI": 2539, "pessimisticSI": 2333, "roughEstimateOfEIL": 434, "optimisticEIL": 543, "pessimisticEIL": 543},
     {"url": "http://www.symantec.com/", "roughEstimateOfFCP": 4183, "optimisticFCP": 4183, "pessimisticFCP": 4183, "roughEstimateOfFMP": 4183, "optimisticFMP": 4183, "pessimisticFMP": 4183, "roughEstimateOfTTI": 17098, "optimisticTTI": 13508, "pessimisticTTI": 20688, "roughEstimateOfTTFCPUI": 13508, "optimisticTTFCPUI": 13508, "pessimisticTTFCPUI": 20688, "roughEstimateOfSI": 7229, "optimisticSI": 3400, "pessimisticSI": 4183, "roughEstimateOfEIL": 2678, "optimisticEIL": 3348, "pessimisticEIL": 3348},
-    {"url": "http://www.t-online.de/", "roughEstimateOfFCP": 4653, "optimisticFCP": 4365, "pessimisticFCP": 4941, "roughEstimateOfFMP": 5684, "optimisticFMP": 4365, "pessimisticFMP": 7003, "roughEstimateOfTTI": 25870, "optimisticTTI": 23649, "pessimisticTTI": 28090, "roughEstimateOfTTFCPUI": 23649, "optimisticTTFCPUI": 23649, "pessimisticTTFCPUI": 28090, "roughEstimateOfSI": 9637, "optimisticSI": 4768, "pessimisticSI": 4941, "roughEstimateOfEIL": 397, "optimisticEIL": 497, "pessimisticEIL": 497},
+    {"url": "http://www.t-online.de/", "roughEstimateOfFCP": 4728, "optimisticFCP": 4365, "pessimisticFCP": 5091, "roughEstimateOfFMP": 5759, "optimisticFMP": 4365, "pessimisticFMP": 7153, "roughEstimateOfTTI": 25870, "optimisticTTI": 23649, "pessimisticTTI": 28090, "roughEstimateOfTTFCPUI": 23649, "optimisticTTFCPUI": 23649, "pessimisticTTFCPUI": 28090, "roughEstimateOfSI": 9735, "optimisticSI": 4768, "pessimisticSI": 5091, "roughEstimateOfEIL": 397, "optimisticEIL": 497, "pessimisticEIL": 497},
     {"url": "http://www.tabelog.com/", "roughEstimateOfFCP": 4037, "optimisticFCP": 3223, "pessimisticFCP": 4851, "roughEstimateOfFMP": 4037, "optimisticFMP": 3223, "pessimisticFMP": 4851, "roughEstimateOfTTI": 13232, "optimisticTTI": 10615, "pessimisticTTI": 15849, "roughEstimateOfTTFCPUI": 10615, "optimisticTTFCPUI": 10615, "pessimisticTTFCPUI": 15849, "roughEstimateOfSI": 11052, "optimisticSI": 5820, "pessimisticSI": 4851, "roughEstimateOfEIL": 418, "optimisticEIL": 522, "pessimisticEIL": 522},
     {"url": "http://www.thefreedictionary.com/", "roughEstimateOfFCP": 1696, "optimisticFCP": 1696, "pessimisticFCP": 1696, "roughEstimateOfFMP": 1696, "optimisticFMP": 1696, "pessimisticFMP": 1696, "roughEstimateOfTTI": 21979, "optimisticTTI": 17974, "pessimisticTTI": 25983, "roughEstimateOfTTFCPUI": 17974, "optimisticTTFCPUI": 17974, "pessimisticTTFCPUI": 18220, "roughEstimateOfSI": 3323, "optimisticSI": 1765, "pessimisticSI": 1696, "roughEstimateOfEIL": 523, "optimisticEIL": 654, "pessimisticEIL": 654},
     {"url": "http://www.thepiratebay.org/", "roughEstimateOfFCP": 3239, "optimisticFCP": 3239, "pessimisticFCP": 3239, "roughEstimateOfFMP": 3239, "optimisticFMP": 3239, "pessimisticFMP": 3239, "roughEstimateOfTTI": 5377, "optimisticTTI": 5002, "pessimisticTTI": 5752, "roughEstimateOfTTFCPUI": 5002, "optimisticTTFCPUI": 5002, "pessimisticTTFCPUI": 5752, "roughEstimateOfSI": 11137, "optimisticSI": 6630, "pessimisticSI": 3239, "roughEstimateOfEIL": 85, "optimisticEIL": 106, "pessimisticEIL": 106},
-    {"url": "http://www.thestar.com.my", "roughEstimateOfFCP": 6037, "optimisticFCP": 5960, "pessimisticFCP": 6114, "roughEstimateOfFMP": 6531, "optimisticFMP": 5960, "pessimisticFMP": 7101, "roughEstimateOfTTI": 14839, "optimisticTTI": 11719, "pessimisticTTI": 17959, "roughEstimateOfTTFCPUI": 11719, "optimisticTTFCPUI": 11719, "pessimisticTTFCPUI": 17959, "roughEstimateOfSI": 11724, "optimisticSI": 5714, "pessimisticSI": 6114, "roughEstimateOfEIL": 275, "optimisticEIL": 344, "pessimisticEIL": 344},
-    {"url": "http://www.tianya.cn/", "roughEstimateOfFCP": 1894, "optimisticFCP": 1894, "pessimisticFCP": 1894, "roughEstimateOfFMP": 1894, "optimisticFMP": 1894, "pessimisticFMP": 1894, "roughEstimateOfTTI": 6999, "optimisticTTI": 6062, "pessimisticTTI": 7936, "roughEstimateOfTTFCPUI": 6062, "optimisticTTFCPUI": 6062, "pessimisticTTFCPUI": 7936, "roughEstimateOfSI": 9288, "optimisticSI": 5933, "pessimisticSI": 1894, "roughEstimateOfEIL": 2076, "optimisticEIL": 2595, "pessimisticEIL": 2595},
+    {"url": "http://www.thestar.com.my", "roughEstimateOfFCP": 5944, "optimisticFCP": 5774, "pessimisticFCP": 6114, "roughEstimateOfFMP": 6531, "optimisticFMP": 5960, "pessimisticFMP": 7101, "roughEstimateOfTTI": 14839, "optimisticTTI": 11719, "pessimisticTTI": 17959, "roughEstimateOfTTFCPUI": 11719, "optimisticTTFCPUI": 11719, "pessimisticTTFCPUI": 17959, "roughEstimateOfSI": 11724, "optimisticSI": 5714, "pessimisticSI": 6114, "roughEstimateOfEIL": 275, "optimisticEIL": 344, "pessimisticEIL": 344},
+    {"url": "http://www.tianya.cn/", "roughEstimateOfFCP": 2328, "optimisticFCP": 2326, "pessimisticFCP": 2331, "roughEstimateOfFMP": 2328, "optimisticFMP": 2326, "pessimisticFMP": 2331, "roughEstimateOfTTI": 6999, "optimisticTTI": 6062, "pessimisticTTI": 7936, "roughEstimateOfTTFCPUI": 6062, "optimisticTTFCPUI": 6062, "pessimisticTTFCPUI": 7936, "roughEstimateOfSI": 9571, "optimisticSI": 5933, "pessimisticSI": 2331, "roughEstimateOfEIL": 2076, "optimisticEIL": 2595, "pessimisticEIL": 2595},
     {"url": "http://www.torrentz.com/", "roughEstimateOfFCP": 605, "optimisticFCP": 605, "pessimisticFCP": 605, "roughEstimateOfFMP": 605, "optimisticFMP": 605, "pessimisticFMP": 605, "roughEstimateOfTTI": 995, "optimisticTTI": 972, "pessimisticTTI": 1017, "roughEstimateOfTTFCPUI": 972, "optimisticTTFCPUI": 972, "pessimisticTTFCPUI": 1067, "roughEstimateOfSI": 1225, "optimisticSI": 773, "pessimisticSI": 605, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
-    {"url": "http://www.tumblr.com/", "roughEstimateOfFCP": 6914, "optimisticFCP": 6914, "pessimisticFCP": 6914, "roughEstimateOfFMP": 6914, "optimisticFMP": 6914, "pessimisticFMP": 6914, "roughEstimateOfTTI": 11811, "optimisticTTI": 11516, "pessimisticTTI": 12106, "roughEstimateOfTTFCPUI": 11516, "optimisticTTFCPUI": 11516, "pessimisticTTFCPUI": 12106, "roughEstimateOfSI": 6914, "optimisticSI": 1280, "pessimisticSI": 6914, "roughEstimateOfEIL": 2035, "optimisticEIL": 2544, "pessimisticEIL": 2544},
+    {"url": "http://www.tumblr.com/", "roughEstimateOfFCP": 3569, "optimisticFCP": 3569, "pessimisticFCP": 3569, "roughEstimateOfFMP": 3569, "optimisticFMP": 3569, "pessimisticFMP": 3569, "roughEstimateOfTTI": 11811, "optimisticTTI": 11516, "pessimisticTTI": 12106, "roughEstimateOfTTFCPUI": 11516, "optimisticTTFCPUI": 11516, "pessimisticTTFCPUI": 12106, "roughEstimateOfSI": 3861, "optimisticSI": 1280, "pessimisticSI": 3569, "roughEstimateOfEIL": 2035, "optimisticEIL": 2544, "pessimisticEIL": 2544},
     {"url": "http://www.twitpic.com/", "roughEstimateOfFCP": 2177, "optimisticFCP": 2177, "pessimisticFCP": 2177, "roughEstimateOfFMP": 6139, "optimisticFMP": 6139, "pessimisticFMP": 6139, "roughEstimateOfTTI": 7864, "optimisticTTI": 7789, "pessimisticTTI": 7939, "roughEstimateOfTTFCPUI": 7789, "optimisticTTFCPUI": 7789, "pessimisticTTFCPUI": 7939, "roughEstimateOfSI": 3168, "optimisticSI": 1431, "pessimisticSI": 2177, "roughEstimateOfEIL": 981, "optimisticEIL": 1226, "pessimisticEIL": 1226},
     {"url": "http://www.typepad.com/", "roughEstimateOfFCP": 3182, "optimisticFCP": 2126, "pessimisticFCP": 4238, "roughEstimateOfFMP": 3343, "optimisticFMP": 2447, "pessimisticFMP": 4238, "roughEstimateOfTTI": 4421, "optimisticTTI": 3726, "pessimisticTTI": 5117, "roughEstimateOfTTFCPUI": 3726, "optimisticTTFCPUI": 3726, "pessimisticTTFCPUI": 5117, "roughEstimateOfSI": 3852, "optimisticSI": 962, "pessimisticSI": 4238, "roughEstimateOfEIL": 108, "optimisticEIL": 16, "pessimisticEIL": 253},
     {"url": "http://www.verizonwireless.com/", "roughEstimateOfFCP": 2901, "optimisticFCP": 2901, "pessimisticFCP": 2901, "roughEstimateOfFMP": 3654, "optimisticFMP": 3654, "pessimisticFMP": 3654, "roughEstimateOfTTI": 16050, "optimisticTTI": 13945, "pessimisticTTI": 18155, "roughEstimateOfTTFCPUI": 13945, "optimisticTTFCPUI": 13945, "pessimisticTTFCPUI": 18155, "roughEstimateOfSI": 3827, "optimisticSI": 1565, "pessimisticSI": 2901, "roughEstimateOfEIL": 931, "optimisticEIL": 1164, "pessimisticEIL": 1164},
-    {"url": "http://www.vevo.com/", "roughEstimateOfFCP": 2111, "optimisticFCP": 2111, "pessimisticFCP": 2111, "roughEstimateOfFMP": 2968, "optimisticFMP": 2968, "pessimisticFMP": 2968, "roughEstimateOfTTI": 24456, "optimisticTTI": 19423, "pessimisticTTI": 29489, "roughEstimateOfTTFCPUI": 19423, "optimisticTTFCPUI": 19423, "pessimisticTTFCPUI": 20335, "roughEstimateOfSI": 4367, "optimisticSI": 2318, "pessimisticSI": 2111, "roughEstimateOfEIL": 2218, "optimisticEIL": 2772, "pessimisticEIL": 2772},
-    {"url": "http://www.weather.com/", "roughEstimateOfFCP": 6576, "optimisticFCP": 6576, "pessimisticFCP": 6576, "roughEstimateOfFMP": 6576, "optimisticFMP": 6576, "pessimisticFMP": 6576, "roughEstimateOfTTI": 28454, "optimisticTTI": 25240, "pessimisticTTI": 31668, "roughEstimateOfTTFCPUI": 25240, "optimisticTTFCPUI": 25240, "pessimisticTTFCPUI": 31668, "roughEstimateOfSI": 8517, "optimisticSI": 3209, "pessimisticSI": 6576, "roughEstimateOfEIL": 1338, "optimisticEIL": 1672, "pessimisticEIL": 1672},
+    {"url": "http://www.vevo.com/", "roughEstimateOfFCP": 2261, "optimisticFCP": 2261, "pessimisticFCP": 2261, "roughEstimateOfFMP": 3118, "optimisticFMP": 3118, "pessimisticFMP": 3118, "roughEstimateOfTTI": 24456, "optimisticTTI": 19423, "pessimisticTTI": 29489, "roughEstimateOfTTFCPUI": 19423, "optimisticTTFCPUI": 19423, "pessimisticTTFCPUI": 20335, "roughEstimateOfSI": 4464, "optimisticSI": 2318, "pessimisticSI": 2261, "roughEstimateOfEIL": 2218, "optimisticEIL": 2772, "pessimisticEIL": 2772},
+    {"url": "http://www.weather.com/", "roughEstimateOfFCP": 3726, "optimisticFCP": 3726, "pessimisticFCP": 3726, "roughEstimateOfFMP": 3726, "optimisticFMP": 3726, "pessimisticFMP": 3726, "roughEstimateOfTTI": 28454, "optimisticTTI": 25240, "pessimisticTTI": 31668, "roughEstimateOfTTFCPUI": 25240, "optimisticTTFCPUI": 25240, "pessimisticTTFCPUI": 17090, "roughEstimateOfSI": 6665, "optimisticSI": 3209, "pessimisticSI": 3726, "roughEstimateOfEIL": 2102, "optimisticEIL": 2627, "pessimisticEIL": 2627},
     {"url": "http://www.wikipedia.org/", "roughEstimateOfFCP": 1234, "optimisticFCP": 1234, "pessimisticFCP": 1234, "roughEstimateOfFMP": 1234, "optimisticFMP": 1234, "pessimisticFMP": 1234, "roughEstimateOfTTI": 4416, "optimisticTTI": 4370, "pessimisticTTI": 4461, "roughEstimateOfTTFCPUI": 4370, "optimisticTTFCPUI": 4370, "pessimisticTTFCPUI": 4461, "roughEstimateOfSI": 2494, "optimisticSI": 1387, "pessimisticSI": 1234, "roughEstimateOfEIL": 1682, "optimisticEIL": 2102, "pessimisticEIL": 2102},
     {"url": "http://www.ynet.com/", "roughEstimateOfFCP": 2344, "optimisticFCP": 2344, "pessimisticFCP": 2344, "roughEstimateOfFMP": 2344, "optimisticFMP": 2344, "pessimisticFMP": 2344, "roughEstimateOfTTI": 8096, "optimisticTTI": 4413, "pessimisticTTI": 11780, "roughEstimateOfTTFCPUI": 4413, "optimisticTTFCPUI": 4413, "pessimisticTTFCPUI": 7713, "roughEstimateOfSI": 5079, "optimisticSI": 2718, "pessimisticSI": 2344, "roughEstimateOfEIL": 152, "optimisticEIL": 190, "pessimisticEIL": 190},
     {"url": "http://www.youdao.com/", "roughEstimateOfFCP": 3063, "optimisticFCP": 3063, "pessimisticFCP": 3063, "roughEstimateOfFMP": 3063, "optimisticFMP": 3063, "pessimisticFMP": 3063, "roughEstimateOfTTI": 3063, "optimisticTTI": 3063, "pessimisticTTI": 3063, "roughEstimateOfTTFCPUI": 3063, "optimisticTTFCPUI": 1531, "pessimisticTTFCPUI": 1577, "roughEstimateOfSI": 6467, "optimisticSI": 3376, "pessimisticSI": 3063, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16},
-    {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 2924, "optimisticFCP": 1941, "pessimisticFCP": 3907, "roughEstimateOfFMP": 2924, "optimisticFMP": 1941, "pessimisticFMP": 3907, "roughEstimateOfTTI": 10341, "optimisticTTI": 6545, "pessimisticTTI": 14136, "roughEstimateOfTTFCPUI": 6545, "optimisticTTFCPUI": 6545, "pessimisticTTFCPUI": 8740, "roughEstimateOfSI": 14233, "optimisticSI": 8531, "pessimisticSI": 3907, "roughEstimateOfEIL": 249, "optimisticEIL": 83, "pessimisticEIL": 539}
+    {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 3008, "optimisticFCP": 2109, "pessimisticFCP": 3907, "roughEstimateOfFMP": 3008, "optimisticFMP": 2109, "pessimisticFMP": 3907, "roughEstimateOfTTI": 10341, "optimisticTTI": 6545, "pessimisticTTI": 14136, "roughEstimateOfTTFCPUI": 6545, "optimisticTTFCPUI": 6545, "pessimisticTTFCPUI": 8740, "roughEstimateOfSI": 14233, "optimisticSI": 8531, "pessimisticSI": 3907, "roughEstimateOfEIL": 249, "optimisticEIL": 83, "pessimisticEIL": 539}
   ]
 }
\ No newline at end of file
diff --git a/lighthouse-core/test/lib/network-request-test.js b/lighthouse-core/test/lib/network-request-test.js
index ea6c5554e..5abdfa5d6 100644
--- a/lighthouse-core/test/lib/network-request-test.js
+++ b/lighthouse-core/test/lib/network-request-test.js
@@ -90,7 +90,7 @@ describe('NetworkRequest', () => {
       };
     }
 
-    it('updates lrStatistics if in Lightrider', () => {
+    it('updates timings if in Lightrider', () => {
       const req = getRequest();
 
       const devtoolsLog = networkRecordsToDevtoolsLog([req]);
@@ -98,8 +98,17 @@ describe('NetworkRequest', () => {
       const record = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
 
       expect(record.startTime).toStrictEqual(0);
-      expect(record.endTime).toStrictEqual(2);
-      expect(record.responseReceivedTime).toStrictEqual(1);
+      expect(record.endTime).toStrictEqual(10);
+      expect(record.responseReceivedTime).toStrictEqual(7.5);
+      expect(record.timing).toMatchObject({
+        connectStart: 0,
+        connectEnd: 5000,
+        sslStart: 4000,
+        sslEnd: 5000,
+        sendStart: 5000,
+        sendEnd: 5000,
+        receiveHeadersEnd: 7500,
+      });
       expect(record.lrStatistics).toStrictEqual({
         endTimeDeltaMs: -8000,
         TCPMs: 5000,
@@ -176,5 +185,133 @@ describe('NetworkRequest', () => {
       expect(record).toMatchObject(req);
       expect(record.lrStatistics).toStrictEqual(undefined);
     });
+
+    it('treats negative timings as 0', function() {
+      const req = getRequest();
+      req.responseHeaders = [{name: NetworkRequest.HEADER_TOTAL, value: '10000'},
+        {name: NetworkRequest.HEADER_TCP, value: '-1'},
+        {name: NetworkRequest.HEADER_REQ, value: '-1'},
+        {name: NetworkRequest.HEADER_SSL, value: '-1'},
+        {name: NetworkRequest.HEADER_RES, value: '10000'}];
+
+      const devtoolsLog = networkRecordsToDevtoolsLog([req]);
+      global.isLightrider = true;
+      const record = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
+
+      expect(record.startTime).toStrictEqual(0);
+      expect(record.endTime).toStrictEqual(10);
+      expect(record.responseReceivedTime).toStrictEqual(0);
+      expect(record.timing).toMatchObject({
+        connectStart: 0,
+        connectEnd: 0,
+        sslStart: 0,
+        sslEnd: 0,
+        sendStart: 0,
+        sendEnd: 0,
+        receiveHeadersEnd: 0,
+      });
+      expect(record.lrStatistics).toStrictEqual({
+        endTimeDeltaMs: -8000,
+        TCPMs: 0,
+        requestMs: 0,
+        responseMs: 10000,
+      });
+    });
+
+    it('treats missing timings as 0', function() {
+      const req = getRequest();
+      req.responseHeaders = [{name: NetworkRequest.HEADER_TOTAL, value: '10000'},
+        {name: NetworkRequest.HEADER_TCP, value: '1000'},
+        {name: NetworkRequest.HEADER_RES, value: '9000'}];
+
+      const devtoolsLog = networkRecordsToDevtoolsLog([req]);
+      global.isLightrider = true;
+      const record = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
+
+      expect(record.startTime).toStrictEqual(0);
+      expect(record.endTime).toStrictEqual(10);
+      expect(record.responseReceivedTime).toStrictEqual(1);
+      expect(record.timing).toMatchObject({
+        connectStart: 0,
+        connectEnd: 1000,
+        sslStart: 1000,
+        sslEnd: 1000,
+        sendStart: 1000,
+        sendEnd: 1000,
+        receiveHeadersEnd: 1000,
+      });
+      expect(record.lrStatistics).toStrictEqual({
+        endTimeDeltaMs: -8000,
+        TCPMs: 1000,
+        requestMs: 0,
+        responseMs: 9000,
+      });
+    });
+
+    it('created a new timing property if one did not exist', function() {
+      const req = getRequest();
+
+      const devtoolsLog = networkRecordsToDevtoolsLog([req]);
+
+      const noLRRecord = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
+      expect(noLRRecord.timing).toStrictEqual(undefined);
+
+      global.isLightrider = true;
+      const lrRecord = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
+      expect(lrRecord.timing.proxyStart).toStrictEqual(-1);
+
+      expect(lrRecord.startTime).toStrictEqual(0);
+      expect(lrRecord.endTime).toStrictEqual(10);
+      expect(lrRecord.responseReceivedTime).toStrictEqual(7.5);
+      expect(lrRecord.timing).toMatchObject({
+        proxyStart: -1,
+        connectStart: 0,
+        connectEnd: 5000,
+        sslStart: 4000,
+        sslEnd: 5000,
+        sendStart: 5000,
+        sendEnd: 5000,
+        receiveHeadersEnd: 7500,
+      });
+      expect(lrRecord.lrStatistics).toStrictEqual({
+        endTimeDeltaMs: -8000,
+        TCPMs: 5000,
+        requestMs: 2500,
+        responseMs: 2500,
+      });
+    });
+
+    it('overrides existing timing properties', function() {
+      const req = getRequest();
+      req.timing = {proxyStart: 17, sslStart: 35};
+      const devtoolsLog = networkRecordsToDevtoolsLog([req]);
+
+      const noLRRecord = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
+      expect(noLRRecord.timing.proxyStart).toStrictEqual(17);
+      expect(noLRRecord.timing.sslStart).toStrictEqual(35);
+
+      global.isLightrider = true;
+      const lrRecord = NetworkRecorder.recordsFromLogs(devtoolsLog)[0];
+
+      expect(lrRecord.startTime).toStrictEqual(0);
+      expect(lrRecord.endTime).toStrictEqual(10);
+      expect(lrRecord.responseReceivedTime).toStrictEqual(7.5);
+      expect(lrRecord.timing).toMatchObject({
+        proxyStart: -1,
+        connectStart: 0,
+        connectEnd: 5000,
+        sslStart: 4000,
+        sslEnd: 5000,
+        sendStart: 5000,
+        sendEnd: 5000,
+        receiveHeadersEnd: 7500,
+      });
+      expect(lrRecord.lrStatistics).toStrictEqual({
+        endTimeDeltaMs: -8000,
+        TCPMs: 5000,
+        requestMs: 2500,
+        responseMs: 2500,
+      });
+    });
   });
 });