Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1896)

Unified Diff: mojo/services/gfx/composition/interfaces/scheduling.mojom

Issue 1552963002: Initial checkin of the new Mozart compositor. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-11
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/services/gfx/composition/interfaces/scheduling.mojom
diff --git a/mojo/services/gfx/composition/interfaces/scheduling.mojom b/mojo/services/gfx/composition/interfaces/scheduling.mojom
new file mode 100644
index 0000000000000000000000000000000000000000..4399a919a3f4a9f7102fdf9e5b926d9800679510
--- /dev/null
+++ b/mojo/services/gfx/composition/interfaces/scheduling.mojom
@@ -0,0 +1,89 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[DartPackage="mojo_services"]
+module mojo.gfx.composition;
+
+// Provides support for scheduling drawing and composition operations
+// for a particular scene.
+//
+// Instances of this interface must be obtained from a |Scene|. This interface
+// is modeled separately so as to allow applications to use different threads
+// for scheduling work as opposed to publishing scene updates.
+interface SceneScheduler {
+ // Asks the compositor to invoke the callback when it is a good time to
+ // draw the next frame.
+ //
+ // The rate at which the callback is invoked may depend on how the scene
+ // has been embedded. The scene will only receive frame callbacks while
+ // it is attached to a scene graph which the compositor has been asked
+ // to renderer since timing information ultimately derives from the
+ // renderer. If the same scene is being rendered to multiple destinations
+ // with different timing requirements, the compositor will perform rate
+ // adaptation as required behind the scenes.
+ //
+ // The returned |frame_info| provides information about the frame to
+ // be drawn.
+ //
+ // TODO(jeffbrown): Consider whether we should have the callback be invoked
+ // immediately rather than on schedule, letting the client set its own
+ // timers. Advantage may be a reduction in latency due to the elimination
+ // of an IPC on a timing critical path. Disadvantage may be an increase
+ // in the number of context switches and some extra client side bookkeeping.
+ // Note that although clients could predict future frame times based on the
+ // reported information, it's still better for them to schedule each frame
+ // individually so they stay in sync with one another and quickly catch
+ // up to any changes in timing. This also gives the compositor more
+ // opportunity to plan for the upcoming frame, perhaps even boost clocks
+ // in anticipation.
+ ScheduleFrame() => (FrameInfo frame_info);
+};
+
+// Provides timestamp information about a frame which has been scheduled
+// to be drawn.
+struct FrameInfo {
+ // A timestamp indicating when the work of updating the frame was scheduled
+ // to begin which may be used to coordinate animations that require a
+ // monotonic timing reference for synchronization, even across scenes.
+ //
+ // This value monotonically increases with each frame, never repeats, and
+ // is guaranteed to represent a time in the past. It will always be less
+ // than or equal to the value returned by |MojoGetTimeTicksNow()| when the
+ // frame info is received as part of a |ScheduleFrame()| callback.
+ //
+ // Expressed in microseconds in the |MojoTimeTicks| timebase.
+ // TODO(jeffbrown): Time ticks may need finer resolution guarantees.
+ int64 frame_time;
+
+ // The anticipated time interval between the currently scheduled frame
+ // and the next one.
+ //
+ // The interval is approximate and may change at any time. There is no
+ // guarantee that the next frame will occur precisely on the specified
+ // interval.
+ //
+ // Expressed in microseconds.
+ uint64 frame_interval;
+
+ // A timestamp indicating when scene updates must be published and ready
+ // to be composited in order for the changes to be reflected in this frame.
+ //
+ // This value is guaranteed to be no less than |frame_time| but it is
+ // not necessarily monotonic; it may briefly go backwards if the frame
+ // interval or pipeline depth changes between frames.
+ //
+ // Expressed in microseconds in the |MojoTimeTicks| timebase.
+ int64 frame_deadline;
+
+ // A timestamp indicating approximately when the contents of the frame
+ // will be shown on the display output assuming everything is fully rendered
+ // and submitted by the indicated |frame_deadline|.
+ //
+ // This value is guaranteed to be no less than |frame_deadline| but it is
+ // not necessarily monotonic; it may briefly go backwards if the frame
+ // interval or pipeline depth changes between frames.
+ //
+ // Expressed in microseconds in the |MojoTimeTicks| timebase.
+ int64 presentation_time;
+};

Powered by Google App Engine
This is Rietveld 408576698