code: public HttpRequestContext handleStart(@Nullable Span parent, C carrier, Q request) {
      checkNotNull(carrier, "carrier");
      checkNotNull(request, "request");
      if (parent == null) {
        parent = tracer.getCurrentSpan();
      }
      String spanName = getSpanName(request, extractor);
      SpanBuilder builder = tracer.spanBuilderWithExplicitParent(spanName, parent);
      Span span = builder.setSpanKind(Kind.CLIENT).startSpan();
  
      if (span.getOptions().contains(Options.RECORD_EVENTS)) {
        addSpanRequestAttributes(span, request, extractor);
      }
  
      // inject propagation header
      SpanContext spanContext = span.getContext();
      if (!spanContext.equals(SpanContext.INVALID)) {
        textFormat.inject(spanContext, carrier, setter);
      }
      return getNewContext(span, tagger.getCurrentTagContext());
    }
docs: Instrument a request for tracing and stats before it is sent.
  
  <p>This method will create a span in current context to represent the HTTP call. The created
  span will be serialized and propagated to the server.
  
  <p>The generated span will NOT be set as current context. User can control when to enter the
  scope of this span. Use {@link AbstractHttpHandler#getSpanFromContext} to retrieve the span.
  
  @param parent the parent {@link Span}. {@code null} indicates using current span.
  @param carrier the entity that holds the HTTP information.
  @param request the request entity.
  @return the {@link HttpRequestContext} that contains stats and trace data associated with the
  request.
  @since 0.19