diff options
Diffstat (limited to 'libs/gui/Surface.cpp')
-rw-r--r-- | libs/gui/Surface.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 9191b2a379..7578a3db29 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -550,6 +550,9 @@ int Surface::perform(int operation, va_list args) case NATIVE_WINDOW_SET_SURFACE_DAMAGE: res = dispatchSetSurfaceDamage(args); break; + case NATIVE_WINDOW_SET_SINGLE_BUFFER_MODE: + res = dispatchSetSingleBufferMode(args); + break; default: res = NAME_NOT_FOUND; break; @@ -660,6 +663,12 @@ int Surface::dispatchSetSurfaceDamage(va_list args) { return NO_ERROR; } +int Surface::dispatchSetSingleBufferMode(va_list args) { + bool singleBufferMode = va_arg(args, int); + setSingleBufferMode(singleBufferMode); + return NO_ERROR; +} + int Surface::connect(int api) { static sp<IProducerListener> listener = new DummyProducerListener(); return connect(api, listener); @@ -861,6 +870,19 @@ int Surface::setAsyncMode(bool async) { return err; } +int Surface::setSingleBufferMode(bool singleBufferMode) { + ATRACE_CALL(); + ALOGV("Surface::setSingleBufferMode (%d)", singleBufferMode); + Mutex::Autolock lock(mMutex); + + status_t err = mGraphicBufferProducer->setSingleBufferMode( + singleBufferMode); + ALOGE_IF(err, "IGraphicsBufferProducer::setSingleBufferMode(%d) returned" + "%s", singleBufferMode, strerror(-err)); + + return err; +} + int Surface::setBuffersDimensions(uint32_t width, uint32_t height) { ATRACE_CALL(); |