Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 792b847e authored by Mathias Agopian's avatar Mathias Agopian Committed by Android Git Automerger
Browse files

am fcab475c: Merge "record the last event received regardless of having...

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

* commit 'fcab475c':
  record the last event received regardless of having clients or not
parents 93896ad8 fcab475c
Loading
Loading
Loading
Loading
+20 −14
Original line number Diff line number Diff line
@@ -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
{
+2 −0
Original line number Diff line number Diff line
@@ -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;