aggregator: don't allocate memory if we don't have tags #297
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Before:
BenchmarkGetContextNoTags-10 39929401 29.70 ns/op 16 B/op 1 allocs/op
After:
BenchmarkGetContextNoTags-10 419886585 2.902 ns/op 0 B/op 0 allocs/op
This might look not much, but this makes a lot of difference in term of allocation when a counter is called repeatedly inside a loop.
This also fixes the other benchmarks that I wanted to run to validate I didn't cause regression but where not able to run properly
We can see it in this profile (referencing line 182 explicitely):
Referencing https://github.com/DataDog/datadog-go/blob/master/statsd/aggregator.go#L182 as the main cause of allocation
From a simple call to Count:
statsd.Count("rollout.done", 1, nil, 1.0)