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// Tests user tasks, regions, and logging.
6
7//go:build ignore
8
9package main
10
11import (
12	"context"
13	"log"
14	"os"
15	"runtime/trace"
16	"sync"
17)
18
19func main() {
20	bgctx, cancel := context.WithCancel(context.Background())
21	defer cancel()
22
23	// Create a pre-existing region. This won't end up in the trace.
24	preExistingRegion := trace.StartRegion(bgctx, "pre-existing region")
25
26	// Start tracing.
27	if err := trace.Start(os.Stdout); err != nil {
28		log.Fatalf("failed to start tracing: %v", err)
29	}
30
31	// Beginning of traced execution.
32	var wg sync.WaitGroup
33	ctx, task := trace.NewTask(bgctx, "task0") // EvUserTaskCreate("task0")
34	trace.StartRegion(ctx, "task0 region")
35
36	wg.Add(1)
37	go func() {
38		defer wg.Done()
39		defer task.End() // EvUserTaskEnd("task0")
40
41		trace.StartRegion(ctx, "unended region")
42
43		trace.WithRegion(ctx, "region0", func() {
44			// EvUserRegionBegin("region0", start)
45			trace.WithRegion(ctx, "region1", func() {
46				trace.Log(ctx, "key0", "0123456789abcdef") // EvUserLog("task0", "key0", "0....f")
47			})
48			// EvUserRegionEnd("region0", end)
49		})
50	}()
51	wg.Wait()
52
53	preExistingRegion.End()
54	postExistingRegion := trace.StartRegion(bgctx, "post-existing region")
55
56	// End of traced execution.
57	trace.Stop()
58
59	postExistingRegion.End()
60}
61