diff options
Diffstat (limited to 'libs/gui/IGraphicBufferConsumer.cpp')
-rw-r--r-- | libs/gui/IGraphicBufferConsumer.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/libs/gui/IGraphicBufferConsumer.cpp b/libs/gui/IGraphicBufferConsumer.cpp index 6d33a10ab1..240146455e 100644 --- a/libs/gui/IGraphicBufferConsumer.cpp +++ b/libs/gui/IGraphicBufferConsumer.cpp @@ -51,6 +51,8 @@ enum { SET_CONSUMER_USAGE_BITS, SET_TRANSFORM_HINT, GET_SIDEBAND_STREAM, + GET_OCCUPANCY_HISTORY, + DISCARD_FREE_BUFFERS, DUMP, }; @@ -260,6 +262,46 @@ public: return stream; } + virtual status_t getOccupancyHistory(bool forceFlush, + std::vector<OccupancyTracker::Segment>* outHistory) { + Parcel data, reply; + data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); + status_t error = data.writeBool(forceFlush); + if (error != NO_ERROR) { + return error; + } + error = remote()->transact(GET_OCCUPANCY_HISTORY, data, + &reply); + if (error != NO_ERROR) { + return error; + } + error = reply.readParcelableVector(outHistory); + if (error != NO_ERROR) { + return error; + } + status_t result = NO_ERROR; + error = reply.readInt32(&result); + if (error != NO_ERROR) { + return error; + } + 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 dumpState(String8& result, const char* prefix) const { Parcel data, reply; data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); @@ -409,6 +451,31 @@ status_t BnGraphicBufferConsumer::onTransact( } return NO_ERROR; } + case GET_OCCUPANCY_HISTORY: { + CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); + bool forceFlush = false; + status_t error = data.readBool(&forceFlush); + if (error != NO_ERROR) { + return error; + } + std::vector<OccupancyTracker::Segment> history; + status_t result = getOccupancyHistory(forceFlush, &history); + error = reply->writeParcelableVector(history); + if (error != NO_ERROR) { + return error; + } + error = reply->writeInt32(result); + if (error != NO_ERROR) { + return error; + } + 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(); |