It seems like `:time` and `:metric` are used together, which makes me wonder whether it's OK to change the time independently from the metric. We might see a case where one thread updates the time, then sleeps for a while while other threads update `m`, then comes back on line 909 or 920 and clobbers the state with its old value. Would it make sense to fold the entire computation into a single swap operation?