From: Marcel van Lohuizen Date: Wed, 13 Mar 2019 15:47:44 +0000 (+0100) Subject: errors: improve performance of New X-Git-Tag: go1.13beta1~1041 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8bf18b56a47a98b9dd2fa03beb358312237a8c76;p=gostls13.git errors: improve performance of New 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 TryBot-Result: Gobot Gobot Reviewed-by: Damien Neil --- diff --git a/src/errors/errors.go b/src/errors/errors.go index f23a96c43e..ebb136cdd4 100644 --- a/src/errors/errors.go +++ b/src/errors/errors.go @@ -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.