]> Cypherpunks repositories - gostls13.git/commitdiff
errors: improve performance of New
authorMarcel van Lohuizen <mpvl@golang.org>
Wed, 13 Mar 2019 15:47:44 +0000 (16:47 +0100)
committerMarcel van Lohuizen <mpvl@golang.org>
Thu, 14 Mar 2019 09:32:11 +0000 (09:32 +0000)
See Issue #29382 and Issue #30468.

Improvements in this CL:

name                     old time/op  new time/op  delta
New-8                     352ns ± 2%   225ns ± 5%  -36.04%  (p=0.008 n=5+5)

Improvements together with moving to 1 uintptr:

name                     old time/op  new time/op  delta
New-8                     475ns ± 3%   225ns ± 5%  -52.59%  (p=0.008 n=5+5)

Change-Id: I9d69a14e5e10a6498767defb7d5f26ceedcf9ba5
Reviewed-on: https://go-review.googlesource.com/c/go/+/167401
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
src/errors/errors.go

index f23a96c43eb9e5c9f0ca042efe007a8e68d477f3..ebb136cdd452f77da26e2d3c2fdf315b54284131 100644 (file)
@@ -5,12 +5,17 @@
 // Package errors implements functions to manipulate errors.
 package errors
 
+import "runtime"
+
 // New returns an error that formats as the given text.
 //
 // The returned error contains a Frame set to the caller's location and
 // implements Formatter to show this information when printed with details.
 func New(text string) error {
-       return &errorString{text, Caller(1)}
+       // Inline call to errors.Callers to improve performance.
+       var s Frame
+       runtime.Callers(2, s.frames[:])
+       return &errorString{text, s}
 }
 
 // errorString is a trivial implementation of error.