diff options
author | Aravind Akella <aakella@google.com> | 2013-10-15 15:43:10 -0700 |
---|---|---|
committer | Aravind Akella <aakella@google.com> | 2013-10-25 13:58:58 -0700 |
commit | b4099e77ec2bf8e9d4259ff30f0cb1d621deed91 (patch) | |
tree | 500daf25d053a329e6f2a995aae77270f5f2cea3 | |
parent | 8507586903fa803abf535853a169913f2cf2e555 (diff) | |
download | frameworks_native-b4099e77ec2bf8e9d4259ff30f0cb1d621deed91.zip frameworks_native-b4099e77ec2bf8e9d4259ff30f0cb1d621deed91.tar.gz frameworks_native-b4099e77ec2bf8e9d4259ff30f0cb1d621deed91.tar.bz2 |
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.cpp | 12 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 555d843..a2f4332 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 6c1691a..c968319 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); |