Revert "Add a callback thread to ConsumerBase"
This reverts commit 22b5702b40eca423171124e69c3d4ad03a3e6900.
Bug 27557176
Change-Id: Icc0e79af82329e6414ed44a99e90631cfcf140fa
diff --git a/include/gui/ConsumerBase.h b/include/gui/ConsumerBase.h
index 1b63552..9307a26 100644
--- a/include/gui/ConsumerBase.h
+++ b/include/gui/ConsumerBase.h
@@ -26,8 +26,6 @@
#include <utils/threads.h>
#include <gui/IConsumerListener.h>
-#include <queue>
-
namespace android {
// ----------------------------------------------------------------------------
@@ -110,18 +108,18 @@
// from the derived class.
virtual void onLastStrongRef(const void* id);
- // Handlers for the IConsumerListener interface, these will be called from
- // the message queue thread. These calls are used to notify the ConsumerBase
- // of asynchronous events in the BufferQueue. The onFrameAvailableHandler,
- // onFrameReplacedHandler, and onBuffersReleasedHandler methods should not
- // need to be overridden by derived classes, but if they are overridden the
- // ConsumerBase implementation must be called from the derived class. The
- // ConsumerBase version of onSidebandStreamChangedHandler does nothing and
- // can be overriden by derived classes if they want the notification.
- virtual void onFrameAvailableHandler(const BufferItem& item);
- virtual void onFrameReplacedHandler(const BufferItem& item);
- virtual void onBuffersReleasedHandler();
- virtual void onSidebandStreamChangedHandler();
+ // Implementation of the IConsumerListener interface. These
+ // calls are used to notify the ConsumerBase of asynchronous events in the
+ // BufferQueue. The onFrameAvailable, onFrameReplaced, and
+ // onBuffersReleased methods should not need to be overridden by derived
+ // classes, but if they are overridden the ConsumerBase implementation must
+ // be called from the derived class. The ConsumerBase version of
+ // onSidebandStreamChanged does nothing and can be overriden by derived
+ // classes if they want the notification.
+ virtual void onFrameAvailable(const BufferItem& item) override;
+ virtual void onFrameReplaced(const BufferItem& item) override;
+ virtual void onBuffersReleased() override;
+ virtual void onSidebandStreamChanged() override;
// freeBufferLocked frees up the given buffer slot. If the slot has been
// initialized this will release the reference to the GraphicBuffer in that
@@ -246,35 +244,6 @@
//
// This mutex is intended to be locked by derived classes.
mutable Mutex mMutex;
-
- // Implements the ConsumerListener interface
- virtual void onFrameAvailable(const BufferItem& item) override;
- virtual void onFrameReplaced(const BufferItem& item) override;
- virtual void onBuffersReleased() override;
- virtual void onSidebandStreamChanged() override;
-
- enum MessageType {
- ON_FRAME_AVAILABLE,
- ON_FRAME_REPLACED,
- ON_BUFFERS_RELEASED,
- ON_SIDEBAND_STREAM_CHANGED,
- EXIT,
- };
-
- mutable Mutex mMessageQueueLock;
- Condition mMessageAvailable;
- std::queue<std::pair<MessageType, BufferItem>> mMessageQueue;
-
- class MessageThread : public Thread {
- public:
- MessageThread(ConsumerBase* consumerBase) :
- mConsumerBase(consumerBase) {};
- protected:
- virtual bool threadLoop() override;
- ConsumerBase* mConsumerBase;
- };
-
- sp<MessageThread> mMessageThread;
};
// ----------------------------------------------------------------------------
diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp
index 8e26ac8..2187e5e 100644
--- a/libs/gui/ConsumerBase.cpp
+++ b/libs/gui/ConsumerBase.cpp
@@ -74,26 +74,12 @@
} else {
mConsumer->setConsumerName(mName);
}
-
- mMessageThread = new MessageThread(this);
- mMessageThread->run(mName);
}
ConsumerBase::~ConsumerBase() {
CB_LOGV("~ConsumerBase");
-
- mMessageThread->requestExit();
- {
- Mutex::Autolock lock(mMessageQueueLock);
- mMessageQueue.emplace(std::piecewise_construct,
- std::forward_as_tuple(EXIT),
- std::forward_as_tuple());
- mMessageAvailable.signal();
- }
-
- mMessageThread->join();
-
Mutex::Autolock lock(mMutex);
+
// Verify that abandon() has been called before we get here. This should
// be done by ConsumerBase::onLastStrongRef(), but it's possible for a
// derived class to override that method and not call
@@ -114,13 +100,6 @@
}
void ConsumerBase::onFrameAvailable(const BufferItem& item) {
- Mutex::Autolock lock(mMessageQueueLock);
- mMessageQueue.emplace(std::piecewise_construct,
- std::forward_as_tuple(ON_FRAME_AVAILABLE),
- std::forward_as_tuple(item));
- mMessageAvailable.signal();
-}
-void ConsumerBase::onFrameAvailableHandler(const BufferItem& item) {
CB_LOGV("onFrameAvailable");
sp<FrameAvailableListener> listener;
@@ -136,14 +115,6 @@
}
void ConsumerBase::onFrameReplaced(const BufferItem &item) {
- Mutex::Autolock lock(mMessageQueueLock);
- mMessageQueue.emplace(std::piecewise_construct,
- std::forward_as_tuple(ON_FRAME_REPLACED),
- std::forward_as_tuple(item));
- mMessageAvailable.signal();
-}
-
-void ConsumerBase::onFrameReplacedHandler(const BufferItem &item) {
CB_LOGV("onFrameReplaced");
sp<FrameAvailableListener> listener;
@@ -159,14 +130,6 @@
}
void ConsumerBase::onBuffersReleased() {
- Mutex::Autolock lock(mMessageQueueLock);
- mMessageQueue.emplace(std::piecewise_construct,
- std::forward_as_tuple(ON_BUFFERS_RELEASED),
- std::forward_as_tuple());
- mMessageAvailable.signal();
-}
-
-void ConsumerBase::onBuffersReleasedHandler() {
Mutex::Autolock lock(mMutex);
CB_LOGV("onBuffersReleased");
@@ -186,45 +149,6 @@
}
void ConsumerBase::onSidebandStreamChanged() {
- Mutex::Autolock lock(mMessageQueueLock);
- mMessageQueue.emplace(std::piecewise_construct,
- std::forward_as_tuple(ON_SIDEBAND_STREAM_CHANGED),
- std::forward_as_tuple());
- mMessageAvailable.signal();
-}
-
-void ConsumerBase::onSidebandStreamChangedHandler() {
-}
-
-bool ConsumerBase::MessageThread::threadLoop() {
- Mutex::Autolock lock(mConsumerBase->mMessageQueueLock);
-
- if (mConsumerBase->mMessageQueue.empty()) {
- mConsumerBase->mMessageAvailable.wait(mConsumerBase->mMessageQueueLock);
- }
-
- while (!mConsumerBase->mMessageQueue.empty()) {
- auto nextMessage = mConsumerBase->mMessageQueue.front();
-
- switch (nextMessage.first) {
- case ON_FRAME_AVAILABLE:
- mConsumerBase->onFrameAvailableHandler(nextMessage.second);
- break;
- case ON_FRAME_REPLACED:
- mConsumerBase->onFrameReplacedHandler(nextMessage.second);
- break;
- case ON_BUFFERS_RELEASED:
- mConsumerBase->onBuffersReleasedHandler();
- break;
- case ON_SIDEBAND_STREAM_CHANGED:
- mConsumerBase->onSidebandStreamChangedHandler();
- break;
- case EXIT:
- break;
- }
- mConsumerBase->mMessageQueue.pop();
- }
- return true;
}
void ConsumerBase::abandon() {
diff --git a/libs/gui/tests/SurfaceTextureGLToGL_test.cpp b/libs/gui/tests/SurfaceTextureGLToGL_test.cpp
index b8a7a90..c28b4d1 100644
--- a/libs/gui/tests/SurfaceTextureGLToGL_test.cpp
+++ b/libs/gui/tests/SurfaceTextureGLToGL_test.cpp
@@ -192,10 +192,6 @@
ASSERT_EQ(EGL_SUCCESS, eglGetError());
mProducerEglSurface = EGL_NO_SURFACE;
- // sleep for 10ms to allow any asynchronous operations to complete before
- // checking the reference counts
- usleep(10000);
-
// This test should have the only reference to buffer 0.
EXPECT_EQ(1, buffers[0]->getStrongCount());