// 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;
};
