diff options
author | 2017-03-01 17:49:23 +0000 | |
---|---|---|
committer | 2017-03-01 17:49:27 +0000 | |
commit | 77c073bdbe1b24a332056e1194a6162b7717a848 (patch) | |
tree | fefa2a6dc41aa65e35c8cc06d9dddaf64fc7b665 /libs/gui/SurfaceComposerClient.cpp | |
parent | 5ebcd56c6f57514f7833e7528a08d8ca55c48f69 (diff) | |
parent | 9524cb3b37a91b5741790c77ff24fd825b02bca7 (diff) |
Merge changes from topic 'surfaceview-without-wm'
* changes:
Add detachChildren transaction.
Add deferTransaction variant taking GraphicBufferProducer.
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 91e84c40ee..088933afb6 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -37,6 +37,7 @@ #include <gui/IGraphicBufferProducer.h> #include <gui/ISurfaceComposer.h> #include <gui/ISurfaceComposerClient.h> +#include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <private/gui/ComposerService.h> @@ -167,9 +168,14 @@ public: status_t deferTransactionUntil(const sp<SurfaceComposerClient>& client, const sp<IBinder>& id, const sp<IBinder>& handle, uint64_t frameNumber); + status_t deferTransactionUntil(const sp<SurfaceComposerClient>& client, + const sp<IBinder>& id, const sp<Surface>& barrierSurface, + uint64_t frameNumber); status_t reparentChildren(const sp<SurfaceComposerClient>& client, const sp<IBinder>& id, const sp<IBinder>& newParentHandle); + status_t detachChildren(const sp<SurfaceComposerClient>& client, + const sp<IBinder>& id); status_t setOverrideScalingMode(const sp<SurfaceComposerClient>& client, const sp<IBinder>& id, int32_t overrideScalingMode); status_t setGeometryAppliesWithResize(const sp<SurfaceComposerClient>& client, @@ -438,7 +444,21 @@ status_t Composer::deferTransactionUntil( return BAD_INDEX; } s->what |= layer_state_t::eDeferTransaction; - s->handle = handle; + s->barrierHandle = handle; + s->frameNumber = frameNumber; + return NO_ERROR; +} + +status_t Composer::deferTransactionUntil( + const sp<SurfaceComposerClient>& client, const sp<IBinder>& id, + const sp<Surface>& barrierSurface, uint64_t frameNumber) { + Mutex::Autolock lock(mLock); + layer_state_t* s = getLayerStateLocked(client, id); + if (!s) { + return BAD_INDEX; + } + s->what |= layer_state_t::eDeferTransaction; + s->barrierGbp = barrierSurface->getIGraphicBufferProducer(); s->frameNumber = frameNumber; return NO_ERROR; } @@ -457,6 +477,18 @@ status_t Composer::reparentChildren( return NO_ERROR; } +status_t Composer::detachChildren( + const sp<SurfaceComposerClient>& client, + const sp<IBinder>& id) { + Mutex::Autolock lock(mLock); + layer_state_t* s = getLayerStateLocked(client, id); + if (!s) { + return BAD_INDEX; + } + s->what |= layer_state_t::eDetachChildren; + return NO_ERROR; +} + status_t Composer::setOverrideScalingMode( const sp<SurfaceComposerClient>& client, const sp<IBinder>& id, int32_t overrideScalingMode) { @@ -776,11 +808,20 @@ status_t SurfaceComposerClient::deferTransactionUntil(const sp<IBinder>& id, return getComposer().deferTransactionUntil(this, id, handle, frameNumber); } +status_t SurfaceComposerClient::deferTransactionUntil(const sp<IBinder>& id, + const sp<Surface>& barrierSurface, uint64_t frameNumber) { + return getComposer().deferTransactionUntil(this, id, barrierSurface, frameNumber); +} + status_t SurfaceComposerClient::reparentChildren(const sp<IBinder>& id, const sp<IBinder>& newParentHandle) { return getComposer().reparentChildren(this, id, newParentHandle); } +status_t SurfaceComposerClient::detachChildren(const sp<IBinder>& id) { + return getComposer().detachChildren(this, id); +} + status_t SurfaceComposerClient::setOverrideScalingMode( const sp<IBinder>& id, int32_t overrideScalingMode) { return getComposer().setOverrideScalingMode( |