• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2023 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Regression test for an issue found in development.
6//
7// The issue is that EvUserTaskEnd events don't carry the
8// task type with them, so the parser needs to track that
9// information. But if the parser just tracks the string ID
10// and not the string itself, that string ID may not be valid
11// for use in future generations.
12
13package main
14
15import (
16	"internal/trace"
17	"internal/trace/event/go122"
18	testgen "internal/trace/internal/testgen/go122"
19)
20
21func main() {
22	testgen.Main(gen)
23}
24
25func gen(t *testgen.Trace) {
26	g1 := t.Generation(1)
27
28	// A running goroutine emits a task begin.
29	b1 := g1.Batch(trace.ThreadID(0), 0)
30	b1.Event("ProcStatus", trace.ProcID(0), go122.ProcRunning)
31	b1.Event("GoStatus", trace.GoID(1), trace.ThreadID(0), go122.GoRunning)
32	b1.Event("UserTaskBegin", trace.TaskID(2), trace.TaskID(0) /* 0 means no parent, not background */, "my task", testgen.NoStack)
33
34	g2 := t.Generation(2)
35
36	// That same goroutine emits a task end in the following generation.
37	b2 := g2.Batch(trace.ThreadID(0), 5)
38	b2.Event("ProcStatus", trace.ProcID(0), go122.ProcRunning)
39	b2.Event("GoStatus", trace.GoID(1), trace.ThreadID(0), go122.GoRunning)
40	b2.Event("UserTaskEnd", trace.TaskID(2), testgen.NoStack)
41}
42