Refactor sensor list in SensorService
Refactor sensor lists management logic in sensorservice:
* Factor all sensor list management code into a separate class.
* Remove error-prone repeated sensor lists.
* Solve synchronization issue when sensor is added or removed during runtime.
* Switch to STL containers.
Bug: b/27911774
Change-Id: I94d5571e1fa3166dbe893ffac2a2a7584be6349c
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index da97286..e535339 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -37,6 +37,7 @@
#include <gui/ISensorEventConnection.h>
#include "SensorInterface.h"
+#include "SensorList.h"
#if __clang__
// Clang warns about SensorEventConnection::dump hiding BBinder::dump. The cause isn't fixable
@@ -156,18 +157,18 @@
virtual int isDataInjectionEnabled();
virtual status_t dump(int fd, const Vector<String16>& args);
-
static int getNumEventsForSensorType(int sensor_event_type);
String8 getSensorName(int handle) const;
bool isVirtualSensor(int handle) const;
SensorInterface* getSensorInterfaceFromHandle(int handle) const;
- Sensor getSensorFromHandle(int handle) const;
+ const Sensor& getSensorFromHandle(int handle) const;
bool isWakeUpSensor(int type) const;
void recordLastValueLocked(sensors_event_t const* buffer, size_t count);
static void sortEventBuffer(sensors_event_t* buffer, size_t count);
- Sensor registerSensor(SensorInterface* sensor);
- Sensor registerVirtualSensor(SensorInterface* sensor);
- Sensor registerDynamicSensor(SensorInterface* sensor);
+ const Sensor& registerSensor(SensorInterface* sensor,
+ bool isDebug = false, bool isVirtual = false);
+ const Sensor& registerVirtualSensor(SensorInterface* sensor, bool isDebug = false);
+ const Sensor& registerDynamicSensor(SensorInterface* sensor, bool isDebug = false);
bool unregisterDynamicSensor(int handle);
status_t cleanupWithoutDisable(const sp<SensorEventConnection>& connection, int handle);
status_t cleanupWithoutDisableLocked(const sp<SensorEventConnection>& connection, int handle);
@@ -182,7 +183,6 @@
void checkWakeLockStateLocked();
bool isWakeLockAcquired();
bool isWakeUpSensorEvent(const sensors_event_t& event) const;
- bool isNewHandle(int handle);
sp<Looper> getLooper() const;
@@ -211,14 +211,7 @@
status_t resetToNormalMode();
status_t resetToNormalModeLocked();
- // lists and maps
- Vector<Sensor> mSensorList;
- Vector<Sensor> mUserSensorListDebug;
- Vector<Sensor> mUserSensorList;
- Vector<Sensor> mDynamicSensorList;
- DefaultKeyedVector<int, SensorInterface*> mSensorMap;
- Vector<SensorInterface *> mVirtualSensorList;
- Vector<int> mUsedHandleList;
+ SensorServiceUtil::SensorList mSensors;
status_t mInitCheck;
// Socket buffersize used to initialize BitTube. This size depends on whether batching is
@@ -233,6 +226,7 @@
bool mWakeLockAcquired;
sensors_event_t *mSensorEventBuffer, *mSensorEventScratch;
SensorEventConnection const **mMapFlushEventsToConnections;
+ KeyedVector<int32_t, MostRecentEventLogger*> mLastEventSeen;
Mode mCurrentOperatingMode;
// This packagaName is set when SensorService is in RESTRICTED or DATA_INJECTION mode. Only
@@ -241,9 +235,6 @@
// sensors.
String8 mWhiteListedPackage;
- // The size of this vector is constant, only the items are mutable
- KeyedVector<int32_t, MostRecentEventLogger *> mLastEventSeen;
-
int mNextSensorRegIndex;
Vector<SensorRegistrationInfo> mLastNSensorRegistrations;
};