diff options
| author | 2018-02-13 20:44:42 +0000 | |
|---|---|---|
| committer | 2018-02-13 20:44:42 +0000 | |
| commit | e9f70acf0578b8e8e018b125991619d6e2ecda82 (patch) | |
| tree | 7114e93d1c3629ee961f89cb7f0503008fe65e30 | |
| parent | f93ae682e1c115216ed5de690039f797da918899 (diff) | |
| parent | e3b4710524814d1780233750c9f8f3c02adf5d42 (diff) | |
Merge "Fix timeouts caused by destroy() waiting for the same lock on sort."
| -rw-r--r-- | core/java/com/android/internal/app/ResolverListController.java | 75 |
1 files changed, 25 insertions, 50 deletions
diff --git a/core/java/com/android/internal/app/ResolverListController.java b/core/java/com/android/internal/app/ResolverListController.java index 6bd693061a85..61aeca679303 100644 --- a/core/java/com/android/internal/app/ResolverListController.java +++ b/core/java/com/android/internal/app/ResolverListController.java @@ -56,9 +56,6 @@ public class ResolverListController { private static final String TAG = "ResolverListController"; private static final boolean DEBUG = false; - Object mLock = new Object(); - - @GuardedBy("mLock") private ResolverComparator mResolverComparator; private boolean isComputed = false; @@ -73,10 +70,8 @@ public class ResolverListController { mLaunchedFromUid = launchedFromUid; mTargetIntent = targetIntent; mReferrerPackage = referrerPackage; - synchronized (mLock) { - mResolverComparator = - new ResolverComparator(mContext, mTargetIntent, mReferrerPackage, null); - } + mResolverComparator = + new ResolverComparator(mContext, mTargetIntent, mReferrerPackage, null); } @VisibleForTesting @@ -244,29 +239,27 @@ public class ResolverListController { @VisibleForTesting @WorkerThread public void sort(List<ResolverActivity.ResolvedComponentInfo> inputList) { - synchronized (mLock) { - if (mResolverComparator == null) { - Log.d(TAG, "Comparator has already been destroyed; skipped."); - return; + if (mResolverComparator == null) { + Log.d(TAG, "Comparator has already been destroyed; skipped."); + return; + } + try { + long beforeRank = System.currentTimeMillis(); + if (!isComputed) { + final CountDownLatch finishComputeSignal = new CountDownLatch(1); + ComputeCallback callback = new ComputeCallback(finishComputeSignal); + mResolverComparator.setCallBack(callback); + mResolverComparator.compute(inputList); + finishComputeSignal.await(); + isComputed = true; } - final CountDownLatch finishComputeSignal = new CountDownLatch(1); - ComputeCallback callback = new ComputeCallback(finishComputeSignal); - mResolverComparator.setCallBack(callback); - try { - long beforeRank = System.currentTimeMillis(); - if (!isComputed) { - mResolverComparator.compute(inputList); - finishComputeSignal.await(); - isComputed = true; - } - Collections.sort(inputList, mResolverComparator); - long afterRank = System.currentTimeMillis(); - if (DEBUG) { - Log.d(TAG, "Time Cost: " + Long.toString(afterRank - beforeRank)); - } - } catch (InterruptedException e) { - Log.e(TAG, "Compute & Sort was interrupted: " + e); + Collections.sort(inputList, mResolverComparator); + long afterRank = System.currentTimeMillis(); + if (DEBUG) { + Log.d(TAG, "Time Cost: " + Long.toString(afterRank - beforeRank)); } + } catch (InterruptedException e) { + Log.e(TAG, "Compute & Sort was interrupted: " + e); } } @@ -287,36 +280,18 @@ public class ResolverListController { @VisibleForTesting public float getScore(ResolverActivity.DisplayResolveInfo target) { - synchronized (mLock) { - if (mResolverComparator == null) { - return 0.0f; - } - return mResolverComparator.getScore(target.getResolvedComponentName()); - } + return mResolverComparator.getScore(target.getResolvedComponentName()); } public void updateModel(ComponentName componentName) { - synchronized (mLock) { - if (mResolverComparator != null) { - mResolverComparator.updateModel(componentName); - } - } + mResolverComparator.updateModel(componentName); } public void updateChooserCounts(String packageName, int userId, String action) { - synchronized (mLock) { - if (mResolverComparator != null) { - mResolverComparator.updateChooserCounts(packageName, userId, action); - } - } + mResolverComparator.updateChooserCounts(packageName, userId, action); } public void destroy() { - synchronized (mLock) { - if (mResolverComparator != null) { - mResolverComparator.destroy(); - } - mResolverComparator = null; - } + mResolverComparator.destroy(); } } |