Bug 962968 - Replace HashMap with SparseArray in Favicons (r=rnewman)

This commit is contained in:
Lucas Rocha 2014-01-23 19:00:05 +00:00
parent 9323b7194a
commit e0b73c5963

View File

@ -23,15 +23,14 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Favicons {
@ -62,7 +61,7 @@ public class Favicons {
// The density-adjusted maximum Favicon dimensions.
public static int sLargestFaviconSize;
private static final Map<Integer, LoadFaviconTask> sLoadTasks = Collections.synchronizedMap(new HashMap<Integer, LoadFaviconTask>());
private static final SparseArray<LoadFaviconTask> sLoadTasks = new SparseArray<LoadFaviconTask>();
// Cache to hold mappings between page URLs and Favicon URLs. Used to avoid going to the DB when
// doing so is not necessary.
@ -217,7 +216,9 @@ public class Favicons {
// No joy using in-memory resources. Go to background thread and ask the database.
LoadFaviconTask task = new LoadFaviconTask(ThreadUtils.getBackgroundHandler(), pageURL, targetURL, 0, callback, targetSize, true);
int taskId = task.getId();
sLoadTasks.put(taskId, task);
synchronized(sLoadTasks) {
sLoadTasks.put(taskId, task);
}
task.execute();
return taskId;
}
@ -282,7 +283,9 @@ public class Favicons {
LoadFaviconTask task = new LoadFaviconTask(ThreadUtils.getBackgroundHandler(), pageUrl, faviconUrl, flags, listener, targetSize, false);
int taskId = task.getId();
sLoadTasks.put(taskId, task);
synchronized(sLoadTasks) {
sLoadTasks.put(taskId, task);
}
task.execute();
@ -325,7 +328,7 @@ public class Favicons {
boolean cancelled;
synchronized (sLoadTasks) {
if (!sLoadTasks.containsKey(taskId))
if (sLoadTasks.indexOfKey(taskId) < 0)
return false;
Log.d(LOGTAG, "Cancelling favicon load (" + taskId + ")");
@ -341,11 +344,9 @@ public class Favicons {
// Cancel any pending tasks
synchronized (sLoadTasks) {
Set<Integer> taskIds = sLoadTasks.keySet();
Iterator<Integer> iter = taskIds.iterator();
while (iter.hasNext()) {
int taskId = iter.next();
cancelFaviconLoad(taskId);
final int count = sLoadTasks.size();
for (int i = 0; i < count; i++) {
cancelFaviconLoad(sLoadTasks.keyAt(i));
}
sLoadTasks.clear();
}
@ -449,7 +450,9 @@ public class Favicons {
}
public static void removeLoadTask(int taskId) {
sLoadTasks.remove(taskId);
synchronized(sLoadTasks) {
sLoadTasks.delete(taskId);
}
}
/**