mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-18 04:49:55 +00:00
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.
This commit is contained in:
@@ -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,
|
||||
})
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user