diff options
Diffstat (limited to 'libs/gui/Surface.cpp')
| -rw-r--r-- | libs/gui/Surface.cpp | 23 |
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); |