From b56d96c33aaf34edab2fee89b70c9cb41cef94e8 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Thu, 23 Sep 2021 16:49:35 -0700 Subject: binderRpcTest: disable This test is disabled in S, and some of the fixes required for old kernels aren't present here, but new systems are pulling it in. Fixes: 200742446 Merged-In: Ieaeee990843aafdf6baedadd2f26177d53feeb96 Change-Id: I7d50218c7a645196a9f92f9b4f0a2cd7c447eef5 --- libs/binder/TEST_MAPPING | 3 --- libs/binder/tests/Android.bp | 1 - 2 files changed, 4 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 @@ -24,9 +24,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: { -- cgit v1.2.3 From df11ff29247cf049d26bcc09368d1e899705ba80 Mon Sep 17 00:00:00 2001 From: Chris Kuiper Date: Tue, 12 Oct 2021 16:30:01 -0700 Subject: sensorservice: Refactor tracking logic for the Proximity sensor. This simplifies the code that tracks if the proximity sensor is active by removing all counting of clients and simply checking the sensor's isSensorActive() method and reporting changes to it. Bug: b/202328704 Tests: See b/202328704#comment9 for tests done. Change-Id: Idd72b82ed0fd5ee089e795ab4b233241350979c2 --- services/sensorservice/SensorInterface.cpp | 20 +---------- services/sensorservice/SensorInterface.h | 7 ---- services/sensorservice/SensorService.cpp | 53 +++++++++++++----------------- services/sensorservice/SensorService.h | 12 ++++--- 4 files changed, 31 insertions(+), 61 deletions(-) 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..3529798d00 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])); } } } @@ -680,11 +682,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 +708,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& conn : connLock->getDirectConnections()) { bool hasAccess = hasSensorAccessLocked(conn->getUid(), conn->getOpPackageName()); conn->onSensorAccessChanged(hasAccess); } + checkAndReportProxStateChangeLocked(); } void SensorService::capRates(userid_t userId) { @@ -1538,10 +1534,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 +1599,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>& 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 +1646,7 @@ status_t SensorService::addProximityActiveListener(const sp> 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>& listeners); + void checkAndReportProxStateChangeLocked(); + void notifyProximityStateLocked(const bool isActive, + const std::vector>& listeners); status_t enable(const sp& 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 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> mProximityActiveListeners; }; -- cgit v1.2.3 From 587ef9b51ed54ec20a02f9f13b44278886c173e0 Mon Sep 17 00:00:00 2001 From: Chris Kuiper Date: Tue, 12 Oct 2021 16:36:43 -0700 Subject: sensorservice: Track Proximity state change when app goes idle. This tracks the Proximity state change when an app subscribed to the Proximity sensor goes idle and its connection is paused. Bug: b/202328704 Tests: See b/202328704#comment9 for tests done. Change-Id: Ib7a08010d903406b67940de56a49e9efb200ad68 --- services/sensorservice/SensorService.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 3529798d00..bdbae7b1ec 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -333,6 +333,7 @@ void SensorService::onUidStateChanged(uid_t uid, UidState state) { conn->onSensorAccessChanged(hasAccess); } } + checkAndReportProxStateChangeLocked(); } bool SensorService::hasSensorAccess(uid_t uid, const String16& opPackageName) { -- cgit v1.2.3