libgui: Hook up onFrameReplaced
This completes the plumbing from ConsumerListener::onFrameReplaced into
SurfaceFlinger (and other consumers that may care).
Change-Id: I376e78ace95d6748e8662e6b4d47c0dfa697a300
(cherry picked from commit dc13c5b85b
)
This commit is contained in:
parent
364ed95453
commit
a3b6693272
@ -62,9 +62,10 @@ public:
|
||||
public:
|
||||
ProxyConsumerListener(const wp<ConsumerListener>& consumerListener);
|
||||
virtual ~ProxyConsumerListener();
|
||||
virtual void onFrameAvailable(const BufferItem& item);
|
||||
virtual void onBuffersReleased();
|
||||
virtual void onSidebandStreamChanged();
|
||||
virtual void onFrameAvailable(const BufferItem& item) override;
|
||||
virtual void onFrameReplaced(const BufferItem& item) override;
|
||||
virtual void onBuffersReleased() override;
|
||||
virtual void onSidebandStreamChanged() override;
|
||||
private:
|
||||
// mConsumerListener is a weak reference to the IConsumerListener. This is
|
||||
// the raison d'etre of ProxyConsumerListener.
|
||||
|
@ -38,15 +38,9 @@ class ConsumerBase : public virtual RefBase,
|
||||
protected ConsumerListener {
|
||||
public:
|
||||
struct FrameAvailableListener : public virtual RefBase {
|
||||
// onFrameAvailable() is called each time an additional frame becomes
|
||||
// available for consumption. This means that frames that are queued
|
||||
// while in asynchronous mode only trigger the callback if no previous
|
||||
// frames are pending. Frames queued while in synchronous mode always
|
||||
// trigger the callback.
|
||||
//
|
||||
// This is called without any lock held and can be called concurrently
|
||||
// by multiple threads.
|
||||
// See IConsumerListener::onFrame{Available,Replaced}
|
||||
virtual void onFrameAvailable(const BufferItem& item) = 0;
|
||||
virtual void onFrameReplaced(const BufferItem& /* item */) {}
|
||||
};
|
||||
|
||||
virtual ~ConsumerBase();
|
||||
@ -104,14 +98,16 @@ protected:
|
||||
|
||||
// Implementation of the IConsumerListener interface. These
|
||||
// calls are used to notify the ConsumerBase of asynchronous events in the
|
||||
// BufferQueue. The onFrameAvailable 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);
|
||||
virtual void onBuffersReleased();
|
||||
virtual void onSidebandStreamChanged();
|
||||
// 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
|
||||
|
@ -39,6 +39,14 @@ void BufferQueue::ProxyConsumerListener::onFrameAvailable(
|
||||
}
|
||||
}
|
||||
|
||||
void BufferQueue::ProxyConsumerListener::onFrameReplaced(
|
||||
const BufferItem& item) {
|
||||
sp<ConsumerListener> listener(mConsumerListener.promote());
|
||||
if (listener != NULL) {
|
||||
listener->onFrameReplaced(item);
|
||||
}
|
||||
}
|
||||
|
||||
void BufferQueue::ProxyConsumerListener::onBuffersReleased() {
|
||||
sp<ConsumerListener> listener(mConsumerListener.promote());
|
||||
if (listener != NULL) {
|
||||
|
@ -114,6 +114,21 @@ void ConsumerBase::onFrameAvailable(const BufferItem& item) {
|
||||
}
|
||||
}
|
||||
|
||||
void ConsumerBase::onFrameReplaced(const BufferItem &item) {
|
||||
CB_LOGV("onFrameReplaced");
|
||||
|
||||
sp<FrameAvailableListener> listener;
|
||||
{
|
||||
Mutex::Autolock lock(mMutex);
|
||||
listener = mFrameAvailableListener.promote();
|
||||
}
|
||||
|
||||
if (listener != NULL) {
|
||||
CB_LOGV("actually calling onFrameReplaced");
|
||||
listener->onFrameReplaced(item);
|
||||
}
|
||||
}
|
||||
|
||||
void ConsumerBase::onBuffersReleased() {
|
||||
Mutex::Autolock lock(mMutex);
|
||||
|
||||
|
@ -339,9 +339,9 @@ protected:
|
||||
|
||||
private:
|
||||
// Interface implementation for SurfaceFlingerConsumer::ContentsChangedListener
|
||||
virtual void onFrameAvailable(const BufferItem& item);
|
||||
virtual void onFrameReplaced(const BufferItem& item);
|
||||
virtual void onSidebandStreamChanged();
|
||||
virtual void onFrameAvailable(const BufferItem& item) override;
|
||||
virtual void onFrameReplaced(const BufferItem& item) override;
|
||||
virtual void onSidebandStreamChanged() override;
|
||||
|
||||
void commitTransaction();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user