lib/third_party/tracing/extras/chrome/cc/input_latency_async_slice.js
function(event, queue, visited, flowEvents) {
      var stopFollowing = false;
      var inputAck = false;

      event.iterateAllSubsequentSlices(function(slice) {
        if (stopFollowing)
          return;

        // Do not follow TaskQueueManager::RunTask because it causes
        // many false events to be included.
        if (slice.title === 'TaskQueueManager::RunTask')
          return;

        // Do not follow ScheduledActionSendBeginMainFrame because the real
        // main thread BeginMainFrame is already traced by LatencyInfo flow.
        if (slice.title === 'ThreadProxy::ScheduledActionSendBeginMainFrame')
          return;

        // Do not follow ScheduleBeginImplFrameDeadline that triggers an
        // OnBeginImplFrameDeadline that is tracked by another LatencyInfo.
        if (slice.title === 'Scheduler::ScheduleBeginImplFrameDeadline') {
          if (this.triggerOtherInputs(slice, flowEvents))
            return;
        }

        // Do not follow PostComposite that triggers CompositeImmediately
        // that is tracked by another LatencyInfo.
        if (slice.title === 'CompositorImpl::PostComposite') {
          if (this.triggerOtherInputs(slice, flowEvents))
            return;
        }

        // Stop following the rest of the current slice hierarchy if
        // FilterAndSendWebInputEvent occurs after ProcessInputEventAck.
        if (slice.title === 'InputRouterImpl::ProcessInputEventAck')
          inputAck = true;
        if (inputAck &&
            slice.title === 'InputRouterImpl::FilterAndSendWebInputEvent')
          stopFollowing = true;

        this.followCurrentSlice(slice, queue, visited);
      }, this);
    }
function(event, queue, visited, flowEvents) {
      var stopFollowing = false;
      var inputAck = false;

      event.iterateAllSubsequentSlices(function(slice) {
        if (stopFollowing)
          return;

        // Do not follow TaskQueueManager::RunTask because it causes
        // many false events to be included.
        if (slice.title === 'TaskQueueManager::RunTask')
          return;

        // Do not follow ScheduledActionSendBeginMainFrame because the real
        // main thread BeginMainFrame is already traced by LatencyInfo flow.
        if (slice.title === 'ThreadProxy::ScheduledActionSendBeginMainFrame')
          return;

        // Do not follow ScheduleBeginImplFrameDeadline that triggers an
        // OnBeginImplFrameDeadline that is tracked by another LatencyInfo.
        if (slice.title === 'Scheduler::ScheduleBeginImplFrameDeadline') {
          if (this.triggerOtherInputs(slice, flowEvents))
            return;
        }

        // Do not follow PostComposite that triggers CompositeImmediately
        // that is tracked by another LatencyInfo.
        if (slice.title === 'CompositorImpl::PostComposite') {
          if (this.triggerOtherInputs(slice, flowEvents))
            return;
        }

        // Stop following the rest of the current slice hierarchy if
        // FilterAndSendWebInputEvent occurs after ProcessInputEventAck.
        if (slice.title === 'InputRouterImpl::ProcessInputEventAck')
          inputAck = true;
        if (inputAck &&
            slice.title === 'InputRouterImpl::FilterAndSendWebInputEvent')
          stopFollowing = true;

        this.followCurrentSlice(slice, queue, visited);
      }, this);
    }
function ( event , queue , visited , flowEvents ) { var stopFollowing = false ; var inputAck = false ; event . iterateAllSubsequentSlices ( function ( slice ) { if ( stopFollowing ) return ; // Do not follow TaskQueueManager::RunTask because it causes // many false events to be included. if ( slice . title === 'TaskQueueManager::RunTask' ) return ; // Do not follow ScheduledActionSendBeginMainFrame because the real // main thread BeginMainFrame is already traced by LatencyInfo flow. if ( slice . title === 'ThreadProxy::ScheduledActionSendBeginMainFrame' ) return ; // Do not follow ScheduleBeginImplFrameDeadline that triggers an // OnBeginImplFrameDeadline that is tracked by another LatencyInfo. if ( slice . title === 'Scheduler::ScheduleBeginImplFrameDeadline' ) { if ( this . triggerOtherInputs ( slice , flowEvents ) ) return ; } // Do not follow PostComposite that triggers CompositeImmediately // that is tracked by another LatencyInfo. if ( slice . title === 'CompositorImpl::PostComposite' ) { if ( this . triggerOtherInputs ( slice , flowEvents ) ) return ; } // Stop following the rest of the current slice hierarchy if // FilterAndSendWebInputEvent occurs after ProcessInputEventAck. if ( slice . title === 'InputRouterImpl::ProcessInputEventAck' ) inputAck = true ; if ( inputAck && slice . title === 'InputRouterImpl::FilterAndSendWebInputEvent' ) stopFollowing = true ; this . followCurrentSlice ( slice , queue , visited ) ; } , this ) ; }
Follow outgoing flow of subsequentSlices in the current hierarchy. We also handle cases where different inputs interfere with each other.
Follow outgoing flow of subsequentSlices in the current hierarchy . We also handle cases where different inputs interfere with each other .