Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4675)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksBridge.java

Issue 922943002: Let multiple EnhancedBookmarkModel share same java cache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed context as parameter Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModel.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksBridge.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksBridge.java
index b4940a34f439e87f2a8ecfbc362cebe67a1d6624..9024fbad0f105831d3866bb08fad25910f0eb656 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksBridge.java
@@ -4,10 +4,13 @@
package org.chromium.chrome.browser.enhanced_bookmarks;
+import android.app.ActivityManager;
+import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;
import android.util.Pair;
+import org.chromium.base.ApplicationStatus;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.base.ObserverList;
@@ -15,22 +18,24 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.content_public.browser.WebContents;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
/**
* Access gate to C++ side enhanced bookmarks functionalities.
*/
@JNINamespace("enhanced_bookmarks::android")
public final class EnhancedBookmarksBridge {
+ private static WeakReference<LruCache<String, Pair<String, Bitmap>>> sLruCache;
+ private static final int SALIENT_IMAGE_MAX_CACHE_SIZE = 32 * 1024 * 1024; // 32MB
+
private long mNativeEnhancedBookmarksBridge;
private final ObserverList<FiltersObserver> mFilterObservers =
new ObserverList<FiltersObserver>();
private final ObserverList<SearchServiceObserver> mSearchObservers =
new ObserverList<SearchServiceObserver>();
-
private LruCache<String, Pair<String, Bitmap>> mSalientImageCache;
/**
@@ -68,21 +73,12 @@ public final class EnhancedBookmarksBridge {
void onSearchResultsReturned();
}
- public EnhancedBookmarksBridge(Profile profile, int maxCacheSize) {
- this(profile);
- // Do not initialize LruCache if cache size is set to 0.
- if (maxCacheSize != 0) {
- mSalientImageCache = new LruCache<String, Pair<String, Bitmap>>(maxCacheSize) {
- @Override
- protected int sizeOf(String key, Pair<String, Bitmap> urlImage) {
- return urlImage.first.length() + urlImage.second.getByteCount();
- }
- };
- }
- }
-
+ /**
+ * Creates a new enhanced bridge using the given profile.
+ */
public EnhancedBookmarksBridge(Profile profile) {
mNativeEnhancedBookmarksBridge = nativeInit(profile);
+ mSalientImageCache = getImageCache();
}
public void destroy() {
@@ -90,13 +86,7 @@ public final class EnhancedBookmarksBridge {
nativeDestroy(mNativeEnhancedBookmarksBridge);
mNativeEnhancedBookmarksBridge = 0;
- if (mSalientImageCache != null) {
- for (Map.Entry<String, Pair<String, Bitmap>> entry :
- mSalientImageCache.snapshot().entrySet()) {
- entry.getValue().second.recycle();
- }
- mSalientImageCache.evictAll();
- }
+ mSalientImageCache = null;
}
/**
@@ -275,6 +265,28 @@ public final class EnhancedBookmarksBridge {
return list;
}
+ /**
+ * @return Return the cache if it is stored in the static weak reference, or create a new empty
+ * one if the reference is empty.
+ */
+ private static LruCache<String, Pair<String, Bitmap>> getImageCache() {
+ ActivityManager activityManager = ((ActivityManager) ApplicationStatus
+ .getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE));
+ int maxSize = Math.min(activityManager.getMemoryClass() / 4 * 1024 * 1024,
+ SALIENT_IMAGE_MAX_CACHE_SIZE);
+ LruCache<String, Pair<String, Bitmap>> cache = sLruCache == null ? null : sLruCache.get();
+ if (cache == null) {
+ cache = new LruCache<String, Pair<String, Bitmap>>(maxSize) {
+ @Override
+ protected int sizeOf(String key, Pair<String, Bitmap> urlImage) {
+ return urlImage.first.length() + urlImage.second.getByteCount();
+ }
+ };
+ sLruCache = new WeakReference<LruCache<String, Pair<String, Bitmap>>>(cache);
+ }
+ return cache;
+ }
+
@CalledByNative
private void onFiltersChanged() {
for (FiltersObserver observer : mFilterObservers) {
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModel.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698