From a1be58f1013697223a339a6a49302e1e42a6662d Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Thu, 14 Oct 2021 17:00:52 +0200 Subject: 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. --- .../kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt | 4 ++-- 1 file 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, 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, 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 } -- cgit v1.2.3