var goplsPath … var installGoplsOnce … var goplsCommit … var cpuProfile … var memProfile … var allocProfile … var blockProfile … var trace … var makeTempDirOnce … var tempDir … const runAsGopls … func TestMain(m *testing.M) { … } // getTempDir returns the temporary directory to use for benchmark files, // creating it if necessary. func getTempDir() string { … } // shallowClone performs a shallow clone of repo into dir at the given // 'commitish' ref (any commit reference understood by git). // // The directory dir must not already exist. func shallowClone(dir, repo, commitish string) error { … } // connectEditor connects a fake editor session in the given dir, using the // given editor config. func connectEditor(dir string, config fake.EditorConfig, ts servertest.Connector) (*fake.Sandbox, *fake.Editor, *integration.Awaiter, error) { … } // newGoplsConnector returns a connector that connects to a new gopls process, // executed with the provided arguments. func newGoplsConnector(args []string) (servertest.Connector, error) { … } // profileArgs returns additional command-line arguments to use when invoking // gopls, to enable the user-requested profiles. // // If wantCPU is set, CPU profiling is enabled as well. Some tests may want to // instrument profiling around specific critical sections of the benchmark, // rather than the entire process. // // TODO(rfindley): like CPU, all of these would be better served by a custom // command. Very rarely do we care about memory usage as the process exits: we // care about specific points in time during the benchmark. mem and alloc // should be snapshotted, and tracing should be bracketed around critical // sections. func profileArgs(name string, wantCPU bool) []string { … } func qualifiedName(args ...string) string { … } // getInstalledGopls builds gopls at the given -gopls_commit, returning the // path to the gopls binary. func getInstalledGopls() string { … } type SidecarServer … // Connect creates new io.Pipes and binds them to the underlying StreamServer. // // It implements the servertest.Connector interface. func (s *SidecarServer) Connect(ctx context.Context) jsonrpc2.Conn { … } // startProfileIfSupported checks to see if the remote gopls instance supports // the start/stop profiling commands. If so, it starts profiling and returns a // function that stops profiling and records the total CPU seconds sampled in the // cpu_seconds benchmark metric. // // If the remote gopls instance does not support profiling commands, this // function returns nil. // // If the supplied userSuffix is non-empty, the profile is written to // <repo>.<userSuffix>, and not deleted when the benchmark exits. Otherwise, // the profile is written to a temp file that is deleted after the cpu_seconds // metric has been computed. func startProfileIfSupported(b *testing.B, env *integration.Env, name string) func() { … } // totalCPUForProfile reads the pprof profile with the given file name, parses, // and aggregates the total CPU sampled during the profile. func totalCPUForProfile(filename string) (time.Duration, error) { … } // closeBuffer stops the benchmark timer and closes the buffer with the given // name. // // It may be used to clean up files opened in the shared environment during // benchmarking. func closeBuffer(b *testing.B, env *integration.Env, name string) { … }