зеркало из https://github.com/mozilla/gecko-dev.git
Bug 888326 - Part 4: LoadFaviconTask's use mNextFaviconLoadId is now thread safe. (Use AtomicInteger instead of long.) r=mleibovic
This commit is contained in:
Родитель
0bbf8c342a
Коммит
dc3bf2ecb8
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче