Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91b2ca85 authored by Andy McFadden's avatar Andy McFadden
Browse files

Add two new display info fields

This adds SurfaceFlinger's app VSYNC offset and buffer deadline
values to DisplayInfo.

Bug 14612039

Change-Id: Ie0ab21d388fe2764f2b6f71bd1cefa33dc861a73
parent 24730ee6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <stdint.h>
#include <sys/types.h>
#include <utils/Timers.h>

#include <ui/PixelFormat.h>

@@ -33,6 +34,8 @@ struct DisplayInfo {
    float density;
    uint8_t orientation;
    bool secure;
    nsecs_t appVsyncOffset;
    nsecs_t presentationDeadline;
};

/* Display orientations as defined in Surface.java and ISurfaceComposer.h. */
+18 −2
Original line number Diff line number Diff line
@@ -576,6 +576,22 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display,
        info.xdpi = xdpi;
        info.ydpi = ydpi;
        info.fps = float(1e9 / hwConfig.refresh);
        info.appVsyncOffset = VSYNC_EVENT_PHASE_OFFSET_NS;

        // This is how far in advance a buffer must be queued for
        // presentation at a given time.  If you want a buffer to appear
        // on the screen at time N, you must submit the buffer before
        // (N - presentationDeadline).
        //
        // Normally it's one full refresh period (to give SF a chance to
        // latch the buffer), but this can be reduced by configuring a
        // DispSync offset.  Any additional delays introduced by the hardware
        // composer or panel must be accounted for here.
        //
        // We add an additional 1ms to allow for processing time and
        // differences between the ideal and actual refresh rate.
        info.presentationDeadline =
                hwConfig.refresh - SF_VSYNC_EVENT_PHASE_OFFSET_NS + 1000000;

        // All non-virtual displays are currently considered secure.
        info.secure = true;
@@ -586,11 +602,11 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display,
    return NO_ERROR;
}

int SurfaceFlinger::getActiveConfig(const sp<IBinder>& display) {
int SurfaceFlinger::getActiveConfig(const sp<IBinder>&) {
    return 0;
}

status_t SurfaceFlinger::setActiveConfig(const sp<IBinder>& display, int id) {
status_t SurfaceFlinger::setActiveConfig(const sp<IBinder>&, int) {
    return NO_ERROR;
}