Loading libs/gui/BufferItemConsumer.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,8 @@ //#define ATRACE_TAG ATRACE_TAG_GRAPHICS //#define ATRACE_TAG ATRACE_TAG_GRAPHICS #include <utils/Log.h> #include <utils/Log.h> #include <inttypes.h> #include <gui/BufferItem.h> #include <gui/BufferItem.h> #include <gui/BufferItemConsumer.h> #include <gui/BufferItemConsumer.h> Loading @@ -31,13 +33,13 @@ namespace android { namespace android { BufferItemConsumer::BufferItemConsumer( BufferItemConsumer::BufferItemConsumer( const sp<IGraphicBufferConsumer>& consumer, uint32_t consumerUsage, const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage, int bufferCount, bool controlledByApp) : int bufferCount, bool controlledByApp) : ConsumerBase(consumer, controlledByApp) ConsumerBase(consumer, controlledByApp) { { status_t err = mConsumer->setConsumerUsageBits(consumerUsage); status_t err = mConsumer->setConsumerUsageBits(consumerUsage); LOG_ALWAYS_FATAL_IF(err != OK, LOG_ALWAYS_FATAL_IF(err != OK, "Failed to set consumer usage bits to %#x", consumerUsage); "Failed to set consumer usage bits to %#" PRIx64, consumerUsage); if (bufferCount != DEFAULT_MAX_BUFFERS) { if (bufferCount != DEFAULT_MAX_BUFFERS) { err = mConsumer->setMaxAcquiredBufferCount(bufferCount); err = mConsumer->setMaxAcquiredBufferCount(bufferCount); LOG_ALWAYS_FATAL_IF(err != OK, LOG_ALWAYS_FATAL_IF(err != OK, Loading libs/gui/BufferQueueProducer.cpp +9 −0 Original line number Original line Diff line number Diff line Loading @@ -1102,6 +1102,7 @@ int BufferQueueProducer::query(int what, int *outValue) { value = (mCore->mQueue.size() > 1); value = (mCore->mQueue.size() > 1); break; break; case NATIVE_WINDOW_CONSUMER_USAGE_BITS: case NATIVE_WINDOW_CONSUMER_USAGE_BITS: // deprecated; higher 32 bits are truncated value = static_cast<int32_t>(mCore->mConsumerUsageBits); value = static_cast<int32_t>(mCore->mConsumerUsageBits); break; break; case NATIVE_WINDOW_DEFAULT_DATASPACE: case NATIVE_WINDOW_DEFAULT_DATASPACE: Loading Loading @@ -1547,4 +1548,12 @@ status_t BufferQueueProducer::getUniqueId(uint64_t* outId) const { return NO_ERROR; return NO_ERROR; } } status_t BufferQueueProducer::getConsumerUsage(uint64_t* outUsage) const { BQ_LOGV("getConsumerUsage"); Mutex::Autolock lock(mCore->mMutex); *outUsage = mCore->mConsumerUsageBits; return NO_ERROR; } } // namespace android } // namespace android libs/gui/GLConsumer.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1115,7 +1115,7 @@ status_t GLConsumer::setDefaultBufferDataSpace( return mConsumer->setDefaultBufferDataSpace(defaultDataSpace); return mConsumer->setDefaultBufferDataSpace(defaultDataSpace); } } status_t GLConsumer::setConsumerUsageBits(uint32_t usage) { status_t GLConsumer::setConsumerUsageBits(uint64_t usage) { Mutex::Autolock lock(mMutex); Mutex::Autolock lock(mMutex); if (mAbandoned) { if (mAbandoned) { GLC_LOGE("setConsumerUsageBits: GLConsumer is abandoned!"); GLC_LOGE("setConsumerUsageBits: GLConsumer is abandoned!"); Loading libs/gui/IGraphicBufferProducer.cpp +39 −1 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,8 @@ enum { SET_DEQUEUE_TIMEOUT, SET_DEQUEUE_TIMEOUT, GET_LAST_QUEUED_BUFFER, GET_LAST_QUEUED_BUFFER, GET_FRAME_TIMESTAMPS, GET_FRAME_TIMESTAMPS, GET_UNIQUE_ID GET_UNIQUE_ID, GET_CONSUMER_USAGE, }; }; class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer> class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer> Loading Loading @@ -504,6 +505,25 @@ public: } } return actualResult; return actualResult; } } virtual status_t getConsumerUsage(uint64_t* outUsage) const { Parcel data, reply; data.writeInterfaceToken(IGraphicBufferProducer::getInterfaceDescriptor()); status_t result = remote()->transact(GET_CONSUMER_USAGE, data, &reply); if (result != NO_ERROR) { ALOGE("getConsumerUsage failed to transact: %d", result); } status_t actualResult = NO_ERROR; result = reply.readInt32(&actualResult); if (result != NO_ERROR) { return result; } result = reply.readUint64(outUsage); if (result != NO_ERROR) { return result; } return actualResult; } }; }; // Out-of-line virtual method definition to trigger vtable emission in this // Out-of-line virtual method definition to trigger vtable emission in this Loading Loading @@ -622,6 +642,10 @@ public: status_t getUniqueId(uint64_t* outId) const override { status_t getUniqueId(uint64_t* outId) const override { return mBase->getUniqueId(outId); return mBase->getUniqueId(outId); } } status_t getConsumerUsage(uint64_t* outUsage) const override { return mBase->getConsumerUsage(outUsage); } }; }; IMPLEMENT_HYBRID_META_INTERFACE(GraphicBufferProducer, HGraphicBufferProducer, IMPLEMENT_HYBRID_META_INTERFACE(GraphicBufferProducer, HGraphicBufferProducer, Loading Loading @@ -889,6 +913,20 @@ status_t BnGraphicBufferProducer::onTransact( } } return NO_ERROR; return NO_ERROR; } } case GET_CONSUMER_USAGE: { CHECK_INTERFACE(IGraphicBufferProducer, data, reply); uint64_t outUsage = 0; status_t actualResult = getConsumerUsage(&outUsage); status_t result = reply->writeInt32(actualResult); if (result != NO_ERROR) { return result; } result = reply->writeUint64(outUsage); if (result != NO_ERROR) { return result; } return NO_ERROR; } } } return BBinder::onTransact(code, data, reply, flags); return BBinder::onTransact(code, data, reply, flags); } } Loading libs/gui/Surface.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -974,6 +974,9 @@ int Surface::perform(int operation, va_list args) case NATIVE_WINDOW_SET_USAGE64: case NATIVE_WINDOW_SET_USAGE64: res = dispatchSetUsage64(args); res = dispatchSetUsage64(args); break; break; case NATIVE_WINDOW_GET_CONSUMER_USAGE64: res = dispatchGetConsumerUsage64(args); break; default: default: res = NAME_NOT_FOUND; res = NAME_NOT_FOUND; break; break; Loading Loading @@ -1152,6 +1155,11 @@ int Surface::dispatchGetHdrSupport(va_list args) { return getHdrSupport(outSupport); return getHdrSupport(outSupport); } } int Surface::dispatchGetConsumerUsage64(va_list args) { uint64_t* usage = va_arg(args, uint64_t*); return getConsumerUsage(usage); } int Surface::connect(int api) { int Surface::connect(int api) { static sp<IProducerListener> listener = new DummyProducerListener(); static sp<IProducerListener> listener = new DummyProducerListener(); return connect(api, listener); return connect(api, listener); Loading Loading @@ -1721,6 +1729,11 @@ status_t Surface::getUniqueId(uint64_t* outId) const { return mGraphicBufferProducer->getUniqueId(outId); return mGraphicBufferProducer->getUniqueId(outId); } } int Surface::getConsumerUsage(uint64_t* outUsage) const { Mutex::Autolock lock(mMutex); return mGraphicBufferProducer->getConsumerUsage(outUsage); } nsecs_t Surface::getLastDequeueStartTime() const { nsecs_t Surface::getLastDequeueStartTime() const { Mutex::Autolock lock(mMutex); Mutex::Autolock lock(mMutex); return mLastDequeueStartTime; return mLastDequeueStartTime; Loading Loading
libs/gui/BufferItemConsumer.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,8 @@ //#define ATRACE_TAG ATRACE_TAG_GRAPHICS //#define ATRACE_TAG ATRACE_TAG_GRAPHICS #include <utils/Log.h> #include <utils/Log.h> #include <inttypes.h> #include <gui/BufferItem.h> #include <gui/BufferItem.h> #include <gui/BufferItemConsumer.h> #include <gui/BufferItemConsumer.h> Loading @@ -31,13 +33,13 @@ namespace android { namespace android { BufferItemConsumer::BufferItemConsumer( BufferItemConsumer::BufferItemConsumer( const sp<IGraphicBufferConsumer>& consumer, uint32_t consumerUsage, const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage, int bufferCount, bool controlledByApp) : int bufferCount, bool controlledByApp) : ConsumerBase(consumer, controlledByApp) ConsumerBase(consumer, controlledByApp) { { status_t err = mConsumer->setConsumerUsageBits(consumerUsage); status_t err = mConsumer->setConsumerUsageBits(consumerUsage); LOG_ALWAYS_FATAL_IF(err != OK, LOG_ALWAYS_FATAL_IF(err != OK, "Failed to set consumer usage bits to %#x", consumerUsage); "Failed to set consumer usage bits to %#" PRIx64, consumerUsage); if (bufferCount != DEFAULT_MAX_BUFFERS) { if (bufferCount != DEFAULT_MAX_BUFFERS) { err = mConsumer->setMaxAcquiredBufferCount(bufferCount); err = mConsumer->setMaxAcquiredBufferCount(bufferCount); LOG_ALWAYS_FATAL_IF(err != OK, LOG_ALWAYS_FATAL_IF(err != OK, Loading
libs/gui/BufferQueueProducer.cpp +9 −0 Original line number Original line Diff line number Diff line Loading @@ -1102,6 +1102,7 @@ int BufferQueueProducer::query(int what, int *outValue) { value = (mCore->mQueue.size() > 1); value = (mCore->mQueue.size() > 1); break; break; case NATIVE_WINDOW_CONSUMER_USAGE_BITS: case NATIVE_WINDOW_CONSUMER_USAGE_BITS: // deprecated; higher 32 bits are truncated value = static_cast<int32_t>(mCore->mConsumerUsageBits); value = static_cast<int32_t>(mCore->mConsumerUsageBits); break; break; case NATIVE_WINDOW_DEFAULT_DATASPACE: case NATIVE_WINDOW_DEFAULT_DATASPACE: Loading Loading @@ -1547,4 +1548,12 @@ status_t BufferQueueProducer::getUniqueId(uint64_t* outId) const { return NO_ERROR; return NO_ERROR; } } status_t BufferQueueProducer::getConsumerUsage(uint64_t* outUsage) const { BQ_LOGV("getConsumerUsage"); Mutex::Autolock lock(mCore->mMutex); *outUsage = mCore->mConsumerUsageBits; return NO_ERROR; } } // namespace android } // namespace android
libs/gui/GLConsumer.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1115,7 +1115,7 @@ status_t GLConsumer::setDefaultBufferDataSpace( return mConsumer->setDefaultBufferDataSpace(defaultDataSpace); return mConsumer->setDefaultBufferDataSpace(defaultDataSpace); } } status_t GLConsumer::setConsumerUsageBits(uint32_t usage) { status_t GLConsumer::setConsumerUsageBits(uint64_t usage) { Mutex::Autolock lock(mMutex); Mutex::Autolock lock(mMutex); if (mAbandoned) { if (mAbandoned) { GLC_LOGE("setConsumerUsageBits: GLConsumer is abandoned!"); GLC_LOGE("setConsumerUsageBits: GLConsumer is abandoned!"); Loading
libs/gui/IGraphicBufferProducer.cpp +39 −1 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,8 @@ enum { SET_DEQUEUE_TIMEOUT, SET_DEQUEUE_TIMEOUT, GET_LAST_QUEUED_BUFFER, GET_LAST_QUEUED_BUFFER, GET_FRAME_TIMESTAMPS, GET_FRAME_TIMESTAMPS, GET_UNIQUE_ID GET_UNIQUE_ID, GET_CONSUMER_USAGE, }; }; class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer> class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer> Loading Loading @@ -504,6 +505,25 @@ public: } } return actualResult; return actualResult; } } virtual status_t getConsumerUsage(uint64_t* outUsage) const { Parcel data, reply; data.writeInterfaceToken(IGraphicBufferProducer::getInterfaceDescriptor()); status_t result = remote()->transact(GET_CONSUMER_USAGE, data, &reply); if (result != NO_ERROR) { ALOGE("getConsumerUsage failed to transact: %d", result); } status_t actualResult = NO_ERROR; result = reply.readInt32(&actualResult); if (result != NO_ERROR) { return result; } result = reply.readUint64(outUsage); if (result != NO_ERROR) { return result; } return actualResult; } }; }; // Out-of-line virtual method definition to trigger vtable emission in this // Out-of-line virtual method definition to trigger vtable emission in this Loading Loading @@ -622,6 +642,10 @@ public: status_t getUniqueId(uint64_t* outId) const override { status_t getUniqueId(uint64_t* outId) const override { return mBase->getUniqueId(outId); return mBase->getUniqueId(outId); } } status_t getConsumerUsage(uint64_t* outUsage) const override { return mBase->getConsumerUsage(outUsage); } }; }; IMPLEMENT_HYBRID_META_INTERFACE(GraphicBufferProducer, HGraphicBufferProducer, IMPLEMENT_HYBRID_META_INTERFACE(GraphicBufferProducer, HGraphicBufferProducer, Loading Loading @@ -889,6 +913,20 @@ status_t BnGraphicBufferProducer::onTransact( } } return NO_ERROR; return NO_ERROR; } } case GET_CONSUMER_USAGE: { CHECK_INTERFACE(IGraphicBufferProducer, data, reply); uint64_t outUsage = 0; status_t actualResult = getConsumerUsage(&outUsage); status_t result = reply->writeInt32(actualResult); if (result != NO_ERROR) { return result; } result = reply->writeUint64(outUsage); if (result != NO_ERROR) { return result; } return NO_ERROR; } } } return BBinder::onTransact(code, data, reply, flags); return BBinder::onTransact(code, data, reply, flags); } } Loading
libs/gui/Surface.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -974,6 +974,9 @@ int Surface::perform(int operation, va_list args) case NATIVE_WINDOW_SET_USAGE64: case NATIVE_WINDOW_SET_USAGE64: res = dispatchSetUsage64(args); res = dispatchSetUsage64(args); break; break; case NATIVE_WINDOW_GET_CONSUMER_USAGE64: res = dispatchGetConsumerUsage64(args); break; default: default: res = NAME_NOT_FOUND; res = NAME_NOT_FOUND; break; break; Loading Loading @@ -1152,6 +1155,11 @@ int Surface::dispatchGetHdrSupport(va_list args) { return getHdrSupport(outSupport); return getHdrSupport(outSupport); } } int Surface::dispatchGetConsumerUsage64(va_list args) { uint64_t* usage = va_arg(args, uint64_t*); return getConsumerUsage(usage); } int Surface::connect(int api) { int Surface::connect(int api) { static sp<IProducerListener> listener = new DummyProducerListener(); static sp<IProducerListener> listener = new DummyProducerListener(); return connect(api, listener); return connect(api, listener); Loading Loading @@ -1721,6 +1729,11 @@ status_t Surface::getUniqueId(uint64_t* outId) const { return mGraphicBufferProducer->getUniqueId(outId); return mGraphicBufferProducer->getUniqueId(outId); } } int Surface::getConsumerUsage(uint64_t* outUsage) const { Mutex::Autolock lock(mMutex); return mGraphicBufferProducer->getConsumerUsage(outUsage); } nsecs_t Surface::getLastDequeueStartTime() const { nsecs_t Surface::getLastDequeueStartTime() const { Mutex::Autolock lock(mMutex); Mutex::Autolock lock(mMutex); return mLastDequeueStartTime; return mLastDequeueStartTime; Loading