diff options
author | 2016-07-21 17:06:58 -0700 | |
---|---|---|
committer | 2016-07-22 12:27:04 -0700 | |
commit | bc2df65a3f3f4b8abaaaa2a4e576a3a42c2d30f3 (patch) | |
tree | 1d161800a08d5ea3ed3088a5c224173665267769 /libs/gui/IGraphicBufferConsumer.cpp | |
parent | d16f6ae2bd1083ee29717829a39e93908bba2bf5 (diff) |
BufferQueue consumers: Add discardFreeBuffer method
This method releases all free buffers owned by the buffer queue,
in order to save memory (at the cost of potential future
reallocation of buffers).
Bug: 28695173
Change-Id: I458d10373e639e3144faf673af2ba01aca36e65a
Diffstat (limited to 'libs/gui/IGraphicBufferConsumer.cpp')
-rw-r--r-- | libs/gui/IGraphicBufferConsumer.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libs/gui/IGraphicBufferConsumer.cpp b/libs/gui/IGraphicBufferConsumer.cpp index 7c4379f41e..c8eff00e3f 100644 --- a/libs/gui/IGraphicBufferConsumer.cpp +++ b/libs/gui/IGraphicBufferConsumer.cpp @@ -52,6 +52,7 @@ enum { SET_TRANSFORM_HINT, GET_SIDEBAND_STREAM, GET_OCCUPANCY_HISTORY, + DISCARD_FREE_BUFFERS, DUMP, }; @@ -286,6 +287,21 @@ public: return result; } + virtual status_t discardFreeBuffers() { + Parcel data, reply; + data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); + status_t error = remote()->transact(DISCARD_FREE_BUFFERS, data, &reply); + if (error != NO_ERROR) { + return error; + } + int32_t result = NO_ERROR; + error = reply.readInt32(&result); + if (error != NO_ERROR) { + return error; + } + return result; + } + virtual void dump(String8& result, const char* prefix) const { Parcel data, reply; data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); @@ -454,6 +470,12 @@ status_t BnGraphicBufferConsumer::onTransact( } return NO_ERROR; } + case DISCARD_FREE_BUFFERS: { + CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); + status_t result = discardFreeBuffers(); + status_t error = reply->writeInt32(result); + return error; + } case DUMP: { CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); String8 result = data.readString8(); |