summaryrefslogtreecommitdiff
path: root/opendc-telemetry/opendc-telemetry-compute
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-10-14 17:00:52 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-10-25 17:58:49 +0200
commita1be58f1013697223a339a6a49302e1e42a6662d (patch)
tree8a93a70b0e71065d72230d995ef6eb0be4b05ff3 /opendc-telemetry/opendc-telemetry-compute
parent6a1aea440c3066edc2ea6b79a65adb5313f4dd48 (diff)
perf(telemetry): Do not allocate lambda in fast-path
This commit changes the lookup for host and server aggregators to use `getOrPut` instead of `computeIfAbsent`. The former will inline the lambda and not cause any memory allocation in the fast-path (e.g., the key exists), while the latter always allocates lambda for constructing the aggregator.
Diffstat (limited to 'opendc-telemetry/opendc-telemetry-compute')
-rw-r--r--opendc-telemetry/opendc-telemetry-compute/src/main/kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt4
1 files changed, 2 insertions, 2 deletions
diff --git a/opendc-telemetry/opendc-telemetry-compute/src/main/kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt b/opendc-telemetry/opendc-telemetry-compute/src/main/kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt
index 738ec38b..d5257bbd 100644
--- a/opendc-telemetry/opendc-telemetry-compute/src/main/kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt
+++ b/opendc-telemetry/opendc-telemetry-compute/src/main/kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt
@@ -222,7 +222,7 @@ public class ComputeMetricAggregator {
private fun getHost(hosts: MutableMap<String, HostAggregator>, resource: Resource): HostAggregator? {
val id = resource.attributes[HOST_ID]
return if (id != null) {
- hosts.computeIfAbsent(id) { HostAggregator(resource) }
+ hosts.getOrPut(id) { HostAggregator(resource) }
} else {
null
}
@@ -234,7 +234,7 @@ public class ComputeMetricAggregator {
private fun getServer(servers: MutableMap<String, ServerAggregator>, point: PointData): ServerAggregator? {
val id = point.attributes[ResourceAttributes.HOST_ID]
return if (id != null) {
- servers.computeIfAbsent(id) { ServerAggregator(point.attributes) }
+ servers.getOrPut(id) { ServerAggregator(point.attributes) }
} else {
null
}