Bug 888326 - Part 4: LoadFaviconTask's use mNextFaviconLoadId is now thread safe. (Use AtomicInteger instead of long.) r=mleibovic

This commit is contained in:
Chris Kitching 2013-09-12 10:50:03 -04:00
Родитель 0bbf8c342a
Коммит dc3bf2ecb8
4 изменённых файлов: 19 добавлений и 20 удалений

Просмотреть файл

@ -1335,7 +1335,7 @@ abstract public class BrowserApp extends GeckoApp
maybeCancelFaviconLoad(tab);
int flags = LoadFaviconTask.FLAG_SCALE | ( (tab.isPrivate() || tab.getErrorType() != Tab.ErrorType.NONE) ? 0 : LoadFaviconTask.FLAG_PERSIST);
long id = Favicons.loadFavicon(tab.getURL(), tab.getFaviconURL(), flags,
int id = Favicons.loadFavicon(tab.getURL(), tab.getFaviconURL(), flags,
new OnFaviconLoadedListener() {
@Override
@ -1361,7 +1361,7 @@ abstract public class BrowserApp extends GeckoApp
}
private void maybeCancelFaviconLoad(Tab tab) {
long faviconLoadId = tab.getFaviconLoadId();
int faviconLoadId = tab.getFaviconLoadId();
if (faviconLoadId == Favicons.NOT_LOADING)
return;

Просмотреть файл

@ -54,7 +54,7 @@ public class Tab {
private boolean mExternal;
private boolean mBookmark;
private boolean mReadingListItem;
private long mFaviconLoadId;
private int mFaviconLoadId;
private String mContentType;
private boolean mHasTouchListeners;
private ZoomConstraints mZoomConstraints;
@ -351,11 +351,11 @@ public class Tab {
return mHasTouchListeners;
}
public void setFaviconLoadId(long faviconLoadId) {
public void setFaviconLoadId(int faviconLoadId) {
mFaviconLoadId = faviconLoadId;
}
public long getFaviconLoadId() {
public int getFaviconLoadId() {
return mFaviconLoadId;
}

Просмотреть файл

@ -24,8 +24,8 @@ import java.util.Set;
public class Favicons {
private static final String LOGTAG = "GeckoFavicons";
public static final long NOT_LOADING = 0;
public static final long FAILED_EXPIRY_NEVER = -1;
public static final int NOT_LOADING = 0;
public static final int FAILED_EXPIRY_NEVER = -1;
public static final int FLAG_PERSIST = 1;
public static final int FLAG_SCALE = 2;
@ -34,7 +34,7 @@ public class Favicons {
protected static Context sContext;
private static final Map<Long,LoadFaviconTask> sLoadTasks = Collections.synchronizedMap(new HashMap<Long, LoadFaviconTask>());
private static final Map<Integer, LoadFaviconTask> sLoadTasks = Collections.synchronizedMap(new HashMap<Integer, LoadFaviconTask>());
private static final LruCache<String, Bitmap> sFaviconCache = new LruCache<String, Bitmap>(1024 * 1024) {
@Override
protected int sizeOf(String url, Bitmap image) {
@ -68,7 +68,7 @@ public class Favicons {
return BrowserDB.getFaviconUrlForHistoryUrl(sContext.getContentResolver(), pageUrl);
}
public static long loadFavicon(String pageUrl, String faviconUrl, int flags,
public static int loadFavicon(String pageUrl, String faviconUrl, int flags,
OnFaviconLoadedListener listener) {
// Handle the case where page url is empty
@ -92,7 +92,7 @@ public class Favicons {
LoadFaviconTask task = new LoadFaviconTask(ThreadUtils.getBackgroundHandler(), pageUrl, faviconUrl, flags, listener);
long taskId = task.getmId();
int taskId = task.getId();
sLoadTasks.put(taskId, task);
task.execute();
@ -134,7 +134,7 @@ public class Favicons {
sFailedCache.evictAll();
}
public static boolean cancelFaviconLoad(long taskId) {
public static boolean cancelFaviconLoad(int taskId) {
Log.d(LOGTAG, "Requesting cancelation of favicon load (" + taskId + ")");
boolean cancelled = false;
@ -155,10 +155,10 @@ public class Favicons {
// Cancel any pending tasks
synchronized (sLoadTasks) {
Set<Long> taskIds = sLoadTasks.keySet();
Iterator<Long> iter = taskIds.iterator();
Set<Integer> taskIds = sLoadTasks.keySet();
Iterator<Integer> iter = taskIds.iterator();
while (iter.hasNext()) {
long taskId = iter.next();
int taskId = iter.next();
cancelFaviconLoad(taskId);
}
}

Просмотреть файл

@ -26,6 +26,7 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Class representing the asynchronous task to load a Favicon which is not currently in the in-memory
@ -39,8 +40,8 @@ public class LoadFaviconTask extends UiAsyncTask<Void, Void, Bitmap> {
public static final int FLAG_PERSIST = 1;
public static final int FLAG_SCALE = 2;
private long mNextFaviconLoadId;
private long mId;
private static AtomicInteger mNextFaviconLoadId = new AtomicInteger(0);
private int mId;
private String mPageUrl;
private String mFaviconUrl;
private OnFaviconLoadedListener mListener;
@ -53,9 +54,7 @@ public class LoadFaviconTask extends UiAsyncTask<Void, Void, Bitmap> {
OnFaviconLoadedListener aListener) {
super(backgroundThreadHandler);
synchronized(this) {
mId = ++mNextFaviconLoadId;
}
mId = mNextFaviconLoadId.incrementAndGet();
mPageUrl = aPageUrl;
mFaviconUrl = aFaviconUrl;
@ -201,7 +200,7 @@ public class LoadFaviconTask extends UiAsyncTask<Void, Void, Bitmap> {
// favicon load is cancelled.
}
long getId() {
int getId() {
return mId;
}