envelop comes with a self-measuring tracing tool, for providing you some insights on the performance of each stage.

If you wish to enable it, pass enableInternalTracing: true to your envelop instance:

import * as GraphQLJS from 'graphql'
import { envelop, useEngine } from '@envelop/core'
const getEnveloped = envelop({
  plugins: [
    // ...
  enableInternalTracing: true

This way, on each executed request, you’ll get the following object with metrics (measured in ms) added to your result.extensions:

  "extensions": {
    "_envelopTracing": {
      "parse": 0.1,
      "validate": 0.1,
      "context": 0.1,
      "execute": 0.1,
      "subscribe": 0.1

The measured time represents the entire execution, of all plugins, in each phase, including before/after of all plugins, and the actual GraphQL function.