summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAravind Akella <aakella@google.com>2013-10-15 15:43:10 -0700
committerAravind Akella <aakella@google.com>2013-10-25 13:58:58 -0700
commitb4099e77ec2bf8e9d4259ff30f0cb1d621deed91 (patch)
tree500daf25d053a329e6f2a995aae77270f5f2cea3
parent8507586903fa803abf535853a169913f2cf2e555 (diff)
downloadnative-b4099e77ec2bf8e9d4259ff30f0cb1d621deed91.tar.gz
Bug fixes for SensorService
i) Emulate Flush for AOSP Fusion Sesnsors on newer HALs that support batching. ii) Early return if there are no events for the current SensorEventConnection. Bug: 11325707, 11376538 Change-Id: Idb856302463649a99d3d5d0c965bb06ba06b8e1d
-rw-r--r--services/sensorservice/SensorService.cpp12
-rw-r--r--services/sensorservice/SensorService.h1
2 files changed, 12 insertions, 1 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 555d843549..a2f4332793 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -480,6 +480,11 @@ String8 SensorService::getSensorName(int handle) const {
return result;
}
+bool SensorService::isVirtualSensor(int handle) const {
+ SensorInterface* sensor = mSensorMap.valueFor(handle);
+ return sensor->isVirtual();
+}
+
Vector<Sensor> SensorService::getSensorList()
{
char value[PROPERTY_VALUE_MAX];
@@ -858,6 +863,11 @@ status_t SensorService::SensorEventConnection::sendEvents(
}
}
+ // Early return if there are no events for this connection.
+ if (count == 0) {
+ return status_t(NO_ERROR);
+ }
+
// NOTE: ASensorEvent and sensors_event_t are the same type
ssize_t size = SensorEventQueue::write(mChannel,
reinterpret_cast<ASensorEvent const*>(scratch), count);
@@ -922,7 +932,7 @@ status_t SensorService::SensorEventConnection::flush() {
// Loop through all sensors for this connection and call flush on each of them.
for (size_t i = 0; i < mSensorInfo.size(); ++i) {
const int handle = mSensorInfo.keyAt(i);
- if (halVersion < SENSORS_DEVICE_API_VERSION_1_1) {
+ if (halVersion < SENSORS_DEVICE_API_VERSION_1_1 || mService->isVirtualSensor(handle)) {
// For older devices just increment pending flush count which will send a trivial
// flush complete event.
FlushInfo& flushInfo = mSensorInfo.editValueFor(handle);
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index 6c1691a030..c9683197f5 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -130,6 +130,7 @@ class SensorService :
DefaultKeyedVector<int, SensorInterface*> getActiveVirtualSensors() const;
String8 getSensorName(int handle) const;
+ bool isVirtualSensor(int handle) const;
void recordLastValue(sensors_event_t const * buffer, size_t count);
static void sortEventBuffer(sensors_event_t* buffer, size_t count);
Sensor registerSensor(SensorInterface* sensor);