Name

    ANDROID_get_frame_timestamps

Name Strings

    EGL_ANDROID_get_frame_timestamps

Contributors

    Brian Anderson
    Dan Stoza
    Pablo Ceballos
    Jesse Hall
    Fabien Sanglard

Contact

    Brian Anderson, Google Inc. (brianderson 'at' google.com)
    Dan Stoza, Google Inc. (stoza 'at' google.com)
    Pablo Ceballos, Google Inc. (pceballos 'at' google.com)
    Jesse Hall, Google Inc. (jessehall 'at' google.com)
    Fabien Sanglard, Google Inc. (sanglardf 'at' google.com)

Status

    Draft

Version

    Version 8, April 11, 2017

Number

    EGL Extension #XXX

Dependencies

    Requires EGL 1.2

    This extension is written against the wording of the EGL 1.5 Specification

Overview

    This extension allows querying various timestamps related to the composition
    and display of window surfaces.

    Some examples of how this might be used:
        - The display present time can be used to calculate end-to-end latency
          of the entire graphics pipeline.
        - The queue time and rendering complete time can be used to determine
          how long the application's rendering took to complete. Likewise, the
          composition start time and finish time can be used to determine how
          long the compositor's rendering work took. In combination these can be
          used to help determine if the system is GPU or CPU bound.

New Types

    /*
     * EGLnsecsANDROID is a signed integer type for representing a time in
     * nanoseconds.
     */
    #include <khrplatform.h>
    typedef khronos_stime_nanoseconds_t EGLnsecsANDROID;

New Procedures and Functions

    EGLBoolean eglGetNextFrameIdANDROID(EGLDisplay dpy, EGLSurface surface,
            EGLuint64KHR *frameId);

    EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy,
            EGLSurface surface, EGLint numTimestamps,
            const EGLint *names, EGLnsecsANDROID *values);

    EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface,
            EGLuint64KHR frameId, EGLint numTimestamps,
            const EGLint *timestamps, EGLnsecsANDROID *values);

    EGLBoolean eglQueryTimestampSupportedANDROID(EGLDisplay dpy,
            EGLSurface surface, EGLint timestamp);

New Tokens

    EGL_TIMESTAMPS_ANDROID 0x3430
    EGL_COMPOSITE_DEADLINE_ANDROID 0x3431
    EGL_COMPOSITE_INTERVAL_ANDROID 0x3432
    EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433
    EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434
    EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435
    EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436
    EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437
    EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438
    EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439
    EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A
    EGL_DEQUEUE_READY_TIME_ANDROID 0x343B
    EGL_READS_DONE_TIME_ANDROID 0x343C
    EGL_TIMESTAMP_PENDING_ANDROID -2
    EGL_TIMESTAMP_INVALID_ANDROID -1

Add to the list of supported tokens for eglSurfaceAttrib in section 3.5.6
"Surface Attributes", page 43:

    If attribute is EGL_TIMESTAMPS_ANDROID, then values specifies whether to
    enable/disable timestamp collection for this surface. A value of EGL_TRUE
    enables timestamp collection, while a value of EGL_FALSE disables it. The
    initial value is false. If surface is not a window surface this has no
    effect.
