]> Cypherpunks.ru repositories - gostls13.git/blob - src/internal/trace/v2/testdata/generators/go122-task-across-generations.go
runtime: add execution tracer v2 behind GOEXPERIMENT=exectracer2
[gostls13.git] / src / internal / trace / v2 / testdata / generators / go122-task-across-generations.go
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
13 package main
14
15 import (
16         "internal/trace/v2"
17         "internal/trace/v2/event/go122"
18         testgen "internal/trace/v2/internal/testgen/go122"
19 )
20
21 func main() {
22         testgen.Main(gen)
23 }
24
25 func 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.NoTask, "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 }