diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-10-14 17:00:52 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-10-25 17:58:49 +0200 |
| commit | a1be58f1013697223a339a6a49302e1e42a6662d (patch) | |
| tree | 8a93a70b0e71065d72230d995ef6eb0be4b05ff3 | |
| parent | 6a1aea440c3066edc2ea6b79a65adb5313f4dd48 (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.
| -rw-r--r-- | opendc-telemetry/opendc-telemetry-compute/src/main/kotlin/org/opendc/telemetry/compute/ComputeMetricAggregator.kt | 4 |
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 } |
