From 8bf18b56a47a98b9dd2fa03beb358312237a8c76 Mon Sep 17 00:00:00 2001 From: Marcel van Lohuizen Date: Wed, 13 Mar 2019 16:47:44 +0100 Subject: [PATCH] errors: improve performance of New MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/errors/errors.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/errors/errors.go b/src/errors/errors.go index f23a96c43eb9e5..ebb136cdd452f7 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.