Loading services/core/java/com/android/server/pm/AppsFilterImpl.java +8 −3 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.SparseBooleanArray; import android.util.SparseSetArray; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -1030,14 +1031,18 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, private void recomputeComponentVisibility( ArrayMap<String, ? extends PackageStateInternal> existingSettings) { final WatchedArraySet<String> protectedBroadcasts; final WatchedArraySet<Integer> forceQueryable; synchronized (mProtectedBroadcastsLock) { protectedBroadcasts = mProtectedBroadcasts.snapshot(); } synchronized (mForceQueryableLock) { forceQueryable = mForceQueryable.snapshot(); } final ParallelComputeComponentVisibility computer = new ParallelComputeComponentVisibility( existingSettings, mForceQueryable, protectedBroadcasts); existingSettings, forceQueryable, protectedBroadcasts); SparseSetArray<Integer> queriesViaComponent = computer.execute(); synchronized (mQueriesViaComponentLock) { mQueriesViaComponent.clear(); computer.execute(mQueriesViaComponent); mQueriesViaComponent.copyFrom(queriesViaComponent); } mQueriesViaComponentRequireRecompute.set(false); Loading services/core/java/com/android/server/pm/AppsFilterUtils.java +6 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.IntentFilter; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Pair; import android.util.SparseSetArray; import com.android.internal.pm.pkg.component.ParsedComponent; import com.android.internal.pm.pkg.component.ParsedIntentInfo; Loading @@ -37,7 +38,6 @@ import com.android.server.pm.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.utils.WatchedArraySet; import com.android.server.utils.WatchedSparseSetArray; import java.util.ArrayList; import java.util.List; Loading Loading @@ -213,7 +213,9 @@ final class AppsFilterUtils { /** * Computes component visibility of all packages in parallel from a thread pool. */ void execute(@NonNull WatchedSparseSetArray<Integer> outQueriesViaComponent) { @NonNull SparseSetArray<Integer> execute() { final SparseSetArray<Integer> queriesViaComponent = new SparseSetArray<>(); final ExecutorService pool = ConcurrentUtils.newFixedThreadPool( MAX_THREADS, ParallelComputeComponentVisibility.class.getSimpleName(), THREAD_PRIORITY_DEFAULT); Loading @@ -239,7 +241,7 @@ final class AppsFilterUtils { try { final ArraySet<Integer> visibleList = future.get(); if (visibleList.size() != 0) { outQueriesViaComponent.addAll(appId, visibleList); queriesViaComponent.addAll(appId, visibleList); } } catch (InterruptedException | ExecutionException e) { throw new IllegalStateException(e); Loading @@ -248,6 +250,7 @@ final class AppsFilterUtils { } finally { pool.shutdownNow(); } return queriesViaComponent; } /** Loading services/core/java/com/android/server/utils/WatchedSparseSetArray.java +14 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,20 @@ public class WatchedSparseSetArray<T> extends WatchableImpl implements Snappable return (T) mStorage.valueAt(intIndex, valueIndex); } /** * Copy from another SparseSetArray. */ public void copyFrom(@NonNull SparseSetArray<T> c) { clear(); final int end = c.size(); for (int i = 0; i < end; i++) { final int key = c.keyAt(i); final ArraySet<T> set = c.get(key); mStorage.addAll(key, set); } onChanged(); } @NonNull @Override public Object snapshot() { Loading Loading
services/core/java/com/android/server/pm/AppsFilterImpl.java +8 −3 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.SparseBooleanArray; import android.util.SparseSetArray; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -1030,14 +1031,18 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, private void recomputeComponentVisibility( ArrayMap<String, ? extends PackageStateInternal> existingSettings) { final WatchedArraySet<String> protectedBroadcasts; final WatchedArraySet<Integer> forceQueryable; synchronized (mProtectedBroadcastsLock) { protectedBroadcasts = mProtectedBroadcasts.snapshot(); } synchronized (mForceQueryableLock) { forceQueryable = mForceQueryable.snapshot(); } final ParallelComputeComponentVisibility computer = new ParallelComputeComponentVisibility( existingSettings, mForceQueryable, protectedBroadcasts); existingSettings, forceQueryable, protectedBroadcasts); SparseSetArray<Integer> queriesViaComponent = computer.execute(); synchronized (mQueriesViaComponentLock) { mQueriesViaComponent.clear(); computer.execute(mQueriesViaComponent); mQueriesViaComponent.copyFrom(queriesViaComponent); } mQueriesViaComponentRequireRecompute.set(false); Loading
services/core/java/com/android/server/pm/AppsFilterUtils.java +6 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.IntentFilter; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Pair; import android.util.SparseSetArray; import com.android.internal.pm.pkg.component.ParsedComponent; import com.android.internal.pm.pkg.component.ParsedIntentInfo; Loading @@ -37,7 +38,6 @@ import com.android.server.pm.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.utils.WatchedArraySet; import com.android.server.utils.WatchedSparseSetArray; import java.util.ArrayList; import java.util.List; Loading Loading @@ -213,7 +213,9 @@ final class AppsFilterUtils { /** * Computes component visibility of all packages in parallel from a thread pool. */ void execute(@NonNull WatchedSparseSetArray<Integer> outQueriesViaComponent) { @NonNull SparseSetArray<Integer> execute() { final SparseSetArray<Integer> queriesViaComponent = new SparseSetArray<>(); final ExecutorService pool = ConcurrentUtils.newFixedThreadPool( MAX_THREADS, ParallelComputeComponentVisibility.class.getSimpleName(), THREAD_PRIORITY_DEFAULT); Loading @@ -239,7 +241,7 @@ final class AppsFilterUtils { try { final ArraySet<Integer> visibleList = future.get(); if (visibleList.size() != 0) { outQueriesViaComponent.addAll(appId, visibleList); queriesViaComponent.addAll(appId, visibleList); } } catch (InterruptedException | ExecutionException e) { throw new IllegalStateException(e); Loading @@ -248,6 +250,7 @@ final class AppsFilterUtils { } finally { pool.shutdownNow(); } return queriesViaComponent; } /** Loading
services/core/java/com/android/server/utils/WatchedSparseSetArray.java +14 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,20 @@ public class WatchedSparseSetArray<T> extends WatchableImpl implements Snappable return (T) mStorage.valueAt(intIndex, valueIndex); } /** * Copy from another SparseSetArray. */ public void copyFrom(@NonNull SparseSetArray<T> c) { clear(); final int end = c.size(); for (int i = 0; i < end; i++) { final int key = c.keyAt(i); final ArraySet<T> set = c.get(key); mStorage.addAll(key, set); } onChanged(); } @NonNull @Override public Object snapshot() { Loading