X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=libs%2Fgui%2FIConsumerListener.cpp;h=85ac304ab8dc5440b3beaeb617f92ad33f94e0c2;hb=refs%2Fheads%2Foreo-x86;hp=4ccf0ac827c97c26e2b46422e94927897c48cd84;hpb=bec844f6d4661325b3f925073876b381882d3e73;p=android-x86%2Fframeworks-native.git diff --git a/libs/gui/IConsumerListener.cpp b/libs/gui/IConsumerListener.cpp index 4ccf0ac827..85ac304ab8 100644 --- a/libs/gui/IConsumerListener.cpp +++ b/libs/gui/IConsumerListener.cpp @@ -14,75 +14,86 @@ * limitations under the License. */ -#include -#include - -#include -#include - #include -// --------------------------------------------------------------------------- +#include + namespace android { -// --------------------------------------------------------------------------- -enum { - ON_FRAME_AVAILABLE = IBinder::FIRST_CALL_TRANSACTION, - ON_BUFFER_RELEASED, +namespace { // Anonymous + +enum class Tag : uint32_t { + ON_DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, + ON_FRAME_AVAILABLE, + ON_FRAME_REPLACED, + ON_BUFFERS_RELEASED, ON_SIDEBAND_STREAM_CHANGED, + LAST = ON_SIDEBAND_STREAM_CHANGED, }; -class BpConsumerListener : public BpInterface -{ +} // Anonymous namespace + +class BpConsumerListener : public SafeBpInterface { public: - BpConsumerListener(const sp& impl) - : BpInterface(impl) { + explicit BpConsumerListener(const sp& impl) + : SafeBpInterface(impl, "BpConsumerListener") {} + + ~BpConsumerListener() override; + + void onDisconnect() override { + callRemoteAsync(Tag::ON_DISCONNECT); } - virtual void onFrameAvailable() { - Parcel data, reply; - data.writeInterfaceToken(IConsumerListener::getInterfaceDescriptor()); - remote()->transact(ON_FRAME_AVAILABLE, data, &reply, IBinder::FLAG_ONEWAY); + void onFrameAvailable(const BufferItem& item) override { + callRemoteAsync(Tag::ON_FRAME_AVAILABLE, + item); } - virtual void onBuffersReleased() { - Parcel data, reply; - data.writeInterfaceToken(IConsumerListener::getInterfaceDescriptor()); - remote()->transact(ON_BUFFER_RELEASED, data, &reply, IBinder::FLAG_ONEWAY); + void onFrameReplaced(const BufferItem& item) override { + callRemoteAsync(Tag::ON_FRAME_REPLACED, + item); } - virtual void onSidebandStreamChanged() { - Parcel data, reply; - data.writeInterfaceToken(IConsumerListener::getInterfaceDescriptor()); - remote()->transact(ON_SIDEBAND_STREAM_CHANGED, data, &reply, IBinder::FLAG_ONEWAY); + void onBuffersReleased() override { + callRemoteAsync(Tag::ON_BUFFERS_RELEASED); + } + + void onSidebandStreamChanged() override { + callRemoteAsync( + Tag::ON_SIDEBAND_STREAM_CHANGED); + } + + void addAndGetFrameTimestamps(const NewFrameEventsEntry* /*newTimestamps*/, + FrameEventHistoryDelta* /*outDelta*/) override { + LOG_ALWAYS_FATAL("IConsumerListener::addAndGetFrameTimestamps cannot be proxied"); } }; +// Out-of-line virtual method definitions to trigger vtable emission in this translation unit (see +// clang warning -Wweak-vtables) +BpConsumerListener::~BpConsumerListener() = default; +ConsumerListener::~ConsumerListener() = default; + IMPLEMENT_META_INTERFACE(ConsumerListener, "android.gui.IConsumerListener"); -// ---------------------------------------------------------------------- - -status_t BnConsumerListener::onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) -{ - switch(code) { - case ON_FRAME_AVAILABLE: - CHECK_INTERFACE(IConsumerListener, data, reply); - onFrameAvailable(); - return NO_ERROR; - case ON_BUFFER_RELEASED: - CHECK_INTERFACE(IConsumerListener, data, reply); - onBuffersReleased(); - return NO_ERROR; - case ON_SIDEBAND_STREAM_CHANGED: - CHECK_INTERFACE(IConsumerListener, data, reply); - onSidebandStreamChanged(); - return NO_ERROR; +status_t BnConsumerListener::onTransact(uint32_t code, const Parcel& data, Parcel* reply, + uint32_t flags) { + if (code < IBinder::FIRST_CALL_TRANSACTION || code > static_cast(Tag::LAST)) { + return BBinder::onTransact(code, data, reply, flags); + } + auto tag = static_cast(code); + switch (tag) { + case Tag::ON_DISCONNECT: + return callLocalAsync(data, reply, &IConsumerListener::onDisconnect); + case Tag::ON_FRAME_AVAILABLE: + return callLocalAsync(data, reply, &IConsumerListener::onFrameAvailable); + case Tag::ON_FRAME_REPLACED: + return callLocalAsync(data, reply, &IConsumerListener::onFrameReplaced); + case Tag::ON_BUFFERS_RELEASED: + return callLocalAsync(data, reply, &IConsumerListener::onBuffersReleased); + case Tag::ON_SIDEBAND_STREAM_CHANGED: + return callLocalAsync(data, reply, &IConsumerListener::onSidebandStreamChanged); } - return BBinder::onTransact(code, data, reply, flags); } - -// --------------------------------------------------------------------------- -}; // namespace android -// --------------------------------------------------------------------------- +} // namespace android