diff options
author | Mathias Agopian <mathias@google.com> | 2010-11-11 14:44:08 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-11-11 14:44:08 -0800 |
commit | fcab475c906da5c159bc56a32c2610f6f55eafd9 (patch) | |
tree | 8cbc2e1b6bc685bbf17282bc7118c62b153ba8ee | |
parent | dfb122180c7028764136ac3a4fa07104f601de84 (diff) | |
parent | 3a9223ebf881b10996dac34b00e51e08a602d44b (diff) | |
download | base-fcab475c906da5c159bc56a32c2610f6f55eafd9.tar.gz |
Merge "record the last event received regardless of having clients or not" into gingerbread
-rw-r--r-- | services/sensorservice/SensorService.cpp | 34 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 2 |
2 files changed, 22 insertions, 14 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index c9ab9922482e..b5e73ac5e78f 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -218,25 +218,13 @@ bool SensorService::threadLoop() break; } + recordLastValue(buffer, count); + const SortedVector< wp<SensorEventConnection> > activeConnections( getActiveConnections()); size_t numConnections = activeConnections.size(); if (numConnections) { - Mutex::Autolock _l(mLock); - - // record the last event for each sensor - int32_t prev = buffer[0].sensor; - for (ssize_t i=1 ; i<count ; i++) { - // record the last event of each sensor type in this buffer - int32_t curr = buffer[i].sensor; - if (curr != prev) { - mLastEventSeen.editValueFor(prev) = buffer[i-1]; - prev = curr; - } - } - mLastEventSeen.editValueFor(prev) = buffer[count-1]; - for (size_t i=0 ; i<numConnections ; i++) { sp<SensorEventConnection> connection(activeConnections[i].promote()); if (connection != 0) { @@ -251,6 +239,24 @@ bool SensorService::threadLoop() return false; } +void SensorService::recordLastValue( + sensors_event_t const * buffer, size_t count) +{ + Mutex::Autolock _l(mLock); + + // record the last event for each sensor + int32_t prev = buffer[0].sensor; + for (size_t i=1 ; i<count ; i++) { + // record the last event of each sensor type in this buffer + int32_t curr = buffer[i].sensor; + if (curr != prev) { + mLastEventSeen.editValueFor(prev) = buffer[i-1]; + prev = curr; + } + } + mLastEventSeen.editValueFor(prev) = buffer[count-1]; +} + SortedVector< wp<SensorService::SensorEventConnection> > SensorService::getActiveConnections() const { diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index dfb1c0e15c63..b442779d5ac0 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -111,6 +111,8 @@ class SensorService : String8 getSensorName(int handle) const; status_t recomputeEventsPeriodLocked(int32_t handle); + void recordLastValue(sensors_event_t const * buffer, size_t count); + // constants Vector<Sensor> mSensorList; struct sensors_poll_device_t* mSensorDevice; |