From 6ec7182aaba13d3ee7070acab47be74aad461e40 Mon Sep 17 00:00:00 2001 From: Won Hyoung Lee Date: Tue, 18 Oct 2011 16:35:50 -0700 Subject: SensorHAL: solve the issue that sensors get slow Solving the bug where residual events in input queue from one sensor that was disabled causes events from other sensors to not be returned until num events = count. The bug has the symptom that events from all sensors seem to be delayed. The bug was in readEvents() in SamsungSensorBase.cpp. Solution is to discard the residual events if sensor has been disabled already. Change-Id: I8c9e1ff741c8f2864d6bc7513c1163c41a178852 Signed-off-by: Won Hyoung Lee --- libsensors/SamsungSensorBase.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'libsensors') diff --git a/libsensors/SamsungSensorBase.cpp b/libsensors/SamsungSensorBase.cpp index ab8f9d6..0ec4915 100644 --- a/libsensors/SamsungSensorBase.cpp +++ b/libsensors/SamsungSensorBase.cpp @@ -146,14 +146,13 @@ int SamsungSensorBase::readEvents(sensors_event_t* data, int count) pthread_mutex_lock(&mLock); int numEventReceived = 0; - if (!mEnabled) - goto done; - if (mHasPendingEvent) { mHasPendingEvent = false; - mPendingEvent.timestamp = getTimestamp(); - *data = mPendingEvent; - numEventReceived++; + if (mEnabled) { + mPendingEvent.timestamp = getTimestamp(); + *data = mPendingEvent; + numEventReceived++; + } goto done; } @@ -161,7 +160,7 @@ int SamsungSensorBase::readEvents(sensors_event_t* data, int count) while (count && mInputReader.readEvent(data_fd, &event)) { if (event->type == EV_ABS) { if (event->code == mSensorCode) { - if (handleEvent(event)) { + if (mEnabled && handleEvent(event)) { mPendingEvent.timestamp = timevalToNano(event->time); *data++ = mPendingEvent; count--; -- cgit v1.1