// Copyright 2019 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.scenic.scheduling;

using zx;

/// The times we predict for a future presentation, expressed in nanoseconds in
/// the `CLOCK_MONOTONIC` timebase.
table PresentationInfo {
    /// The time where Scenic processes all pending updates to its scene graph
    /// and render a new frame. Clients should aim to have all  commands sent
    /// and acquire fences reached in order to have their  content be
    /// presented at the corresponding `presentation_time`. The `latch_point`
    /// is guaranteed to be less than `presentation_time`.
    1: zx.time latch_point;

    /// The time in which the enqueued operations submitted before `latch_point`
    /// take visible effect. This time is usually but not necessarily vsync.
    2: zx.time presentation_time;
};

/// The times we record for each Present2, expressed in nanoseconds in the
/// `CLOCK_MONOTONIC` timebase.
table PresentReceivedInfo {
    /// The time Scenic receives the Present2 call.
    1: zx.time present_received_time;

    /// The time Scenic latched the Present2 call to. This is guaranteed to be
    /// greater than the `present_received_time`.
    2: zx.time latched_time;
};

/// The data type returned in `fuchsia.ui.scenic::RequestPresentationTimes`. See
/// that method description for more information.
struct FuturePresentationTimes {
    /// The future estimated presentation times. They represent the times Scenic
    /// intends to let the client's work be presented over the next few frames.
    /// These values may change after they are queried.
    ///
    /// Clients who wish to minimize latency should use these values to schedule
    /// their work accordingly.
    vector<PresentationInfo>:8 future_presentations;

    /// The amount of Present() calls the client is currently allowed. If the
    /// client calls Present() when this number is zero, the session will be
    /// shut down.
    ///
    /// This value is decremented every Present() call, and is incremented every
    /// OnFramePresented() event.
    int64 remaining_presents_in_flight_allowed;
};

struct FramePresentedInfo {
    /// The time the frame was presented to the user. This value was captured
    /// after the fact, differentiating it from the `presentation_time`s
    /// included in `FuturePresentationTimes`.
    zx.time actual_presentation_time;

    /// The presentation informations for each Present2() that comprised the
    /// content of this frame. These are ordered by present submission order.
    vector<PresentReceivedInfo>:32 presentation_infos;

    /// The number of times remaining that the client can call `Present2`.
    uint64 num_presents_allowed;
};
