Reduce contention of ApplicationsState locks

Change-Id: I5b2ad52b014eea5bdf77526554eb10f4ba303105
Fixes: 30113789
This commit is contained in:
Jason Monk
2016-07-15 13:54:42 -04:00
parent 3ed2a52bb1
commit e8ff0da78c

View File

@@ -582,10 +582,10 @@ public class ApplicationsState {
public ArrayList<AppEntry> rebuild(AppFilter filter, Comparator<AppEntry> comparator,
boolean foreground) {
synchronized (mRebuildSync) {
synchronized (mEntriesMap) {
synchronized (mRebuildingSessions) {
mRebuildingSessions.add(this);
mRebuildRequested = true;
mRebuildAsync = false;
mRebuildAsync = true;
mRebuildFilter = filter;
mRebuildComparator = comparator;
mRebuildForeground = foreground;
@@ -597,23 +597,7 @@ public class ApplicationsState {
}
}
// We will wait for .25s for the list to be built.
long waitend = SystemClock.uptimeMillis()+250;
while (mRebuildResult == null) {
long now = SystemClock.uptimeMillis();
if (now >= waitend) {
break;
}
try {
mRebuildSync.wait(waitend - now);
} catch (InterruptedException e) {
}
}
mRebuildAsync = true;
return mRebuildResult;
return null;
}
}
@@ -776,7 +760,7 @@ public class ApplicationsState {
public void handleMessage(Message msg) {
// Always try rebuilding list first thing, if needed.
ArrayList<Session> rebuildingSessions = null;
synchronized (mEntriesMap) {
synchronized (mRebuildingSessions) {
if (mRebuildingSessions.size() > 0) {
rebuildingSessions = new ArrayList<Session>(mRebuildingSessions);
mRebuildingSessions.clear();