protected abstract fun read(): Long
Note that the value returned by this method when markNow is called the first time is used as "zero" reading
and the difference from this "zero" reading is calculated for subsequent values.
Therefore, it's not recommended to return values farther than
±Long.MAX_VALUE from the first returned reading
as this will cause this time source flip over future/past boundary for the returned time marks.