1 package com.atlassian.vcache.internal.core.metrics;
2
3 import java.util.Optional;
4 import java.util.function.Consumer;
5 import java.util.function.Supplier;
6
7 import static java.util.Objects.requireNonNull;
8
9
10
11
12
13
14
15
16 public class TimedSupplier<V> implements Supplier<V>, AutoCloseable {
17 private final Supplier<? extends V> delegate;
18 private final Consumer<Optional<Long>> handler;
19
20 private Optional<Long> elapsedDuration = Optional.empty();
21
22 public TimedSupplier(Supplier<V> delegate, Consumer<Optional<Long>> handler) {
23 this.delegate = requireNonNull(delegate);
24 this.handler = requireNonNull(handler);
25 }
26
27 @Override
28 public V get() {
29 try (ElapsedTimer ignored = new ElapsedTimer(t -> elapsedDuration = Optional.of(t))) {
30 return delegate.get();
31 }
32 }
33
34 @Override
35 public void close() {
36 handler.accept(elapsedDuration);
37 }
38 }