mirror of
https://github.com/golang/go
synced 2024-11-24 05:20:04 -07:00
runtime: ensure at least 1 tick between events
ticks might be same after tick division, although the real cputicks is linear growth Fixes #46737 Change-Id: I1d98866fbf21b426c6c1c96cc9cf802d7f440f18 Reviewed-on: https://go-review.googlesource.com/c/go/+/330849 Trust: Meng Zhuo <mzh@golangcn.org> Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Meng Zhuo <mzh@golangcn.org> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
8838a3b53f
commit
ee92daae25
@ -551,8 +551,15 @@ func traceEventLocked(extraBytes int, mp *m, pid int32, bufp *traceBufPtr, ev by
|
||||
bufp.set(buf)
|
||||
}
|
||||
|
||||
// NOTE: ticks might be same after tick division, although the real cputicks is
|
||||
// linear growth.
|
||||
ticks := uint64(cputicks()) / traceTickDiv
|
||||
tickDiff := ticks - buf.lastTicks
|
||||
if tickDiff == 0 {
|
||||
ticks = buf.lastTicks + 1
|
||||
tickDiff = 1
|
||||
}
|
||||
|
||||
buf.lastTicks = ticks
|
||||
narg := byte(len(args))
|
||||
if skip >= 0 {
|
||||
@ -653,6 +660,9 @@ func traceFlush(buf traceBufPtr, pid int32) traceBufPtr {
|
||||
|
||||
// initialize the buffer for a new batch
|
||||
ticks := uint64(cputicks()) / traceTickDiv
|
||||
if ticks == bufp.lastTicks {
|
||||
ticks = bufp.lastTicks + 1
|
||||
}
|
||||
bufp.lastTicks = ticks
|
||||
bufp.byte(traceEvBatch | 1<<traceArgCountShift)
|
||||
bufp.varint(uint64(pid))
|
||||
|
Loading…
Reference in New Issue
Block a user