forked from flutter/engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
TimePoint::Now uses DartTimestampProvider (flutter#27737)
- Loading branch information
1 parent
bf06b19
commit d0343f1
Showing
9 changed files
with
104 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
// 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 "flutter/fml/time/dart_timestamp_provider.h" | ||
|
||
#include "dart_tools_api.h" | ||
|
||
namespace fml { | ||
|
||
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 fml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// 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. | ||
|
||
#ifndef FLUTTER_FML_TIME_DART_TIMESTAMP_PROVIDER_H_ | ||
#define FLUTTER_FML_TIME_DART_TIMESTAMP_PROVIDER_H_ | ||
|
||
#include "flutter/fml/time/timestamp_provider.h" | ||
|
||
#include "flutter/fml/macros.h" | ||
#include "flutter/fml/time/time_point.h" | ||
|
||
namespace fml { | ||
|
||
fml::TimePoint DartTimelineTicksSinceEpoch(); | ||
|
||
/// TimestampProvider implementation that is backed by Dart_TimelineGetTicks | ||
class DartTimestampProvider : TimestampProvider { | ||
public: | ||
static DartTimestampProvider& Instance() { | ||
static DartTimestampProvider instance; | ||
return instance; | ||
} | ||
|
||
~DartTimestampProvider() override; | ||
|
||
fml::TimePoint Now() override; | ||
|
||
private: | ||
static constexpr int64_t kNanosPerSecond = 1000000000; | ||
|
||
int64_t ConvertToNanos(int64_t ticks, int64_t frequency); | ||
|
||
DartTimestampProvider(); | ||
|
||
FML_DISALLOW_COPY_AND_ASSIGN(DartTimestampProvider); | ||
}; | ||
|
||
} // namespace fml | ||
|
||
#endif // FLUTTER_FML_TIME_DART_TIMESTAMP_PROVIDER_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters