summaryrefslogtreecommitdiff
path: root/internal/flamegraph/worker.go
blob: 534bfc3c1f4551aff4f510287074187e1a219ed3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package flamegraph

import (
	"context"
	"ior/internal/event"
	"sync"
	"time"
)

type worker struct {
	iod  iorData
	done chan struct{}
}

func newWorker() worker {
	return worker{iod: newIorData()}
}

func (w worker) run(ctx context.Context, wg *sync.WaitGroup, ch <-chan *event.Pair) {
	defer wg.Done()

	for {
		select {
		case ev := <-ch:
			w.iod.addEventPair(ev)
			ev.Recycle()

		default:
			select {
			case <-ctx.Done():
				return
			default:
				time.Sleep(time.Millisecond * 10)
			}
		}
	}
}