| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "dart_timestamp_provider.h" | |
| #include "dart_tools_api.h" | |
| namespace flutter { | |
| DartTimestampProvider::DartTimestampProvider() = default; | |
| DartTimestampProvider::~DartTimestampProvider() = default; | |
| int64_t DartTimestampProvider::ConvertToNanos(int64_t ticks, | |
| int64_t frequency) { | |
| int64_t nano_seconds = (ticks / frequency) * kNanosPerSecond; | |
| int64_t leftover_ticks = ticks % frequency; | |
| int64_t leftover_nanos = (leftover_ticks * kNanosPerSecond) / frequency; | |
| return nano_seconds + leftover_nanos; | |
| } | |
| fml::TimePoint DartTimestampProvider::Now() { | |
| const int64_t ticks = Dart_TimelineGetTicks(); | |
| const int64_t frequency = Dart_TimelineGetTicksFrequency(); | |
| // optimization for the most common case. | |
| if (frequency != kNanosPerSecond) { | |
| return fml::TimePoint::FromTicks(ConvertToNanos(ticks, frequency)); | |
| } else { | |
| return fml::TimePoint::FromTicks(ticks); | |
| } | |
| } | |
| fml::TimePoint DartTimelineTicksSinceEpoch() { | |
| return DartTimestampProvider::Instance().Now(); | |
| } | |
| } // namespace flutter |