Merge "record the last event received regardless of having clients or not" into gingerbread
This commit is contained in:
committed by
Android (Google) Code Review
commit
fcab475c90
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user