summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2014-06-13 14:04:23 -0700
committerAndy McFadden <fadden@android.com>2014-06-17 10:41:46 -0700
commit91b2ca8562763c981c4ce93148db80adb51d0cb6 (patch)
tree13441947f4c92fae7b6ee64df558f7160300d147 /services
parent24730ee6215ca4d69e7737111743c613db58a51d (diff)
downloadframeworks_native-91b2ca8562763c981c4ce93148db80adb51d0cb6.zip
frameworks_native-91b2ca8562763c981c4ce93148db80adb51d0cb6.tar.gz
frameworks_native-91b2ca8562763c981c4ce93148db80adb51d0cb6.tar.bz2
Add two new display info fields
This adds SurfaceFlinger's app VSYNC offset and buffer deadline values to DisplayInfo. Bug 14612039 Change-Id: Ie0ab21d388fe2764f2b6f71bd1cefa33dc861a73
Diffstat (limited to 'services')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index edf867a..4ecdc8b 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -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;
}