diff options
| author | Michael Anthony Knyszek <mknyszek@google.com> | 2025-01-29 17:17:04 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-02-11 11:23:24 -0800 |
| commit | b5f34aa4abc1ae49b9f97355deb5ab097d0c68a9 (patch) | |
| tree | e5ac2e62164dcc1478116668f6ada07e3d77a31b /src/runtime/tracebuf.go | |
| parent | 0158ddad9893ea1ab332be39f192aefdbd7b65c8 (diff) | |
| download | go-b5f34aa4abc1ae49b9f97355deb5ab097d0c68a9.tar.xz | |
runtime: use internal/trace/tracev2 definitions
This change deduplicates trace wire format definitions between the
runtime and the trace parser by making the internal/trace/tracev2
package the source of truth.
Change-Id: Ia0721d3484a80417e40ac473ec32870bee73df09
Reviewed-on: https://go-review.googlesource.com/c/go/+/644221
Auto-Submit: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/runtime/tracebuf.go')
| -rw-r--r-- | src/runtime/tracebuf.go | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/runtime/tracebuf.go b/src/runtime/tracebuf.go index 0849a57809..63803a90f5 100644 --- a/src/runtime/tracebuf.go +++ b/src/runtime/tracebuf.go @@ -8,6 +8,7 @@ package runtime import ( "internal/runtime/sys" + "internal/trace/tracev2" "unsafe" ) @@ -24,7 +25,7 @@ const traceBytesPerNumber = 10 // we can change it if it's deemed too error-prone. type traceWriter struct { traceLocker - exp traceExperiment + exp tracev2.Experiment *traceBuf } @@ -48,7 +49,7 @@ func (tl traceLocker) writer() traceWriter { gp.throwsplit = true } } - return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2][traceNoExperiment]} + return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2][tracev2.NoExperiment]} } // unsafeTraceWriter produces a traceWriter that doesn't lock the trace. @@ -70,7 +71,7 @@ func unsafeTraceWriter(gen uintptr, buf *traceBuf) traceWriter { // have any stack growth. // //go:nosplit -func (w traceWriter) event(ev traceEv, args ...traceArg) traceWriter { +func (w traceWriter) event(ev tracev2.EventType, args ...traceArg) traceWriter { // N.B. Everything in this call must be nosplit to maintain // the stack growth related invariants for writing events. @@ -186,10 +187,10 @@ func (w traceWriter) refill() traceWriter { } // Write the buffer's header. - if w.exp == traceNoExperiment { - w.byte(byte(traceEvEventBatch)) + if w.exp == tracev2.NoExperiment { + w.byte(byte(tracev2.EvEventBatch)) } else { - w.byte(byte(traceEvExperimentalBatch)) + w.byte(byte(tracev2.EvExperimentalBatch)) w.byte(byte(w.exp)) } w.varint(uint64(w.gen)) @@ -199,6 +200,27 @@ func (w traceWriter) refill() traceWriter { return w } +// expWriter returns a traceWriter that writes into the current M's stream for +// the given experiment. +func (tl traceLocker) expWriter(exp tracev2.Experiment) traceWriter { + return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2][exp], exp: exp} +} + +// unsafeTraceExpWriter produces a traceWriter for experimental trace batches +// that doesn't lock the trace. Data written to experimental batches need not +// conform to the standard trace format. +// +// It should only be used in contexts where either: +// - Another traceLocker is held. +// - trace.gen is prevented from advancing. +// +// This does not have the same stack growth restrictions as traceLocker.writer. +// +// buf may be nil. +func unsafeTraceExpWriter(gen uintptr, buf *traceBuf, exp tracev2.Experiment) traceWriter { + return traceWriter{traceLocker: traceLocker{gen: gen}, traceBuf: buf, exp: exp} +} + // traceBufQueue is a FIFO of traceBufs. type traceBufQueue struct { head, tail *traceBuf @@ -247,7 +269,7 @@ type traceBufHeader struct { type traceBuf struct { _ sys.NotInHeap traceBufHeader - arr [64<<10 - unsafe.Sizeof(traceBufHeader{})]byte // underlying buffer for traceBufHeader.buf + arr [tracev2.MaxBatchSize - unsafe.Sizeof(traceBufHeader{})]byte // underlying buffer for traceBufHeader.buf } // byte appends v to buf. |
