http2/hpack: remove pair function and initialize directly Inlining isn't performed on generated init functions. Removing the pair function and initializing the structs directly saves another 16k on a simple http.ListenAndServe() binary. delta name old new -58 runtime.findfunctab 10471 10413 -0.55% -41 runtime.gcbss 910 869 -4.51% 41 runtime.gcdata 612 653 6.70% -408 runtime.pclntab 1036311 1035903 -0.04% -11711 vendor/golang_org/x/net/http2/hpack.init 12283 572 -95.34% Updates golang/go#6853 Change-Id: Ibccc796fe7403674cf4b4561acf9551d76ff11e8 Reviewed-on: https://go-review.googlesource.com/43190 Run-TryBot: Todd Neal <todd@tneal.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/http2/hpack/tables.go b/http2/hpack/tables.go index 5d7f635..dd60ffd 100644 --- a/http2/hpack/tables.go +++ b/http2/hpack/tables.go
@@ -132,67 +132,67 @@ // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B var staticTable = newStaticTable() var staticTableEntries = [...]HeaderField{ - pair(":authority", ""), - pair(":method", "GET"), - pair(":method", "POST"), - pair(":path", "/"), - pair(":path", "/index.html"), - pair(":scheme", "http"), - pair(":scheme", "https"), - pair(":status", "200"), - pair(":status", "204"), - pair(":status", "206"), - pair(":status", "304"), - pair(":status", "400"), - pair(":status", "404"), - pair(":status", "500"), - pair("accept-charset", ""), - pair("accept-encoding", "gzip, deflate"), - pair("accept-language", ""), - pair("accept-ranges", ""), - pair("accept", ""), - pair("access-control-allow-origin", ""), - pair("age", ""), - pair("allow", ""), - pair("authorization", ""), - pair("cache-control", ""), - pair("content-disposition", ""), - pair("content-encoding", ""), - pair("content-language", ""), - pair("content-length", ""), - pair("content-location", ""), - pair("content-range", ""), - pair("content-type", ""), - pair("cookie", ""), - pair("date", ""), - pair("etag", ""), - pair("expect", ""), - pair("expires", ""), - pair("from", ""), - pair("host", ""), - pair("if-match", ""), - pair("if-modified-since", ""), - pair("if-none-match", ""), - pair("if-range", ""), - pair("if-unmodified-since", ""), - pair("last-modified", ""), - pair("link", ""), - pair("location", ""), - pair("max-forwards", ""), - pair("proxy-authenticate", ""), - pair("proxy-authorization", ""), - pair("range", ""), - pair("referer", ""), - pair("refresh", ""), - pair("retry-after", ""), - pair("server", ""), - pair("set-cookie", ""), - pair("strict-transport-security", ""), - pair("transfer-encoding", ""), - pair("user-agent", ""), - pair("vary", ""), - pair("via", ""), - pair("www-authenticate", ""), + HeaderField{Name: ":authority"}, + HeaderField{Name: ":method", Value: "GET"}, + HeaderField{Name: ":method", Value: "POST"}, + HeaderField{Name: ":path", Value: "/"}, + HeaderField{Name: ":path", Value: "/index.html"}, + HeaderField{Name: ":scheme", Value: "http"}, + HeaderField{Name: ":scheme", Value: "https"}, + HeaderField{Name: ":status", Value: "200"}, + HeaderField{Name: ":status", Value: "204"}, + HeaderField{Name: ":status", Value: "206"}, + HeaderField{Name: ":status", Value: "304"}, + HeaderField{Name: ":status", Value: "400"}, + HeaderField{Name: ":status", Value: "404"}, + HeaderField{Name: ":status", Value: "500"}, + HeaderField{Name: "accept-charset"}, + HeaderField{Name: "accept-encoding", Value: "gzip, deflate"}, + HeaderField{Name: "accept-language"}, + HeaderField{Name: "accept-ranges"}, + HeaderField{Name: "accept"}, + HeaderField{Name: "access-control-allow-origin"}, + HeaderField{Name: "age"}, + HeaderField{Name: "allow"}, + HeaderField{Name: "authorization"}, + HeaderField{Name: "cache-control"}, + HeaderField{Name: "content-disposition"}, + HeaderField{Name: "content-encoding"}, + HeaderField{Name: "content-language"}, + HeaderField{Name: "content-length"}, + HeaderField{Name: "content-location"}, + HeaderField{Name: "content-range"}, + HeaderField{Name: "content-type"}, + HeaderField{Name: "cookie"}, + HeaderField{Name: "date"}, + HeaderField{Name: "etag"}, + HeaderField{Name: "expect"}, + HeaderField{Name: "expires"}, + HeaderField{Name: "from"}, + HeaderField{Name: "host"}, + HeaderField{Name: "if-match"}, + HeaderField{Name: "if-modified-since"}, + HeaderField{Name: "if-none-match"}, + HeaderField{Name: "if-range"}, + HeaderField{Name: "if-unmodified-since"}, + HeaderField{Name: "last-modified"}, + HeaderField{Name: "link"}, + HeaderField{Name: "location"}, + HeaderField{Name: "max-forwards"}, + HeaderField{Name: "proxy-authenticate"}, + HeaderField{Name: "proxy-authorization"}, + HeaderField{Name: "range"}, + HeaderField{Name: "referer"}, + HeaderField{Name: "refresh"}, + HeaderField{Name: "retry-after"}, + HeaderField{Name: "server"}, + HeaderField{Name: "set-cookie"}, + HeaderField{Name: "strict-transport-security"}, + HeaderField{Name: "transfer-encoding"}, + HeaderField{Name: "user-agent"}, + HeaderField{Name: "vary"}, + HeaderField{Name: "via"}, + HeaderField{Name: "www-authenticate"}, } func newStaticTable() *headerFieldTable {