diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-15 01:06:17 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-15 01:06:17 +0000 |
commit | 22177f4530aa9ceb04f222f59cef0a0ca0e4daf4 (patch) | |
tree | 540976f1371721dd573c8f67c52b0b6a6537ca15 | |
parent | 41b552872df5a10a996340b0faa13ccceedb5f14 (diff) | |
parent | 0cb6215dd6901502fc2ed12bc0cf532c58e0c3d4 (diff) | |
download | native-22177f4530aa9ceb04f222f59cef0a0ca0e4daf4.tar.gz |
Snap for 7825665 from 0cb6215dd6901502fc2ed12bc0cf532c58e0c3d4 to sc-qpr1-d-releaseandroid-12.0.0_r29android-12.0.0_r27android-12.0.0_r21android-12.0.0_r20android-12.0.0_r19android-12.0.0_r18android12-qpr1-d-s3-releaseandroid12-qpr1-d-s2-releaseandroid12-qpr1-d-s1-release
Change-Id: Idde950abe99be3686f0b37d1f1c6ba5f6f9f4c76
-rw-r--r-- | libs/binder/TEST_MAPPING | 3 | ||||
-rw-r--r-- | libs/binder/tests/Android.bp | 1 | ||||
-rw-r--r-- | services/sensorservice/SensorInterface.cpp | 20 | ||||
-rw-r--r-- | services/sensorservice/SensorInterface.h | 7 | ||||
-rw-r--r-- | services/sensorservice/SensorService.cpp | 54 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 12 |
6 files changed, 32 insertions, 65 deletions
diff --git a/libs/binder/TEST_MAPPING b/libs/binder/TEST_MAPPING index 1010a2d79d..b9f4502143 100644 --- a/libs/binder/TEST_MAPPING +++ b/libs/binder/TEST_MAPPING @@ -25,9 +25,6 @@ "name": "binderLibTest" }, { - "name": "binderRpcTest" - }, - { "name": "binderStabilityTest" }, { diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp index fb84f04fde..d584897b97 100644 --- a/libs/binder/tests/Android.bp +++ b/libs/binder/tests/Android.bp @@ -154,7 +154,6 @@ cc_test { "binderRpcTestIface-cpp", "binderRpcTestIface-ndk_platform", ], - test_suites: ["general-tests"], require_root: true, // Prevent the unit test target from running on sc-dev as it's not ready. test_options: { diff --git a/services/sensorservice/SensorInterface.cpp b/services/sensorservice/SensorInterface.cpp index c285c00623..46f00e8329 100644 --- a/services/sensorservice/SensorInterface.cpp +++ b/services/sensorservice/SensorInterface.cpp @@ -92,31 +92,13 @@ ProximitySensor::ProximitySensor(const sensor_t& sensor, SensorService& service) } status_t ProximitySensor::activate(void* ident, bool enabled) { - bool lastState = mSensorDevice.isSensorActive(mSensor.getHandle()); - status_t status = HardwareSensor::activate(ident, enabled); if (status != NO_ERROR) { return status; } - - bool currentState = mSensorDevice.isSensorActive(mSensor.getHandle()); - if (currentState != lastState) { - mSensorService.onProximityActiveLocked(currentState); - } + mSensorService.checkAndReportProxStateChangeLocked(); return NO_ERROR; } -void ProximitySensor::willDisableAllSensors() { - if (mSensorDevice.isSensorActive(mSensor.getHandle())) { - mSensorService.onProximityActiveLocked(false); - } -} - -void ProximitySensor::didEnableAllSensors() { - if (mSensorDevice.isSensorActive(mSensor.getHandle())) { - mSensorService.onProximityActiveLocked(true); - } -} - // --------------------------------------------------------------------------- }; // namespace android diff --git a/services/sensorservice/SensorInterface.h b/services/sensorservice/SensorInterface.h index 4e9f7bf9c8..57043592c5 100644 --- a/services/sensorservice/SensorInterface.h +++ b/services/sensorservice/SensorInterface.h @@ -44,9 +44,6 @@ public: virtual const Sensor& getSensor() const = 0; virtual bool isVirtual() const = 0; virtual void autoDisable(void* /*ident*/, int /*handle*/) = 0; - - virtual void willDisableAllSensors() = 0; - virtual void didEnableAllSensors() = 0; }; class BaseSensor : public SensorInterface { @@ -70,8 +67,6 @@ public: virtual const Sensor& getSensor() const override { return mSensor; } virtual void autoDisable(void* /*ident*/, int /*handle*/) override { } - virtual void willDisableAllSensors() override { } - virtual void didEnableAllSensors() override { } protected: SensorDevice& mSensorDevice; Sensor mSensor; @@ -115,8 +110,6 @@ public: status_t activate(void* ident, bool enabled) override; - void willDisableAllSensors() override; - void didEnableAllSensors() override; private: SensorService& mSensorService; }; diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 726fe8ea84..bdbae7b1ec 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -103,7 +103,7 @@ static const String16 sManageSensorsPermission("android.permission.MANAGE_SENSOR SensorService::SensorService() : mInitCheck(NO_INIT), mSocketBufferSize(SOCKET_BUFFER_SIZE_NON_BATCHED), - mWakeLockAcquired(false), mProximityActiveCount(0) { + mWakeLockAcquired(false), mLastReportedProxIsActive(false) { mUidPolicy = new UidPolicy(this); mSensorPrivacyPolicy = new SensorPrivacyPolicy(this); } @@ -204,9 +204,11 @@ void SensorService::onFirstRef() { } if (useThisSensor) { if (list[i].type == SENSOR_TYPE_PROXIMITY) { - registerSensor(new ProximitySensor(list[i], *this)); + SensorInterface* s = new ProximitySensor(list[i], *this); + registerSensor(s); + mProxSensorHandles.push_back(s->getSensor().getHandle()); } else { - registerSensor( new HardwareSensor(list[i]) ); + registerSensor(new HardwareSensor(list[i])); } } } @@ -331,6 +333,7 @@ void SensorService::onUidStateChanged(uid_t uid, UidState state) { conn->onSensorAccessChanged(hasAccess); } } + checkAndReportProxStateChangeLocked(); } bool SensorService::hasSensorAccess(uid_t uid, const String16& opPackageName) { @@ -680,11 +683,8 @@ void SensorService::disableAllSensorsLocked(ConnectionSafeAutolock* connLock) { bool hasAccess = hasSensorAccessLocked(conn->getUid(), conn->getOpPackageName()); conn->onSensorAccessChanged(hasAccess); } - mSensors.forEachEntry([](const SensorServiceUtil::SensorList::Entry& e) { - e.si->willDisableAllSensors(); - return true; - }); dev.disableAllSensors(); + checkAndReportProxStateChangeLocked(); // Clear all pending flush connections for all active sensors. If one of the active // connections has called flush() and the underlying sensor has been disabled before a // flush complete event is returned, we need to remove the connection from this queue. @@ -709,14 +709,11 @@ void SensorService::enableAllSensorsLocked(ConnectionSafeAutolock* connLock) { } SensorDevice& dev(SensorDevice::getInstance()); dev.enableAllSensors(); - mSensors.forEachEntry([](const SensorServiceUtil::SensorList::Entry& e) { - e.si->didEnableAllSensors(); - return true; - }); for (const sp<SensorDirectConnection>& conn : connLock->getDirectConnections()) { bool hasAccess = hasSensorAccessLocked(conn->getUid(), conn->getOpPackageName()); conn->onSensorAccessChanged(hasAccess); } + checkAndReportProxStateChangeLocked(); } void SensorService::capRates(userid_t userId) { @@ -1538,10 +1535,7 @@ status_t SensorService::resetToNormalModeLocked() { if (err == NO_ERROR) { mCurrentOperatingMode = NORMAL; dev.enableAllSensors(); - mSensors.forEachEntry([](const SensorServiceUtil::SensorList::Entry& e) { - e.si->didEnableAllSensors(); - return true; - }); + checkAndReportProxStateChangeLocked(); } return err; } @@ -1606,28 +1600,26 @@ void SensorService::cleanupConnection(SensorDirectConnection* c) { mConnectionHolder.removeDirectConnection(c); } -void SensorService::onProximityActiveLocked(bool isActive) { - int prevCount = mProximityActiveCount; - bool activeStateChanged = false; - if (isActive) { - mProximityActiveCount++; - activeStateChanged = prevCount == 0; - } else { - mProximityActiveCount--; - if (mProximityActiveCount < 0) { - ALOGE("Proximity active count is negative (%d)!", mProximityActiveCount); +void SensorService::checkAndReportProxStateChangeLocked() { + if (mProxSensorHandles.empty()) return; + + SensorDevice& dev(SensorDevice::getInstance()); + bool isActive = false; + for (auto& sensor : mProxSensorHandles) { + if (dev.isSensorActive(sensor)) { + isActive = true; + break; } - activeStateChanged = prevCount > 0 && mProximityActiveCount <= 0; } - - if (activeStateChanged) { - notifyProximityStateLocked(mProximityActiveListeners); + if (isActive != mLastReportedProxIsActive) { + notifyProximityStateLocked(isActive, mProximityActiveListeners); + mLastReportedProxIsActive = isActive; } } void SensorService::notifyProximityStateLocked( + const bool isActive, const std::vector<sp<ProximityActiveListener>>& listeners) { - const bool isActive = mProximityActiveCount > 0; const uint64_t mySeq = ++curProxCallbackSeq; std::thread t([isActive, mySeq, listenersCopy = listeners]() { while (completedCallbackSeq.load() != mySeq - 1) @@ -1655,7 +1647,7 @@ status_t SensorService::addProximityActiveListener(const sp<ProximityActiveListe mProximityActiveListeners.push_back(callback); std::vector<sp<ProximityActiveListener>> listener(1, callback); - notifyProximityStateLocked(listener); + notifyProximityStateLocked(mLastReportedProxIsActive, listener); return OK; } diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index def661177c..b059e61130 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -103,8 +103,9 @@ public: void cleanupConnection(SensorDirectConnection* c); // Call with mLock held. - void onProximityActiveLocked(bool isActive); - void notifyProximityStateLocked(const std::vector<sp<ProximityActiveListener>>& listeners); + void checkAndReportProxStateChangeLocked(); + void notifyProximityStateLocked(const bool isActive, + const std::vector<sp<ProximityActiveListener>>& listeners); status_t enable(const sp<SensorEventConnection>& connection, int handle, nsecs_t samplingPeriodNs, nsecs_t maxBatchReportLatencyNs, int reservedFlags, @@ -496,8 +497,11 @@ private: // Checks if the mic sensor privacy is enabled for the uid bool isMicSensorPrivacyEnabledForUid(uid_t uid); - // Counts how many proximity sensors are currently active. - int mProximityActiveCount; + // Keeps track of the handles of all proximity sensors in the system. + std::vector<int32_t> mProxSensorHandles; + // The last proximity sensor active state reported to listeners. + bool mLastReportedProxIsActive; + // Listeners subscribed to receive updates on the proximity sensor active state. std::vector<sp<ProximityActiveListener>> mProximityActiveListeners; }; |