Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c4b4ef8 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 7490979 from 504a4d8f to sc-d1-release

Change-Id: I92e64d13539f90e918d5370b9bbc1784e9f4c067
parents 23e3a75a 504a4d8f
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -182,12 +182,12 @@ CallbackId TransactionCompletedListener::addCallbackFunction(

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::addSurfaceControlToCallbacks(

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 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
         * 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 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
            }

            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);
            }
+1 −7
Original line number Diff line number Diff line
@@ -652,9 +652,6 @@ class TransactionCompletedListener : public BnTransactionCompletedListener {

    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;

@@ -680,10 +677,7 @@ class TransactionCompletedListener : public BnTransactionCompletedListener {

    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);

+8 −0
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ static void drawShadowLayers(SkiaRenderEngine* renderengine, const DisplaySettin
            // 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 @@ static void drawBlurLayers(SkiaRenderEngine* renderengine, const DisplaySettings
                            .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 @@ void Cache::primeShaderCache(SkiaRenderEngine* renderengine) {
                                                  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);
        }

+3 −2
Original line number Diff line number Diff line
@@ -2161,8 +2161,9 @@ bool SensorService::isUidActive(uid_t uid) {

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;