]> Cypherpunks repositories - gostls13.git/commit
encoding/json: remove a bounds check in readValue
authorDaniel Martí <mvdan@mvdan.cc>
Fri, 5 Apr 2019 21:06:49 +0000 (23:06 +0200)
committerDaniel Martí <mvdan@mvdan.cc>
Sat, 13 Apr 2019 13:14:55 +0000 (13:14 +0000)
commitab2f83c387fcc00efbdcc0a5c249af26c84ff425
treecaf7b2db1bac258864516cdb1f32c16be7603a78
parentee64b35531a841ab4dbe41c17390214f9dea654f
encoding/json: remove a bounds check in readValue

readValue is a hot function, clocking in at ~13% flat CPU use in
CodeDecoder. In particular, looping over the bytes is slow. That's
partially because the code contains a bounds check at the start of the
loop.

The source of the problem is that scanp is a signed integer, and comes
from a field, so the compiler doesn't know that it's non-negative. Help
it with a simple and comparatively cheap hint.

While at it, use scanp as the index variable directly, removing the need
for a duplicate index variable which is later added back into scanp.

name           old time/op    new time/op    delta
CodeDecoder-8    11.3ms ± 1%    11.2ms ± 1%  -0.98%  (p=0.000 n=9+9)

name           old speed      new speed      delta
CodeDecoder-8   172MB/s ± 1%   174MB/s ± 1%  +0.99%  (p=0.000 n=9+9)

Updates #28923.

Change-Id: I138f83babdf316fc97697cc18f595c3403c1ddb7
Reviewed-on: https://go-review.googlesource.com/c/go/+/170939
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/encoding/json/stream.go