aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/proc.go
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2021-11-16 11:46:42 -0500
committerMichael Pratt <mpratt@google.com>2021-11-16 17:13:33 +0000
commit29ec902efc0ae53c4435097efdb738667466756c (patch)
tree3bd3c18b97049e111c013d474d60f21019398200 /src/runtime/proc.go
parent79d0013f53d4199b9f84d813221b71adf7eb1e4d (diff)
downloadgo-29ec902efc0ae53c4435097efdb738667466756c.tar.gz
go-29ec902efc0ae53c4435097efdb738667466756c.zip
runtime: get tracking time only when needed
casgstatus currently calls nanotime on every casgstatus when tracking, even though the time is only used in some cases. For goroutines making lots of transitions that aren't covered here, this can add a small overhead. Switch to calling nanotime only when necessary. Change-Id: I2617869332e8289ef33dd674d786e44dea09aaba Reviewed-on: https://go-review.googlesource.com/c/go/+/364375 Trust: Michael Pratt <mpratt@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/runtime/proc.go')
-rw-r--r--src/runtime/proc.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index bf5fa8e4fc..a238ea77f3 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -980,17 +980,18 @@ func casgstatus(gp *g, oldval, newval uint32) {
gp.trackingSeq++
}
if gp.tracking {
- now := nanotime()
if oldval == _Grunnable {
// We transitioned out of runnable, so measure how much
// time we spent in this state and add it to
// runnableTime.
+ now := nanotime()
gp.runnableTime += now - gp.runnableStamp
gp.runnableStamp = 0
}
if newval == _Grunnable {
// We just transitioned into runnable, so record what
// time that happened.
+ now := nanotime()
gp.runnableStamp = now
} else if newval == _Grunning {
// We're transitioning into running, so turn off