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

Commit 9c0d9817 authored by Songchun Fan's avatar Songchun Fan Committed by Automerger Merge Worker
Browse files

Merge "[AppsFilter] skip recompute mQueriesViaComponent for snapshot" into tm-dev am: c49dfd94

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17915239



Change-Id: If76ec25cc8f520200f59bbcfdb89903b7ccfa631
Ignore-AOSP-First: this is an automerge
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents e0b5fe54 c49dfd94
Loading
Loading
Loading
Loading
+52 −9
Original line number Diff line number Diff line
@@ -189,6 +189,8 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable

    private final Object mCacheLock = new Object();

    private final boolean mIsSnapshot;

    /**
     * This structure maps uid -> uid and indicates whether access from the first should be
     * filtered to the second. It's essentially a cache of the
@@ -322,6 +324,7 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable
                mProtectedBroadcasts, mProtectedBroadcasts, "AppsFilter.mProtectedBroadcasts");

        mSnapshot = makeCache();
        mIsSnapshot = false;
    }

    /**
@@ -360,6 +363,7 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable
        mBackgroundExecutor = null;
        mSnapshot = new SnapshotCache.Sealed<>();
        mSystemReady = orig.mSystemReady;
        mIsSnapshot = true;
    }

    /**
@@ -1136,6 +1140,7 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable
            }
        }
        mQueriesViaComponentRequireRecompute = false;
        onChanged();
    }

    /**
@@ -1405,6 +1410,7 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable
        }
    }

    @SuppressWarnings("GuardedBy")
    private boolean shouldFilterApplicationInternal(PackageDataSnapshot snapshot, int callingUid,
            Object callingSetting, PackageStateInternal targetPkgSetting, int targetUserId) {
        if (DEBUG_TRACING) {
@@ -1563,10 +1569,19 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable
                if (DEBUG_TRACING) {
                    Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "mQueriesViaComponent");
                }
                if (mQueriesViaComponentRequireRecompute) {
                    recomputeComponentVisibility(snapshot.getPackageStates());
                    onChanged();
                if (!mQueriesViaComponentRequireRecompute) {
                    synchronized (mLock) {
                        if (mQueriesViaComponent.contains(callingAppId, targetAppId)) {
                            if (DEBUG_LOGGING) {
                                log(callingSetting, targetPkgSetting, "queries component");
                            }
                            return false;
                        }
                    }
                } else { // mQueriesViaComponent is stale
                    if (!mIsSnapshot) {
                        // Only recompute mQueriesViaComponent if not in snapshot
                        recomputeComponentVisibility(snapshot.getPackageStates());
                        synchronized (mLock) {
                            if (mQueriesViaComponent.contains(callingAppId, targetAppId)) {
                                if (DEBUG_LOGGING) {
@@ -1575,6 +1590,34 @@ public class AppsFilterImpl implements AppsFilterSnapshot, Watchable, Snappable
                                return false;
                            }
                        }
                    } else {
                        // Do no recompute or use mQueriesViaComponent if it's stale in snapshot
                        // Since we know we are in the snapshot, no need to acquire mLock because
                        // mProtectedBroadcasts will not change
                        if (callingPkgSetting != null) {
                            if (callingPkgSetting.getPkg() != null
                                    && canQueryViaComponents(callingPkgSetting.getPkg(), targetPkg,
                                    mProtectedBroadcasts)) {
                                if (DEBUG_LOGGING) {
                                    log(callingSetting, targetPkgSetting, "queries component");
                                }
                                return false;
                            }
                        } else {
                            for (int i = callingSharedPkgSettings.size() - 1; i >= 0; i--) {
                                final AndroidPackage pkg =
                                        callingSharedPkgSettings.valueAt(i).getPkg();
                                if (pkg != null && canQueryViaComponents(pkg, targetPkg,
                                        mProtectedBroadcasts)) {
                                    if (DEBUG_LOGGING) {
                                        log(callingSetting, targetPkgSetting, "queries component");
                                    }
                                    return false;
                                }
                            }
                        }
                    }
                }
            } finally {
                if (DEBUG_TRACING) {
                    Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);