_recomputeTimesWithResourceTiming(timing) {
    // Don't recompute times if the data is invalid. RequestTime should always be a thread timestamp.
    // If we don't have receiveHeadersEnd, we really don't have more accurate data.
    if (timing.requestTime === -1 || timing.receiveHeadersEnd === -1) return;

    // Take networkRequestTime and responseHeadersEndTime from timing data for better accuracy.
    // Before this, networkRequestTime and responseHeadersEndTime were set to bogus values based on
    // CDP event timestamps, though they should be somewhat close to the network timings.
    // Note: requests served from cache never run this function, so they use the "bogus" values.

    // Timing's requestTime is a baseline in seconds, rest of the numbers there are ticks in millis.
    // See https://raw.githubusercontent.com/GoogleChrome/lighthouse/main/docs/Network-Timings.svg
    this.networkRequestTime = timing.requestTime * 1000;
    const headersReceivedTime = this.networkRequestTime + timing.receiveHeadersEnd;

    // Update this.responseHeadersEndTime. All timing values from the netstack (timing) are well-ordered, and
    // so are the timestamps from CDP (which this.responseHeadersEndTime belongs to). It shouldn't be possible
    // that this timing from the netstack is greater than the onResponse timestamp, but just to ensure proper order
    // is maintained we bound the new timing by the network request time and the response timestamp.
    this.responseHeadersEndTime = headersReceivedTime;
    if (this.responseTimestamp !== undefined) {
      this.responseHeadersEndTime = Math.min(this.responseHeadersEndTime, this.responseTimestamp);
    }
    this.responseHeadersEndTime = Math.max(this.responseHeadersEndTime, this.networkRequestTime);

    // We're only at responseReceived (_onResponse) at this point.
    // This networkEndTime may be redefined again after onLoading is done.
    this.networkEndTime = Math.max(this.networkEndTime, this.responseHeadersEndTime);
  }
Resolve differences between conflicting timing signals. Based on the property setters in DevTools.
@see https://github.com/ChromeDevTools/devtools-frontend/blob/56a99365197b85c24b732ac92b0ac70feed80179/front_end/sdk/NetworkRequest.js#L485-L502
@param {LH.Crdp.Network.ResourceTiming} timing