From 94e8f6813f3fb2beaa9bcbfb1ad9b4ae2eb46949 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Wed, 10 Nov 2010 17:50:28 -0800 Subject: record the last event received regardless of having clients or not We only recorded the last received event (which is needed when a sensor is activated on a connection) when there was some connection active. This should fix an issue where sometimes the light sensor doesn't return an event whent activated. we also didn't need to hold the main lock while dispatching events to clients. Change-Id: I6c6386c040051ce205e3c0516c678e0603fa45e1 --- services/sensorservice/SensorService.cpp | 34 +++++++++++++++++++------------- services/sensorservice/SensorService.h | 2 ++ 2 files changed, 22 insertions(+), 14 deletions(-) (limited to 'services') diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index c9ab992..b5e73ac 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 > 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 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 > SensorService::getActiveConnections() const { diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index dfb1c0e..b442779 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 mSensorList; struct sensors_poll_device_t* mSensorDevice; -- cgit v1.1