• Clayton Coleman's avatar
    Avoid allocations when building SelfLinks and fast path escape · 389a8436
    Clayton Coleman authored
    A self link should only require one allocation, and we should skip
    url.PathEscape() except when the path actually needs it.
    
    Add a fuzz test to build random strings and verify them against
    the optimized implementation. Add a new BenchmarkWatchHTTP_UTF8 that
    covers when we have unicode names in the self link.
    
    ```
    > before
    BenchmarkGet-12          	   10000	    118863 ns/op	   17482 B/op	     130 allocs/op
    BenchmarkWatchHTTP-12    	   30000	     38346 ns/op	    1893 B/op	      29 allocs/op
    
    > after
    BenchmarkGet-12               	   10000	    116218 ns/op	   17456 B/op	     130 allocs/op
    BenchmarkWatchHTTP-12         	   50000	     35988 ns/op	    1571 B/op	      26 allocs/op
    BenchmarkWatchHTTP_UTF8-12    	   50000	     41467 ns/op	    1928 B/op	      28 allocs/op
    ```
    
    Saves 3 allocations in the fast path and 1 in the slow path (the
    slow path has to build the buffer and then call url.EscapedPath
    which always allocates).
    389a8436
Name
Last commit
Last update
.github Loading commit data...
Godeps Loading commit data...
api Loading commit data...
build Loading commit data...
cluster Loading commit data...
cmd Loading commit data...
docs Loading commit data...
hack Loading commit data...
logo Loading commit data...
pkg Loading commit data...
plugin Loading commit data...
staging Loading commit data...
test Loading commit data...
third_party Loading commit data...
translations Loading commit data...
vendor Loading commit data...
.bazelrc Loading commit data...
.generated_files Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.kazelcfg.json Loading commit data...
BUILD.bazel Loading commit data...
CHANGELOG-1.10.md Loading commit data...
CHANGELOG-1.11.md Loading commit data...
CHANGELOG-1.12.md Loading commit data...
CHANGELOG-1.13.md Loading commit data...
CHANGELOG-1.14.md Loading commit data...
CHANGELOG-1.2.md Loading commit data...
CHANGELOG-1.3.md Loading commit data...
CHANGELOG-1.4.md Loading commit data...
CHANGELOG-1.5.md Loading commit data...
CHANGELOG-1.6.md Loading commit data...
CHANGELOG-1.7.md Loading commit data...
CHANGELOG-1.8.md Loading commit data...
CHANGELOG-1.9.md Loading commit data...
CHANGELOG.md Loading commit data...
CONTRIBUTING.md Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
Makefile.generated_files Loading commit data...
OWNERS Loading commit data...
OWNERS_ALIASES Loading commit data...
README.md Loading commit data...
SECURITY_CONTACTS Loading commit data...
SUPPORT.md Loading commit data...
WORKSPACE Loading commit data...
code-of-conduct.md Loading commit data...