Changes to Chapter 3 of the EGL 1.5 Specification (EGL Functions and Errors)

    Add a new subsection under Section 3,

    "3.13 Composition and Display Timestamps

    The function

        EGLBoolean eglGetNextFrameIdANDROID(EGLDisplay dpy, EGLSurface surface,
            EGLuint64KHR *frameId);

    Returns an identifier for the next frame to be swapped. The identifier can
    be used to correlate a particular eglSwapBuffers with its timestamps in
    eglGetFrameTimestampsANDROID. If any error is generated, the function will
    return EGL_FALSE.

    The function

        EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy,
                EGLSurface surface, EGLint numTimestamps,
                const EGLint *names, EGLnsecsANDROID *values);

    allows querying anticipated timestamps and durations related to the
    composition and display of a window surface. The values are not associated
    with a particular frame and can be retrieved before the first swap.

    The eglGetCompositorTimingANDROID function takes an array of names to
    query and returns their values in the corresponding indices of the values
    array. The possible names that can be queried are:
        - EGL_COMPOSITE_DEADLINE_ANDROID - The timestamp of the next time the
          compositor will begin composition. This is effectively the deadline
          for when the compositor must receive a newly queued frame.
        - EGL_COMPOSITE_INTERVAL_ANDROID - The time delta between subsequent
          composition events.
        - EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID - The time delta between
          the start of composition and the expected present time of that
          composition. This can be used to estimate the latency of the
          actual present time.

    The function

        EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy,
            EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps,
            const EGLint *timestamps, EGLnsecsANDROID *values);

    allows querying various timestamps related to the composition and display
    of specific frames of a window surface.

    The frameId indicates which frame to query. The implementation maintains a
    limited history of timestamp data. If a query is made for a frame whose
    timestamp history no longer exists then EGL_BAD_ACCESS is generated. If
    timestamp collection has not been enabled for the surface then
    EGL_BAD_SURFACE is generated.  Timestamps for events that might still occur
    will have the value EGL_TIMESTAMP_PENDING_ANDROID. Timestamps for events
    that did not occur will have the value EGL_TIMESTAMP_INVALID_ANDROID.
    Otherwise, the timestamp will be valid and indicate the event has occured.
    Timestamp queries that are not supported will generate an EGL_BAD_PARAMETER
    error. If any error is generated the function will return EGL_FALSE.

    The application can poll for the timestamp of particular events by calling
    eglGetFrameTimestamps over and over without needing to call any other EGL
    function between calls. This is true even for the most recently swapped
    frame. eglGetFrameTimestamps is thread safe and can be called from a
    different thread than the swapping thread.

    The eglGetFrameTimestampsANDROID function takes an array of timestamps to
    query and returns timestamps in the corresponding indices of the values
    array. The possible timestamps that can be queried are:
        - EGL_REQUESTED_PRESENT_TIME_ANDROID - The time the application
          requested this frame be presented. See EGL_ANDROID_presentation_time.
          If the application does not request a presentation time explicitly,
          this will correspond to buffer's queue time.
        - EGL_RENDERING_COMPLETE_TIME_ANDROID - The time when all of the
          application's rendering to the surface was completed.
        - EGL_COMPOSITION_LATCH_TIME_ANDROID - The time when the compositor
          selected this frame as the one to use for the next composition. The
          latch is the earliest indication that the frame was submitted in time
          to be composited.
        - EGL_FIRST_COMPOSITION_START_TIME_ANDROID - The first time at which
          the compositor began preparing composition for this frame.
        - EGL_LAST_COMPOSITION_START_TIME_ANDROID - The last time at which the
          compositor began preparing composition for this frame. If this frame
          is composited only once, it will have the same value as
          EGL_FIRST_COMPOSITION_START_TIME_ANDROID. If the value is not equal,
          that indicates the subsequent frame was not submitted in time to be
          latched by the compositor. Note: The value may not be updated for
          every display refresh if the compositor becomes idle.
        - EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID - The time at which
          the compositor's rendering work for this frame finished. This will be
          zero if composition was handled by the display and the compositor
          didn't do any rendering.
        - EGL_DISPLAY_PRESENT_TIME_ANDROID - The time at which this frame
          started to scan out to the physical display.
        - EGL_DEQUEUE_READY_TIME_ANDROID - The time when the buffer became
          available for reuse as a buffer the client can target without
          blocking. This is generally the point when all read commands of the
          buffer have been submitted, but not necessarily completed.
        - EGL_READS_DONE_TIME_ANDROID - The time at which all reads for the
          purpose of display/composition were completed for this frame.

    Not all implementations may support all of the above timestamp queries. The
    functions

        EGLBoolean eglGetCompositorTimingSupportedANDROID(EGLDisplay dpy,
            EGLSurface surface, EGLint name);

    and

        EGLBoolean eglGetFrameTimestampsSupportedANDROID(EGLDisplay dpy,
            EGLSurface surface, EGLint timestamp);

    allows querying which values are supported by the implementations of
    eglGetCompositoTimingANDROID and eglGetFrameTimestampsSupportedANDROID
    respectively."

Issues

    None

Revision History

#8 (Brian Anderson, April 11, 2017)
    - Use reserved enumerant values.

#7 (Brian Anderson, March 21, 2017)
    - Differentiate between pending events and events that did not occur.

#6 (Brian Anderson, March 16, 2017)
    - Remove DISPLAY_RETIRE_TIME_ANDROID.

#5 (Brian Anderson, January 13, 2017)
    - Add eglGetCompositorTimingANDROID.

#4 (Brian Anderson, January 10, 2017)
    - Use an absolute frameId rather than a relative framesAgo.

#3 (Brian Anderson, November 30, 2016)
    - Add EGL_COMPOSITION_LATCH_TIME_ANDROID,
      EGL_LAST_COMPOSITION_START_TIME_ANDROID, and
      EGL_DEQUEUE_READY_TIME_ANDROID.

#2 (Brian Anderson, July 22, 2016)
    - Replace EGL_QUEUE_TIME_ANDROID with EGL_REQUESTED_PRESENT_TIME_ANDROID.
    - Add DISPLAY_PRESENT_TIME_ANDROID.

#1 (Pablo Ceballos, May 31, 2016)
    - Initial draft.

