static computeTimeOrigin(traceEventSubsets, method) {
    const lastNavigationStart = () => {
      // Our time origin will be the last frame navigation in the trace
      const frameEvents = traceEventSubsets.frameEvents;
      return frameEvents.filter(this._isNavigationStartOfInterest).pop();
    };

    const lighthouseMarker = () => {
      const frameEvents = traceEventSubsets.keyEvents;
      return frameEvents.find(
        evt =>
          evt.name === 'clock_sync' &&
          evt.args.sync_id === TraceProcessor.TIMESPAN_MARKER_ID
      );
    };

    switch (method) {
      case 'firstResourceSendRequest': {
        // Our time origin will be the timestamp of the first request that's sent in the frame.
        const fetchStart = traceEventSubsets.keyEvents.find(event => {
          if (event.name !== 'ResourceSendRequest') return false;
          const data = event.args.data || {};
          return data.frame === traceEventSubsets.mainFrameInfo.frameId;
        });
        if (!fetchStart) throw this.createNoResourceSendRequestError();
        return fetchStart;
      }
      case 'lastNavigationStart': {
        const navigationStart = lastNavigationStart();
        if (!navigationStart) throw this.createNoNavstartError();
        return navigationStart;
      }
      case 'lighthouseMarker': {
        const marker = lighthouseMarker();
        if (!marker) throw this.createNoLighthouseMarkerError();
        return marker;
      }
      case 'auto': {
        const marker = lighthouseMarker() || lastNavigationStart();
        if (!marker) throw this.createNoNavstartError();
        return marker;
      }
    }
  }
Computes the time origin using the specified method.

   - firstResourceSendRequest
     Uses the time that the very first network request is sent in the main frame.
     Eventually should be used in place of lastNavigationStart as the default for navigations.
     This method includes the cost of all redirects when evaluating a navigation (which matches lantern behavior).
     The only difference between firstResourceSendRequest and the first `navigationStart` is
     the unload time of `about:blank` (which is a Lighthouse implementation detail and shouldn't be included).

   - lastNavigationStart
     Uses the time of the last `navigationStart` event in the main frame.
     The historical time origin of Lighthouse from 2016-Present.
     This method excludes the cost of client-side redirects when evaluating a navigation.
     Can also be skewed by several hundred milliseconds or even seconds when the browser takes a long
     time to unload `about:blank`.

@param {{keyEvents: Array<LH.TraceEvent>, frameEvents: Array<LH.TraceEvent>, mainFrameInfo: {frameId: string}}} traceEventSubsets
@param {TimeOriginDeterminationMethod} method
@return {LH.TraceEvent}