From 261e33a3fa406ccb2eef5c59bf6132892d564c0e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 12 Dec 2017 17:44:45 +0000 Subject: [PATCH] Call Must(En|De)code instead of (En|De)code to save time Encode/Decode returns an error code, which we are generally not checking for sub-objects because we never expect it to fail. In the new version of codegen Encode() sets up a panic handler and calls MustEncode(), and the panic handler has a performance cost. So just call MustEncode() and if for some reason the encoding does fail we will see it as a panic. We still call Encode/Decode at top level and check the return code. --- report/controls.go | 2 +- report/counters.go | 4 ++-- report/latest_map_internal_test.go | 2 +- report/metric_row.go | 4 ++-- report/metrics.go | 2 +- report/metrics_test.go | 8 ++------ report/node_set.go | 8 +++----- report/sets.go | 4 ++-- 8 files changed, 14 insertions(+), 20 deletions(-) diff --git a/report/controls.go b/report/controls.go index 6a9f06541..88b96ab43 100644 --- a/report/controls.go +++ b/report/controls.go @@ -91,7 +91,7 @@ type wireNodeControls struct { // CodecEncodeSelf implements codec.Selfer func (nc *NodeControls) CodecEncodeSelf(encoder *codec.Encoder) { - encoder.Encode(wireNodeControls{ + encoder.MustEncode(wireNodeControls{ Timestamp: renderTime(nc.Timestamp), Controls: nc.Controls, }) diff --git a/report/counters.go b/report/counters.go index 8bb494dcd..09dd96021 100644 --- a/report/counters.go +++ b/report/counters.go @@ -110,7 +110,7 @@ func (c Counters) fromIntermediate(in map[string]int) Counters { func (c *Counters) CodecEncodeSelf(encoder *codec.Encoder) { mapWrite(c.psMap, encoder, func(encoder *codec.Encoder, val interface{}) { i := val.(int) - encoder.Encode(i) + encoder.MustEncode(i) }) } @@ -119,7 +119,7 @@ func (c *Counters) CodecDecodeSelf(decoder *codec.Decoder) { out := mapRead(decoder, func(isNil bool) interface{} { var value int if !isNil { - decoder.Decode(&value) + decoder.MustDecode(&value) } return value }) diff --git a/report/latest_map_internal_test.go b/report/latest_map_internal_test.go index 1db926df5..59bce4d23 100644 --- a/report/latest_map_internal_test.go +++ b/report/latest_map_internal_test.go @@ -164,7 +164,7 @@ func BenchmarkLatestMapDecode(b *testing.B) { for i := 0; i < b.N; i++ { var map1 StringLatestMap - codec.NewDecoderBytes(buf.Bytes(), &codec.MsgpackHandle{}).Decode(&map1) + codec.NewDecoderBytes(buf.Bytes(), &codec.MsgpackHandle{}).MustDecode(&map1) } } diff --git a/report/metric_row.go b/report/metric_row.go index 2d61e0218..ecb8469d8 100644 --- a/report/metric_row.go +++ b/report/metric_row.go @@ -70,7 +70,7 @@ type wiredMetricRow struct { // rendering, then adds some row-specific fields. func (m *MetricRow) CodecEncodeSelf(encoder *codec.Encoder) { in := m.Metric.ToIntermediate() - encoder.Encode(wiredMetricRow{ + encoder.MustEncode(wiredMetricRow{ ID: m.ID, Label: m.Label, Format: m.Format, @@ -90,7 +90,7 @@ func (m *MetricRow) CodecEncodeSelf(encoder *codec.Encoder) { // CodecDecodeSelf implements codec.Selfer func (m *MetricRow) CodecDecodeSelf(decoder *codec.Decoder) { var in wiredMetricRow - decoder.Decode(&in) + decoder.MustDecode(&in) w := WireMetrics{ Samples: in.Samples, Min: in.Min, diff --git a/report/metrics.go b/report/metrics.go index 63315c622..a2cfc8940 100644 --- a/report/metrics.go +++ b/report/metrics.go @@ -272,7 +272,7 @@ func (m WireMetrics) FromIntermediate() Metric { // CodecEncodeSelf implements codec.Selfer func (m *Metric) CodecEncodeSelf(encoder *codec.Encoder) { in := m.ToIntermediate() - encoder.Encode(in) + encoder.MustEncode(in) } // CodecDecodeSelf implements codec.Selfer diff --git a/report/metrics_test.go b/report/metrics_test.go index a725c4461..b1bede609 100644 --- a/report/metrics_test.go +++ b/report/metrics_test.go @@ -165,9 +165,7 @@ func TestMetricMarshalling(t *testing.T) { decoder := codec.NewDecoder(buf, h) var have report.Metric - if err := decoder.Decode(&have); err != nil { - t.Fatal(err) - } + decoder.MustDecode(&have) if !reflect.DeepEqual(want, have) { t.Error(test.Diff(want, have)) @@ -178,9 +176,7 @@ func TestMetricMarshalling(t *testing.T) { var wire struct { Samples []report.Sample `json:"samples"` } - if err := decoder.Decode(&wire); err != nil { - t.Error(err) - } + decoder.MustDecode(&wire) if !reflect.DeepEqual(wantSamples, wire.Samples) { t.Error(test.Diff(wantSamples, wire.Samples)) } diff --git a/report/node_set.go b/report/node_set.go index 5331b3996..544a012b0 100644 --- a/report/node_set.go +++ b/report/node_set.go @@ -133,18 +133,16 @@ func (n NodeSet) fromIntermediate(nodes []Node) NodeSet { // CodecEncodeSelf implements codec.Selfer func (n *NodeSet) CodecEncodeSelf(encoder *codec.Encoder) { if n.psMap != nil { - encoder.Encode(n.toIntermediate()) + encoder.MustEncode(n.toIntermediate()) } else { - encoder.Encode(nil) + encoder.MustEncode(nil) } } // CodecDecodeSelf implements codec.Selfer func (n *NodeSet) CodecDecodeSelf(decoder *codec.Decoder) { in := []Node{} - if err := decoder.Decode(&in); err != nil { - return - } + decoder.MustDecode(&in) *n = NodeSet{}.fromIntermediate(in) } diff --git a/report/sets.go b/report/sets.go index 2775dbeaa..ed7bd7765 100644 --- a/report/sets.go +++ b/report/sets.go @@ -114,7 +114,7 @@ func (s Sets) DeepEqual(t Sets) bool { // CodecEncodeSelf implements codec.Selfer func (s *Sets) CodecEncodeSelf(encoder *codec.Encoder) { mapWrite(s.psMap, encoder, func(encoder *codec.Encoder, val interface{}) { - encoder.Encode(val.(StringSet)) + encoder.MustEncode(val.(StringSet)) }) } @@ -123,7 +123,7 @@ func (s *Sets) CodecDecodeSelf(decoder *codec.Decoder) { out := mapRead(decoder, func(isNil bool) interface{} { var value StringSet if !isNil { - decoder.Decode(&value) + decoder.MustDecode(&value) } return value })