| // 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. |
| |
| #ifndef TOPAZ_RUNTIME_FLUTTER_RUNNER_VSYNC_RECORDER_H_ |
| #define TOPAZ_RUNTIME_FLUTTER_RUNNER_VSYNC_RECORDER_H_ |
| |
| #include <optional> |
| |
| #include "flutter/fml/time/time_delta.h" |
| #include "flutter/fml/time/time_point.h" |
| #include "lib/ui/scenic/cpp/session.h" |
| |
| namespace flutter_runner { |
| |
| struct VsyncInfo { |
| fml::TimePoint presentation_time; |
| fml::TimeDelta presentation_interval; |
| }; |
| |
| class VsyncRecorder { |
| public: |
| static VsyncRecorder& GetInstance(); |
| |
| // Retrieve the most recent |PresentationInfo| provided to us by scenic. |
| // This function is safe to call from any thread. |
| VsyncInfo GetCurrentVsyncInfo() const; |
| |
| // Update the current Vsync info to |presentation_info|. This is expected |
| // to be called in |scenic::Sesssion::Present| callbacks with the |
| // presentation info provided by scenic. Only the most recent vsync |
| // information will be saved (in order to handle edge cases involving |
| // multiple scenic sessions in the same process). This function is safe to |
| // call from any thread. |
| void UpdateVsyncInfo(fuchsia::images::PresentationInfo presentation_info); |
| |
| private: |
| VsyncRecorder() = default; |
| |
| std::optional<fuchsia::images::PresentationInfo> last_presentation_info_; |
| |
| // Disallow copy and assignment. |
| VsyncRecorder(const VsyncRecorder&) = delete; |
| VsyncRecorder& operator=(const VsyncRecorder&) = delete; |
| }; |
| |
| } // namespace flutter_runner |
| |
| #endif // TOPAZ_RUNTIME_FLUTTER_RUNNER_VSYNC_RECORDER_H_ |