]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: create setGCPercent method for gcControllerState
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 1 Apr 2021 18:09:59 +0000 (18:09 +0000)
committerMichael Knyszek <mknyszek@google.com>
Wed, 14 Apr 2021 03:15:34 +0000 (03:15 +0000)
This change breaks out the computations done by setGCPercent into
a method on gcControllerState for easier testing later. It leaves behind
the global implementation details.

For #44167.

Change-Id: I3b0cf1475b032fcd4ebbd01cf4e80de0b55ce7b0
Reviewed-on: https://go-review.googlesource.com/c/go/+/306602
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/mgcpacer.go

index 2366cdb84b923e548db24d05c4eefe1abd413c0b..ea3b39f24dde203cfde1dbd4cd05994fa53e062c 100644 (file)
@@ -255,7 +255,7 @@ func (c *gcControllerState) init(gcPercent int32) {
        c.heapMarked = uint64(float64(c.heapMinimum) / (1 + c.triggerRatio))
 
        // This will also compute and set the GC trigger and goal.
-       _ = setGCPercent(gcPercent)
+       c.setGCPercent(gcPercent)
 }
 
 // startCycle resets the GC controller's state and computes estimates
@@ -784,19 +784,31 @@ func gcEffectiveGrowthRatio() float64 {
        return egogc
 }
 
+// setGCPercent updates gcPercent and all related pacer state.
+// Returns the old value of gcPercent.
+//
+// The world must be stopped, or mheap_.lock must be held.
+func (c *gcControllerState) setGCPercent(in int32) int32 {
+       assertWorldStoppedOrLockHeld(&mheap_.lock)
+
+       out := c.gcPercent
+       if in < 0 {
+               in = -1
+       }
+       c.gcPercent = in
+       c.heapMinimum = defaultHeapMinimum * uint64(c.gcPercent) / 100
+       // Update pacing in response to gcPercent change.
+       c.commit(c.triggerRatio)
+
+       return out
+}
+
 //go:linkname setGCPercent runtime/debug.setGCPercent
 func setGCPercent(in int32) (out int32) {
        // Run on the system stack since we grab the heap lock.
        systemstack(func() {
                lock(&mheap_.lock)
-               out = gcController.gcPercent
-               if in < 0 {
-                       in = -1
-               }
-               gcController.gcPercent = in
-               gcController.heapMinimum = defaultHeapMinimum * uint64(gcController.gcPercent) / 100
-               // Update pacing in response to gcPercent change.
-               gcController.commit(gcController.triggerRatio)
+               out = gcController.setGCPercent(in)
                unlock(&mheap_.lock)
        })