// Copyright 2017 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.

library fuchsia.images;

/// Information returned by methods such as `ImagePipe.PresentImage()` and
/// `Session.Present()`, when the consumer begins preparing the first frame
/// which includes the presented content.
struct PresentationInfo {
  /// The actual time at which the enqueued operations are anticipated to take
  /// visible effect, expressed in nanoseconds in the `CLOCK_MONOTONIC`
  /// timebase.
  ///
  /// This value increases monotonically with each new frame, typically in
  /// increments of the `presentation_interval`.
  uint64 presentation_time;

  /// The nominal amount of time which is anticipated to elapse between
  /// successively presented frames, expressed in nanoseconds.  When rendering
  /// to a display, the interval will typically be derived from the display
  /// refresh rate.
  ///
  /// This value is non-zero.  It may vary from time to time, such as when
  /// changing display modes.
  uint64 presentation_interval;
};
