| // 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. |
| type PresentationInfo = table { |
| /// 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: latch_point zx.time; |
| |
| /// The time in which the enqueued operations submitted before `latch_point` |
| /// take visible effect. This time is usually but not necessarily vsync. |
| 2: presentation_time zx.time; |
| }; |
| |
| /// The times we record for each Present2, expressed in nanoseconds in the |
| /// `CLOCK_MONOTONIC` timebase. |
| type PresentReceivedInfo = table { |
| /// The time Scenic receives the Present2 call. |
| 1: present_received_time zx.time; |
| |
| /// The time Scenic latched the Present2 call to. This is guaranteed to be |
| /// greater than the `present_received_time`. |
| 2: latched_time zx.time; |
| }; |
| |
| /// The data type returned in `fuchsia.ui.scenic::RequestPresentationTimes`. See |
| /// that method description for more information. |
| type FuturePresentationTimes = struct { |
| /// 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. |
| future_presentations vector<PresentationInfo>:8; |
| |
| /// 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. |
| remaining_presents_in_flight_allowed int64; |
| }; |
| |
| type FramePresentedInfo = struct { |
| /// 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`. |
| actual_presentation_time zx.time; |
| |
| /// The presentation informations for each Present2() that comprised the |
| /// content of this frame. These are ordered by present submission order. |
| presentation_infos vector<PresentReceivedInfo>:32; |
| |
| /// The number of times remaining that the client can call `Present2`. |
| num_presents_allowed uint64; |
| }; |