blob: 54ab0f604ba6000e0c63e20a9726e15ec20a8934 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIB_MEDIA_TIMELINE_TIMELINE_H_
#define LIB_MEDIA_TIMELINE_TIMELINE_H_
#include "lib/fxl/time/time_delta.h"
#include "lib/fxl/time/time_point.h"
namespace media {
// Some helpful constants and static methods relating to timelines.
class Timeline {
public:
// Returns the current local time in nanoseconds since epoch.
static int64_t local_now() {
return (fxl::TimePoint::Now() - fxl::TimePoint()).ToNanoseconds();
}
// Returns the specified time in nanoseconds since epoch.
static int64_t local_time_from(fxl::TimePoint time_point) {
return (time_point - fxl::TimePoint()).ToNanoseconds();
}
// Returns the specified time in nanoseconds from epoch as a |TimePoint|.
static fxl::TimePoint to_time_point(int64_t nanosecond_from_epoch) {
return fxl::TimePoint::FromEpochDelta(to_delta(nanosecond_from_epoch));
}
// Returns the specified delta in nanoseconds.
static int64_t delta_from(fxl::TimeDelta time_delta) {
return time_delta.ToNanoseconds();
}
// Returns the specified time delta in nanoseconds as a |TimeDelta|.
static fxl::TimeDelta to_delta(int64_t nanosecond_from_epoch) {
return fxl::TimeDelta::FromNanoseconds(nanosecond_from_epoch);
}
template <typename T>
static constexpr int64_t ns_from_seconds(T seconds) {
return fxl::TimeDelta::FromSeconds(seconds).ToNanoseconds();
}
template <typename T>
static constexpr int64_t ns_from_ms(T milliseconds) {
return fxl::TimeDelta::FromMilliseconds(milliseconds).ToNanoseconds();
}
template <typename T>
static constexpr int64_t ns_from_us(T microseconds) {
return fxl::TimeDelta::FromMicroseconds(microseconds).ToNanoseconds();
}
};
} // namespace media
#endif // LIB_MEDIA_TIMELINE_TIMELINE_H_