Merge "record the last event received regardless of having clients or not" into gingerbread

This commit is contained in:
Mathias Agopian
2010-11-11 14:44:08 -08:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 14 deletions

View File

@ -218,25 +218,13 @@ bool SensorService::threadLoop()
break; break;
} }
recordLastValue(buffer, count);
const SortedVector< wp<SensorEventConnection> > activeConnections( const SortedVector< wp<SensorEventConnection> > activeConnections(
getActiveConnections()); getActiveConnections());
size_t numConnections = activeConnections.size(); size_t numConnections = activeConnections.size();
if (numConnections) { 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++) { for (size_t i=0 ; i<numConnections ; i++) {
sp<SensorEventConnection> connection(activeConnections[i].promote()); sp<SensorEventConnection> connection(activeConnections[i].promote());
if (connection != 0) { if (connection != 0) {
@ -251,6 +239,24 @@ bool SensorService::threadLoop()
return false; 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> > SortedVector< wp<SensorService::SensorEventConnection> >
SensorService::getActiveConnections() const SensorService::getActiveConnections() const
{ {

View File

@ -111,6 +111,8 @@ class SensorService :
String8 getSensorName(int handle) const; String8 getSensorName(int handle) const;
status_t recomputeEventsPeriodLocked(int32_t handle); status_t recomputeEventsPeriodLocked(int32_t handle);
void recordLastValue(sensors_event_t const * buffer, size_t count);
// constants // constants
Vector<Sensor> mSensorList; Vector<Sensor> mSensorList;
struct sensors_poll_device_t* mSensorDevice; struct sensors_poll_device_t* mSensorDevice;