diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-07-10 01:10:39 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-07-10 01:10:39 +0000 |
commit | e9953a5cf66c40b202bc163f76c9ecb32d102e82 (patch) | |
tree | 61fca4a80d6c794a7b71c577c0976b08986b65d1 | |
parent | a6eeb89c7894279cf3565a30e0774b0112ecf9fe (diff) | |
parent | f708228c0255cadaa23d9b0a7129c495bd95b818 (diff) | |
download | native-e9953a5cf66c40b202bc163f76c9ecb32d102e82.tar.gz |
Snap for 6667917 from f708228c0255cadaa23d9b0a7129c495bd95b818 to rvc-d1-release
Change-Id: Ia998dd89402bebe48bf11cd13b098e9aba507237
5 files changed, 22 insertions, 31 deletions
diff --git a/services/sensorservice/SensorEventConnection.cpp b/services/sensorservice/SensorEventConnection.cpp index 9b30dceeb9..b4b5f98609 100644 --- a/services/sensorservice/SensorEventConnection.cpp +++ b/services/sensorservice/SensorEventConnection.cpp @@ -272,11 +272,16 @@ void SensorService::SensorEventConnection::updateLooperRegistrationLocked( } } -void SensorService::SensorEventConnection::incrementPendingFlushCount(int32_t handle) { - Mutex::Autolock _l(mConnectionLock); - if (mSensorInfo.count(handle) > 0) { - FlushInfo& flushInfo = mSensorInfo[handle]; - flushInfo.mPendingFlushEventsToSend++; +bool SensorService::SensorEventConnection::incrementPendingFlushCountIfHasAccess(int32_t handle) { + if (hasSensorAccess()) { + Mutex::Autolock _l(mConnectionLock); + if (mSensorInfo.count(handle) > 0) { + FlushInfo& flushInfo = mSensorInfo[handle]; + flushInfo.mPendingFlushEventsToSend++; + } + return true; + } else { + return false; } } diff --git a/services/sensorservice/SensorEventConnection.h b/services/sensorservice/SensorEventConnection.h index 8d5fcf7aa0..8f2d5db28f 100644 --- a/services/sensorservice/SensorEventConnection.h +++ b/services/sensorservice/SensorEventConnection.h @@ -116,8 +116,9 @@ private: // for writing send the data from the cache. virtual int handleEvent(int fd, int events, void* data); - // Increment mPendingFlushEventsToSend for the given sensor handle. - void incrementPendingFlushCount(int32_t handle); + // Increment mPendingFlushEventsToSend for the given handle if the connection has sensor access. + // Returns true if this connection does have sensor access. + bool incrementPendingFlushCountIfHasAccess(int32_t handle); // Add or remove the file descriptor associated with the BitTube to the looper. If mDead is set // to true or there are no more sensors for this connection, the file descriptor is removed if diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 26e37aa102..60f9cd90c8 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -1774,7 +1774,10 @@ status_t SensorService::flushSensor(const sp<SensorEventConnection>& connection, if (halVersion <= SENSORS_DEVICE_API_VERSION_1_0 || isVirtualSensor(handle)) { // For older devices just increment pending flush count which will send a trivial // flush complete event. - connection->incrementPendingFlushCount(handle); + if (!connection->incrementPendingFlushCountIfHasAccess(handle)) { + ALOGE("flush called on an inaccessible sensor"); + err = INVALID_OPERATION; + } } else { if (!canAccessSensor(sensor->getSensor(), "Tried flushing", opPackageName)) { err = INVALID_OPERATION; diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp index 053d0a7a39..8661b6ee0a 100644 --- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp +++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp @@ -212,10 +212,8 @@ const RefreshRate& RefreshRateConfigs::getBestRefreshRate( bool inPrimaryRange = scores[i].first->inPolicy(policy->primaryRange.min, policy->primaryRange.max); if ((primaryRangeIsSingleRate || !inPrimaryRange) && - !(layer.focused && - (layer.vote == LayerVoteType::ExplicitDefault || - layer.vote == LayerVoteType::ExplicitExactOrMultiple))) { - // Only focused layers with explicit frame rate settings are allowed to score + !(layer.focused && layer.vote == LayerVoteType::ExplicitDefault)) { + // Only focused layers with ExplicitDefault frame rate settings are allowed to score // refresh rates outside the primary range. continue; } diff --git a/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp b/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp index 03d4460b15..1f6f166b45 100644 --- a/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp +++ b/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp @@ -1130,15 +1130,6 @@ TEST_F(RefreshRateConfigsTest, auto& lr = layers[0]; RefreshRateConfigs::GlobalSignals consideredSignals; - lr.vote = LayerVoteType::ExplicitExactOrMultiple; - lr.desiredRefreshRate = 60.0f; - lr.name = "60Hz ExplicitExactOrMultiple"; - lr.focused = true; - EXPECT_EQ(mExpected60Config, - refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = true}, - &consideredSignals)); - EXPECT_EQ(false, consideredSignals.touch); - lr.vote = LayerVoteType::ExplicitDefault; lr.desiredRefreshRate = 60.0f; lr.name = "60Hz ExplicitDefault"; @@ -1162,13 +1153,6 @@ TEST_F(RefreshRateConfigsTest, auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; auto& lr = layers[0]; - lr.vote = LayerVoteType::ExplicitExactOrMultiple; - lr.desiredRefreshRate = 90.0f; - lr.name = "90Hz ExplicitExactOrMultiple"; - lr.focused = true; - EXPECT_EQ(mExpected90Config, - refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = true})); - lr.vote = LayerVoteType::ExplicitDefault; lr.desiredRefreshRate = 90.0f; lr.name = "90Hz ExplicitDefault"; @@ -1204,7 +1188,7 @@ TEST_F(RefreshRateConfigsTest, refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); lr.focused = true; - EXPECT_EQ(mExpected60Config, + EXPECT_EQ(mExpected90Config, refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); lr.vote = LayerVoteType::ExplicitDefault; @@ -1306,7 +1290,7 @@ TEST_F(RefreshRateConfigsTest, primaryVsAppRequestPolicy) { EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Max, 90.f)); EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Heuristic, 90.f)); EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitDefault, 90.f)); - EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f)); + EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f)); // Layers not focused are not allowed to override primary config EXPECT_EQ(HWC_CONFIG_ID_60, @@ -1321,7 +1305,7 @@ TEST_F(RefreshRateConfigsTest, primaryVsAppRequestPolicy) { // When we're higher than the primary range max due to a layer frame rate setting, touch boost // shouldn't drag us back down to the primary range max. EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitDefault, 90.f, /*touch=*/true)); - EXPECT_EQ(HWC_CONFIG_ID_90, + EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f, /*touch=*/true)); ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( |