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 {