summaryrefslogtreecommitdiff
path: root/libs/gui/Surface.cpp
diff options
context:
space:
mode:
author Ian Elliott <ianelliott@google.com> 2017-01-24 23:18:23 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-01-24 23:18:24 +0000
commiteda1dc7a6961d0ac00b0b6953997033a109493b7 (patch)
treed94e192308288b802acdfaf63f530685ae221eb3 /libs/gui/Surface.cpp
parent86aa938c79672c0be42a0a7d9b03dda47c47d134 (diff)
parent62c48c931f88ec44c41621afe988c34cab1fb41d (diff)
Merge "Plumb refresh cycle duration up to VK_GOOGLE_display_timing."
Diffstat (limited to 'libs/gui/Surface.cpp')
-rw-r--r--libs/gui/Surface.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index c8598287cc..851a49579b 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -28,6 +28,7 @@
#include <ui/Fence.h>
#include <ui/Region.h>
+#include <ui/DisplayStatInfo.h>
#include <gui/IProducerListener.h>
#include <gui/ISurfaceComposer.h>
@@ -261,6 +262,18 @@ status_t Surface::getFrameTimestamps(uint64_t frameNumber,
return NO_ERROR;
}
+status_t Surface::getDisplayRefreshCyclePeriod(nsecs_t* outMinRefreshDuration,
+ nsecs_t* outMaxRefreshDuration) {
+ ATRACE_CALL();
+
+ DisplayStatInfo stats;
+ status_t err = composerService()->getDisplayStats(NULL, &stats);
+
+ *outMinRefreshDuration = stats.vsyncPeriod;
+ *outMaxRefreshDuration = stats.vsyncPeriod;
+
+ return NO_ERROR;
+}
int Surface::hook_setSwapInterval(ANativeWindow* window, int interval) {
Surface* c = getSelf(window);
@@ -828,6 +841,9 @@ int Surface::perform(int operation, va_list args)
case NATIVE_WINDOW_GET_FRAME_TIMESTAMPS:
res = dispatchGetFrameTimestamps(args);
break;
+ case NATIVE_WINDOW_GET_REFRESH_CYCLE_PERIOD:
+ res = dispatchGetDisplayRefreshCyclePeriod(args);
+ break;
default:
res = NAME_NOT_FOUND;
break;
@@ -973,6 +989,13 @@ int Surface::dispatchGetFrameTimestamps(va_list args) {
outDisplayRetireTime, outDequeueReadyTime, outReleaseTime);
}
+int Surface::dispatchGetDisplayRefreshCyclePeriod(va_list args) {
+ nsecs_t* outMinRefreshDuration = va_arg(args, int64_t*);
+ nsecs_t* outMaxRefreshDuration = va_arg(args, int64_t*);
+ return getDisplayRefreshCyclePeriod(outMinRefreshDuration,
+ outMaxRefreshDuration);
+}
+
int Surface::connect(int api) {
static sp<IProducerListener> listener = new DummyProducerListener();
return connect(api, listener);