blob: 75934765204f7c212f0bfe67515ae5a0330304d4 [file] [log] [blame]
// Copyright 2018 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.
#include "vsync_recorder.h"
#include <mutex>
namespace flutter {
namespace {
std::mutex g_mutex;
// Since we don't have any presentation info until we call |Present| for the
// first time, assume a 60hz refresh rate in the meantime.
constexpr fml::TimeDelta kDefaultPresentationInterval =
fml::TimeDelta::FromSecondsF(1.0 / 60.0);
} // namespace
VsyncRecorder& VsyncRecorder::GetInstance() {
static VsyncRecorder vsync_manager;
return vsync_manager;
}
VsyncInfo VsyncRecorder::GetCurrentVsyncInfo() const {
{
std::unique_lock<std::mutex> lock(g_mutex);
if (last_presentation_info_set_) {
return {fml::TimePoint::FromEpochDelta(fml::TimeDelta::FromNanoseconds(
last_presentation_info_.presentation_time)),
fml::TimeDelta::FromNanoseconds(
last_presentation_info_.presentation_interval)};
}
}
return {fml::TimePoint::Now(), kDefaultPresentationInterval};
}
void VsyncRecorder::UpdateVsyncInfo(
fuchsia::images::PresentationInfo presentation_info) {
std::unique_lock<std::mutex> lock(g_mutex);
if (last_presentation_info_set_ &&
presentation_info.presentation_time >
last_presentation_info_.presentation_time) {
last_presentation_info_ = presentation_info;
} else if (!last_presentation_info_set_) {
last_presentation_info_ = presentation_info;
last_presentation_info_set_ = true;
}
}
} // namespace flutter