Ideally you can transform an existing future into a future that times it execution. Unfortunately that doensn't work with the standard Scala/Akka futures. However, we could measure from the moment of the transformation. E.g.:
{{{
def asTimedFuture[A](metricName: String, f: Future[A]): Future[A] = {
  val timerContext = /* create timer and get context */
  f.onComplete(/* end timerContext */
}
}}}

A bit annoying you have to you the java TimerContext for this approach.

BTW, have you tried to use this? I understood that in Metrics 3 you have to hold on to the reference to the timer; you can not re-create it again and again under the same name. If I am not mistaken, then the approach of creating the timer in line 75 doesn't work.