use a socketpair instead of a pipe in BitTube
Bug: 6252830
Change-Id: Ia7a7b08409517214136261c05569dc5959a597ab
diff --git a/include/gui/BitTube.h b/include/gui/BitTube.h
index 76389a0..3022d05 100644
--- a/include/gui/BitTube.h
+++ b/include/gui/BitTube.h
@@ -22,6 +22,7 @@
#include <utils/Errors.h>
#include <utils/RefBase.h>
+#include <cutils/log.h>
namespace android {
@@ -43,9 +44,27 @@
status_t writeToParcel(Parcel* reply) const;
+ template <typename T>
+ static ssize_t sendObjects(const sp<BitTube>& tube,
+ T const* events, size_t count) {
+ return sendObjects(tube, events, count, sizeof(T));
+ }
+
+ template <typename T>
+ static ssize_t recvObjects(const sp<BitTube>& tube,
+ T* events, size_t count) {
+ return recvObjects(tube, events, count, sizeof(T));
+ }
+
private:
int mSendFd;
mutable int mReceiveFd;
+
+ static ssize_t sendObjects(const sp<BitTube>& tube,
+ void const* events, size_t count, size_t objSize);
+
+ static ssize_t recvObjects(const sp<BitTube>& tube,
+ void* events, size_t count, size_t objSize);
};
// ----------------------------------------------------------------------------
diff --git a/include/gui/DisplayEventReceiver.h b/include/gui/DisplayEventReceiver.h
index 7bca8d6..e631cca 100644
--- a/include/gui/DisplayEventReceiver.h
+++ b/include/gui/DisplayEventReceiver.h
@@ -89,7 +89,7 @@
int getFd() const;
/*
- * getEvents reads event from the queue and returns how many events were
+ * getEvents reads events from the queue and returns how many events were
* read. Returns 0 if there are no more events or a negative error code.
* If NOT_ENOUGH_DATA is returned, the object has become invalid forever, it
* should be destroyed and getEvents() shouldn't be called again.
@@ -99,6 +99,13 @@
Event* events, size_t count);
/*
+ * sendEvents write events to the queue and returns how many events were
+ * written.
+ */
+ static ssize_t sendEvents(const sp<BitTube>& dataChannel,
+ Event const* events, size_t count);
+
+ /*
* setVsyncRate() sets the Event::VSync delivery rate. A value of
* 1 returns every Event::VSync. A value of 2 returns every other event,
* etc... a value of 0 returns no event unless requestNextVsync() has
diff --git a/include/gui/SensorEventQueue.h b/include/gui/SensorEventQueue.h
index ef7c6e3..759b5cb 100644
--- a/include/gui/SensorEventQueue.h
+++ b/include/gui/SensorEventQueue.h
@@ -54,7 +54,10 @@
virtual void onFirstRef();
int getFd() const;
- ssize_t write(ASensorEvent const* events, size_t numEvents);
+
+ static ssize_t write(const sp<BitTube>& tube,
+ ASensorEvent const* events, size_t numEvents);
+
ssize_t read(ASensorEvent* events, size_t numEvents);
status_t waitForEvent() const;