1
0
mirror of https://github.com/golang/go synced 2024-10-01 01:18:32 -06:00
go/cmd/guru
Josh Bleecher Snyder 5c8013c561 cmd/guru: re-use buffer for reading files
I felt guilty about leaving 2% on the table in CL 108878,
so I thought I'd get it a different way.

Teach readFile to accept a re-usable bytes.Buffer to read into,
to reduce the amount of garbage created.

To limit the possible memory impact of giant files,
only re-use the buffer for the duration of a single package.
Even that is enough to help.

name       old time/op       new time/op       delta
Referrers        4.67s ± 3%        4.58s ± 2%  -1.96%  (p=0.029 n=10+10)

name       old user-time/op  new user-time/op  delta
Referrers        16.5s ± 3%        15.8s ± 1%  -4.39%  (p=0.000 n=10+8)

name       old sys-time/op   new sys-time/op   delta
Referrers        16.1s ± 3%        15.9s ± 3%    ~     (p=0.218 n=10+10)

This work supported by Sourcegraph.

Change-Id: I594ef25c0fd5ccb766ff5b98dbbd1a75a7a4f957
Reviewed-on: https://go-review.googlesource.com/108935
Reviewed-by: Alan Donovan <adonovan@google.com>
2018-05-01 18:53:35 +00:00
..
serial cmd/guru: support streaming plain and -json output 2016-04-11 19:51:55 +00:00
testdata/src cmd/guru: emit initial referrers result earlier 2018-05-01 18:28:20 +00:00
callees.go x/tools/cmd/guru: gofmt -s -w 2017-02-15 21:41:53 +00:00
callers.go cmd/guru: add workaround to handle inconsistency between go/types and gc 2016-11-23 20:09:00 +00:00
callstack.go cmd/guru: add workaround to handle inconsistency between go/types and gc 2016-11-23 20:09:00 +00:00
definition.go cmd/guru: revert support for Go 1.8 aliases 2016-11-04 21:18:07 +00:00
describe.go x/tools: support Go 1.9 type aliases 2017-02-13 21:46:59 +00:00
freevars.go cmd/guru: support streaming plain and -json output 2016-04-11 19:51:55 +00:00
guru_test.go cmd/guru: make tests granular and parallel 2018-04-23 19:59:51 +00:00
guru.go cmd/guru: parallelize loop in globalReferrersPkgLevel 2018-05-01 18:27:15 +00:00
implements.go x/tools: support Go 1.9 type aliases 2017-02-13 21:46:59 +00:00
isAlias18.go x/tools: support Go 1.9 type aliases 2017-02-13 21:46:59 +00:00
isAlias19.go x/tools: support Go 1.9 type aliases 2017-02-13 21:46:59 +00:00
main.go cmd/guru: update link to documentation 2016-07-08 22:10:47 +00:00
peers.go cmd/guru: add workaround to handle inconsistency between go/types and gc 2016-11-23 20:09:00 +00:00
pointsto.go cmd/guru: add workaround to handle inconsistency between go/types and gc 2016-11-23 20:09:00 +00:00
pos.go cmd/guru: fix typo of 'hyphen' to rename to 'comma' 2017-01-25 19:35:15 +00:00
referrers.go cmd/guru: re-use buffer for reading files 2018-05-01 18:53:35 +00:00
unit_test.go go/buildutil, cmd/guru: resolve symlinks in filenames through build.Context 2016-12-06 21:45:43 +00:00
what.go cmd/guru: report 'whicherrs' in modes of 'what' query 2017-03-04 02:31:33 +00:00
whicherrs.go x/tools: support Go 1.9 type aliases 2017-02-13 21:46:59 +00:00