From e0b73c5963860da358c1944c2c1f68b039953f12 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 23 Jan 2014 19:00:05 +0000 Subject: [PATCH] Bug 962968 - Replace HashMap with SparseArray in Favicons (r=rnewman) --- mobile/android/base/favicons/Favicons.java | 27 ++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/mobile/android/base/favicons/Favicons.java b/mobile/android/base/favicons/Favicons.java index fade1329032..cddab3076a8 100644 --- a/mobile/android/base/favicons/Favicons.java +++ b/mobile/android/base/favicons/Favicons.java @@ -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 sLoadTasks = Collections.synchronizedMap(new HashMap()); + private static final SparseArray sLoadTasks = new SparseArray(); // 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 taskIds = sLoadTasks.keySet(); - Iterator 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); + } } /**