Merge "Add sysprop for refresh rate threshold." into sc-dev
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index c69435d..fd78309 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -182,12 +182,12 @@
void TransactionCompletedListener::addJankListener(const sp<JankDataListener>& listener,
sp<SurfaceControl> surfaceControl) {
- std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
+ std::lock_guard<std::mutex> lock(mMutex);
mJankListeners.insert({surfaceControl->getHandle(), listener});
}
void TransactionCompletedListener::removeJankListener(const sp<JankDataListener>& listener) {
- std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
+ std::lock_guard<std::mutex> lock(mMutex);
for (auto it = mJankListeners.begin(); it != mJankListeners.end();) {
if (it->second == listener) {
it = mJankListeners.erase(it);
@@ -242,6 +242,7 @@
void TransactionCompletedListener::onTransactionCompleted(ListenerStats listenerStats) {
std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> callbacksMap;
+ std::multimap<sp<IBinder>, sp<JankDataListener>> jankListenersMap;
{
std::lock_guard<std::mutex> lock(mMutex);
@@ -257,6 +258,7 @@
* sp<SurfaceControl> that could possibly exist for the callbacks.
*/
callbacksMap = mCallbacks;
+ jankListenersMap = mJankListeners;
for (const auto& transactionStats : listenerStats.transactionStats) {
for (auto& callbackId : transactionStats.callbackIds) {
mCallbacks.erase(callbackId);
@@ -352,12 +354,7 @@
}
if (surfaceStats.jankData.empty()) continue;
-
- // Acquire jank listener lock such that we guarantee that after calling unregister,
- // there won't be any further callback.
- std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
- auto copy = mJankListeners;
- auto jankRange = copy.equal_range(surfaceStats.surfaceControl);
+ auto jankRange = jankListenersMap.equal_range(surfaceStats.surfaceControl);
for (auto it = jankRange.first; it != jankRange.second; it++) {
it->second->onJankDataAvailable(surfaceStats.jankData);
}
diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h
index fa91bfa..13994fd 100644
--- a/libs/gui/include/gui/SurfaceComposerClient.h
+++ b/libs/gui/include/gui/SurfaceComposerClient.h
@@ -653,9 +653,6 @@
std::mutex mMutex;
// This lock needs to be recursive so we can unregister a callback from within that callback.
- std::recursive_mutex mJankListenerMutex;
-
- // This lock needs to be recursive so we can unregister a callback from within that callback.
std::recursive_mutex mSurfaceStatsListenerMutex;
bool mListening GUARDED_BY(mMutex) = false;
@@ -680,10 +677,7 @@
std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> mCallbacks
GUARDED_BY(mMutex);
-
- // This is protected by mJankListenerMutex, but GUARDED_BY isn't supported for
- // std::recursive_mutex
- std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners;
+ std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners GUARDED_BY(mMutex);
std::unordered_map<uint64_t /* graphicsBufferId */, ReleaseBufferCallback>
mReleaseBufferCallbacks GUARDED_BY(mMutex);
diff --git a/libs/renderengine/skia/Cache.cpp b/libs/renderengine/skia/Cache.cpp
index b3975b0..725f57b 100644
--- a/libs/renderengine/skia/Cache.cpp
+++ b/libs/renderengine/skia/Cache.cpp
@@ -72,6 +72,8 @@
// have color correction added, and important that it be srgb, so the *vertex* shader
// doesn't have color correction added.
.sourceDataspace = kDestDataSpace,
+ // setting this is mandatory for shadows and blurs
+ .skipContentDraw = true,
};
auto layers = std::vector<const LayerSettings*>{&layer};
@@ -173,9 +175,12 @@
.boundaries = rect,
},
.alpha = 1,
+ // setting this is mandatory for shadows and blurs
+ .skipContentDraw = true,
};
auto layers = std::vector<const LayerSettings*>{&layer};
+ // Different blur code is invoked for radii less and greater than 30 pixels
for (int radius : {9, 60}) {
layer.backgroundBlurRadius = radius;
renderengine->drawLayers(display, layers, dstTexture, kUseFrameBufferCache,
@@ -290,10 +295,13 @@
ExternalTexture::Usage::READABLE |
ExternalTexture::Usage::WRITEABLE);
+ // 6 shaders
drawSolidLayers(renderengine, display, dstTexture);
+ // 8 shaders
drawShadowLayers(renderengine, display, srcTexture);
if (renderengine->supportsBackgroundBlur()) {
+ // 2 shaders
drawBlurLayers(renderengine, display, dstTexture);
}
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 2281721..726fe8e 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -2161,8 +2161,9 @@
bool SensorService::isRateCappedBasedOnPermission(const String16& opPackageName) {
int targetSdk = getTargetSdkVersion(opPackageName);
- bool hasSamplingRatePermission = PermissionCache::checkCallingPermission(
- sAccessHighSensorSamplingRatePermission);
+ bool hasSamplingRatePermission = checkPermission(sAccessHighSensorSamplingRatePermission,
+ IPCThreadState::self()->getCallingPid(),
+ IPCThreadState::self()->getCallingUid());
if (targetSdk < __ANDROID_API_S__ ||
(targetSdk >= __ANDROID_API_S__ && hasSamplingRatePermission)) {
return false;