void TraceLifecycleVisitor::visit()

in cpp/writer/TraceLifecycleVisitor.cpp [54:117]


void TraceLifecycleVisitor::visit(const StandardEntry& entry) {
  auto type = static_cast<EntryType>(entry.type);
  switch (type) {
    case EntryType::TRACE_END: {
      int64_t trace_id = entry.extra;
      if (trace_id != expected_trace_) {
        return;
      }
      // write before we clean up state
      if (hasDelegate()) {
        delegates_.back()->visit(entry);
      }
      onTraceEnd(trace_id);
      break;
    }
    case EntryType::TRACE_TIMEOUT:
    case EntryType::TRACE_ABORT: {
      int64_t trace_id = entry.extra;
      if (trace_id != expected_trace_) {
        return;
      }
      auto reason = type == EntryType::TRACE_TIMEOUT
          ? AbortReason::TIMEOUT
          : AbortReason::CONTROLLER_INITIATED;

      // write before we clean up state
      if (hasDelegate()) {
        delegates_.back()->visit(entry);
      }
      onTraceAbort(trace_id, reason);
      break;
    }
    case EntryType::TRACE_BACKWARDS:
    case EntryType::TRACE_START: {
      int64_t trace_id = entry.extra;
      if (trace_id != expected_trace_) {
        return;
      }
      onTraceStart(trace_id, entry.matchid);
      if (hasDelegate()) {
        delegates_.back()->visit(entry);
      }

      if (type == EntryType::TRACE_BACKWARDS) {
        trace_backward_callback_(*this);
      }
      break;
    }
    case EntryType::LOGGER_PRIORITY: {
      if (expected_trace_ == entry.extra) {
        thread_priority_ = std::make_unique<ScopedThreadPriority>(entry.callid);
      }
      if (hasDelegate()) {
        delegates_.back()->visit(entry);
      }
      break;
    }
    default: {
      if (hasDelegate()) {
        delegates_.back()->visit(entry);
      }
    }
  }
}