summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwnwen <wnwen@chromium.org>2015-07-13 11:53:58 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-13 18:58:51 +0000
commitc67dc7b06600ad4ea44cfd350847d44866aa4b07 (patch)
tree0d4341b1df08f439d04b3b0ce18e581d0354e8b4
parentff7d3cd4dbe741461fe6f691cc8adea1da66848a (diff)
downloadchromium_src-c67dc7b06600ad4ea44cfd350847d44866aa4b07.zip
chromium_src-c67dc7b06600ad4ea44cfd350847d44866aa4b07.tar.gz
chromium_src-c67dc7b06600ad4ea44cfd350847d44866aa4b07.tar.bz2
Revert "Refactor TabContentManager to async create ThumbnailCache."
This reverts commit 5c291c869f931d80f0d916c732510b46c47c6ca5. BUG=500681 NOTRY=true NOPRESUBMIT=true Review URL: https://codereview.chromium.org/1223793007 Cr-Commit-Position: refs/heads/master@{#337855} (cherry picked from commit ef342b9c4ff55a6b827a72b9749ee54e33eeab86) Review URL: https://codereview.chromium.org/1231423004 Cr-Commit-Position: refs/branch-heads/2403@{#497} Cr-Branched-From: f54b8097a9c45ed4ad308133d49f05325d6c5070-refs/heads/master@{#330231}
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java138
-rw-r--r--chrome/browser/android/compositor/tab_content_manager.cc114
-rw-r--r--chrome/browser/android/compositor/tab_content_manager.h14
-rw-r--r--chrome/browser/android/thumbnail/thumbnail_cache.cc4
4 files changed, 99 insertions, 171 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
index e2c7200..4abd5e8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.compositor.layouts.content;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.os.AsyncTask;
import android.util.SparseArray;
import android.view.View;
@@ -25,7 +24,6 @@ import org.chromium.ui.base.DeviceFormFactor;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.ExecutionException;
/**
* The TabContentManager is responsible for serving tab contents to the UI components. Contents
@@ -35,11 +33,10 @@ import java.util.concurrent.ExecutionException;
public class TabContentManager {
private static final String THUMBNAIL_DIRECTORY = "textures";
private final Context mContext;
+ private final File mThumbnailsDir;
+ private final float mThumbnailScale;
+ private final int mFullResThumbnailsMaxSize;
private final ContentOffsetProvider mContentOffsetProvider;
-
- private File mThumbnailsDir;
- private float mThumbnailScale;
- private int mFullResThumbnailsMaxSize;
private int[] mPriorityTabIds;
private long mNativeTabContentManager;
@@ -60,7 +57,6 @@ public class TabContentManager {
new SparseArray<TabContentManager.DecompressThumbnailCallback>();
private boolean mSnapshotsEnabled;
- private AsyncTask<Void, Void, Long> mNativeThumbnailCacheInitTask;
/**
* The Java interface for listening to thumbnail changes.
@@ -100,72 +96,48 @@ public class TabContentManager {
mContentOffsetProvider = contentOffsetProvider;
mSnapshotsEnabled = snapshotsEnabled;
- mNativeTabContentManager = nativeInit();
- startThumbnailCacheInitTask();
- }
-
- /**
- *
- */
- private void startThumbnailCacheInitTask() {
- mNativeThumbnailCacheInitTask = new AsyncTask<Void, Void, Long>() {
- @Override
- protected Long doInBackground(Void... unused) {
- mThumbnailsDir = mContext.getDir(THUMBNAIL_DIRECTORY, Context.MODE_PRIVATE);
- String diskCachePath = mThumbnailsDir.getAbsolutePath();
-
- // Override the cache size on the command line with --thumbnails=100
- int defaultCacheSize = getIntegerResourceWithOverride(mContext,
- R.integer.default_thumbnail_cache_size, ChromeSwitches.THUMBNAILS);
-
- mFullResThumbnailsMaxSize = defaultCacheSize;
-
- int compressionQueueMaxSize = mContext.getResources().getInteger(
- R.integer.default_compression_queue_size);
- int writeQueueMaxSize = mContext.getResources().getInteger(
- R.integer.default_write_queue_size);
-
- // Override the cache size on the command line with
- // --approximation-thumbnails=100
- int approximationCacheSize = getIntegerResourceWithOverride(mContext,
- R.integer.default_approximation_thumbnail_cache_size,
- ChromeSwitches.APPROXIMATION_THUMBNAILS);
-
- float thumbnailScale = 1.f;
- boolean useApproximationThumbnails;
- float deviceDensity = mContext.getResources().getDisplayMetrics().density;
- if (DeviceFormFactor.isTablet(mContext)) {
- // Scale all tablets to MDPI.
- thumbnailScale = 1.f / deviceDensity;
- useApproximationThumbnails = false;
- } else {
- // For phones, reduce the amount of memory usage by capturing a lower-res
- // thumbnail for devices with resolution higher than HDPI (crbug.com/357740).
- if (deviceDensity > 1.5f) {
- thumbnailScale = 1.5f / deviceDensity;
- }
- useApproximationThumbnails = true;
- }
- mThumbnailScale = thumbnailScale;
-
- mPriorityTabIds = new int[mFullResThumbnailsMaxSize];
-
- return nativeCreateThumbnailCache(diskCachePath, defaultCacheSize,
- approximationCacheSize, compressionQueueMaxSize, writeQueueMaxSize,
- useApproximationThumbnails);
+ mThumbnailsDir = mContext.getDir(THUMBNAIL_DIRECTORY, Context.MODE_PRIVATE);
+ String diskCachePath = mThumbnailsDir.getAbsolutePath();
+
+ // Override the cache size on the command line with --thumbnails=100
+ int defaultCacheSize = getIntegerResourceWithOverride(mContext,
+ R.integer.default_thumbnail_cache_size, ChromeSwitches.THUMBNAILS);
+
+ mFullResThumbnailsMaxSize = defaultCacheSize;
+
+ int compressionQueueMaxSize = mContext.getResources().getInteger(
+ R.integer.default_compression_queue_size);
+ int writeQueueMaxSize = mContext.getResources().getInteger(
+ R.integer.default_write_queue_size);
+
+ // Override the cache size on the command line with
+ // --approximation-thumbnails=100
+ int approximationCacheSize = getIntegerResourceWithOverride(mContext,
+ R.integer.default_approximation_thumbnail_cache_size,
+ ChromeSwitches.APPROXIMATION_THUMBNAILS);
+
+ float thumbnailScale = 1.f;
+ boolean useApproximationThumbnails;
+ float deviceDensity = mContext.getResources().getDisplayMetrics().density;
+ if (DeviceFormFactor.isTablet(mContext)) {
+ // Scale all tablets to MDPI.
+ thumbnailScale = 1.f / deviceDensity;
+ useApproximationThumbnails = false;
+ } else {
+ // For phones, reduce the amount of memory usage by capturing a lower-res thumbnail for
+ // devices with resolution higher than HDPI (crbug.com/357740).
+ if (deviceDensity > 1.5f) {
+ thumbnailScale = 1.5f / deviceDensity;
}
+ useApproximationThumbnails = true;
+ }
+ mThumbnailScale = thumbnailScale;
- @Override
- protected void onPostExecute(Long resultThumbnailCache) {
- if (resultThumbnailCache != 0) {
- if (mNativeTabContentManager != 0) {
- nativeSetThumbnailCache(mNativeTabContentManager, resultThumbnailCache);
- } else {
- nativeDestroyThumbnailCache(resultThumbnailCache);
- }
- }
- }
- }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
+ mPriorityTabIds = new int[mFullResThumbnailsMaxSize];
+
+ mNativeTabContentManager = nativeInit(diskCachePath, defaultCacheSize,
+ approximationCacheSize, compressionQueueMaxSize, writeQueueMaxSize,
+ useApproximationThumbnails);
}
/**
@@ -179,16 +151,6 @@ public class TabContentManager {
}
@CalledByNative
- private long blockOnThumbnailCacheCreation() {
- try {
- return mNativeThumbnailCacheInitTask.get();
- } catch (InterruptedException e) {
- } catch (ExecutionException e) {
- }
- return 0;
- }
-
- @CalledByNative
private long getNativePtr() {
return mNativeTabContentManager;
}
@@ -369,10 +331,8 @@ public class TabContentManager {
* @param modelSelector The selector that answers whether a tab is currently present.
*/
public void cleanupPersistentData(TabModelSelector modelSelector) {
- if (mNativeTabContentManager == 0) return;
-
File[] files = mThumbnailsDir.listFiles();
- if (files == null) return;
+ if (files == null || mNativeTabContentManager == 0) return;
for (File file : files) {
try {
@@ -405,13 +365,9 @@ public class TabContentManager {
}
// Class Object Methods
- private native long nativeInit();
- private static native long nativeCreateThumbnailCache(String diskCachePath,
- int defaultCacheSize, int approximationCacheSize, int compressionQueueMaxSize,
- int writeQueueMaxSize, boolean useApproximationThumbnail);
- private static native void nativeDestroyThumbnailCache(long thumbnailCachePtr);
- private native void nativeSetThumbnailCache(long nativeTabContentManager,
- long thumbnailCachePtr);
+ private native long nativeInit(String diskCachePath, int defaultCacheSize,
+ int approximationCacheSize, int compressionQueueMaxSize, int writeQueueMaxSize,
+ boolean useApproximationThumbnail);
private native boolean nativeHasFullCachedThumbnail(long nativeTabContentManager, int tabId);
private native void nativeCacheTab(long nativeTabContentManager, Object tab,
Object contentViewCore, float thumbnailScale);
diff --git a/chrome/browser/android/compositor/tab_content_manager.cc b/chrome/browser/android/compositor/tab_content_manager.cc
index b038636..0340aac 100644
--- a/chrome/browser/android/compositor/tab_content_manager.cc
+++ b/chrome/browser/android/compositor/tab_content_manager.cc
@@ -128,14 +128,28 @@ TabContentManager* TabContentManager::FromJavaObject(jobject jobj) {
}
TabContentManager::TabContentManager(JNIEnv* env,
- jobject obj)
- : weak_java_tab_content_manager_(env, obj), weak_factory_(this) {}
+ jobject obj,
+ jstring disk_cache_path,
+ jint default_cache_size,
+ jint approximation_cache_size,
+ jint compression_queue_max_size,
+ jint write_queue_max_size,
+ jboolean use_approximation_thumbnail)
+ : weak_java_tab_content_manager_(env, obj), weak_factory_(this) {
+ std::string disk_cache_path_str =
+ base::android::ConvertJavaStringToUTF8(env, disk_cache_path);
+ thumbnail_cache_ = make_scoped_ptr(new ThumbnailCache(
+ disk_cache_path_str, (size_t)default_cache_size,
+ (size_t)approximation_cache_size, (size_t)compression_queue_max_size,
+ (size_t)write_queue_max_size, use_approximation_thumbnail));
+ thumbnail_cache_->AddThumbnailCacheObserver(this);
+}
TabContentManager::~TabContentManager() {
}
void TabContentManager::Destroy(JNIEnv* env, jobject obj) {
- GetThumbnailCache()->RemoveThumbnailCacheObserver(this);
+ thumbnail_cache_->RemoveThumbnailCacheObserver(this);
delete this;
}
@@ -149,7 +163,7 @@ void TabContentManager::SetUIResourceProvider(JNIEnv* env,
void TabContentManager::SetUIResourceProvider(
ui::UIResourceProvider* ui_resource_provider) {
- GetThumbnailCache()->SetUIResourceProvider(ui_resource_provider);
+ thumbnail_cache_->SetUIResourceProvider(ui_resource_provider);
}
scoped_refptr<cc::Layer> TabContentManager::GetLiveLayer(int tab_id) {
@@ -163,8 +177,7 @@ scoped_refptr<cc::Layer> TabContentManager::GetLiveLayer(int tab_id) {
scoped_refptr<ThumbnailLayer> TabContentManager::GetStaticLayer(
int tab_id,
bool force_disk_read) {
- Thumbnail* thumbnail =
- GetThumbnailCache()->Get(tab_id, force_disk_read, true);
+ Thumbnail* thumbnail = thumbnail_cache_->Get(tab_id, force_disk_read, true);
scoped_refptr<ThumbnailLayer> static_layer = static_layer_cache_[tab_id];
if (!thumbnail || !thumbnail->ui_resource_id()) {
@@ -224,25 +237,10 @@ void TabContentManager::OnFinishDecompressThumbnail(int tab_id,
java_bitmap.obj());
}
-void TabContentManager::SetThumbnailCache(
- JNIEnv* env,
- jobject obj,
- jlong thumbnail_cache_ptr) {
- ThumbnailCache* cache =
- reinterpret_cast<ThumbnailCache*>(thumbnail_cache_ptr);
- // It is okay to call this twice with the same cache pointer, but we should
- // only set and add the observer once.
- DCHECK(!thumbnail_cache_ || thumbnail_cache_.get() == cache);
- if (!thumbnail_cache_) {
- thumbnail_cache_ = make_scoped_ptr(cache);
- thumbnail_cache_->AddThumbnailCacheObserver(this);
- }
-}
-
jboolean TabContentManager::HasFullCachedThumbnail(JNIEnv* env,
jobject obj,
jint tab_id) {
- return GetThumbnailCache()->Get(tab_id, false, false) != nullptr;
+ return thumbnail_cache_->Get(tab_id, false, false) != nullptr;
}
void TabContentManager::CacheTab(JNIEnv* env,
@@ -259,14 +257,14 @@ void TabContentManager::CacheTab(JNIEnv* env,
content::ContentViewCore::GetNativeContentViewCore(env,
content_view_core);
- if (GetThumbnailCache()->CheckAndUpdateThumbnailMetaData(tab_id, url)) {
+ if (thumbnail_cache_->CheckAndUpdateThumbnailMetaData(tab_id, url)) {
if (!view ||
!view->GetWebContents()
->GetRenderViewHost()
->CanCopyFromBackingStore() ||
pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end() ||
pending_tab_readbacks_.size() >= kMaxReadbacks) {
- GetThumbnailCache()->Remove(tab_id);
+ thumbnail_cache_->Remove(tab_id);
return;
}
@@ -295,7 +293,7 @@ void TabContentManager::CacheTabWithBitmap(JNIEnv* env,
SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(java_bitmap_lock);
skbitmap.setImmutable();
- if (GetThumbnailCache()->CheckAndUpdateThumbnailMetaData(tab_id, url))
+ if (thumbnail_cache_->CheckAndUpdateThumbnailMetaData(tab_id, url))
PutThumbnailIntoCache(tab_id, thumbnail_scale, skbitmap);
}
@@ -303,7 +301,7 @@ void TabContentManager::InvalidateIfChanged(JNIEnv* env,
jobject obj,
jint tab_id,
jstring jurl) {
- GetThumbnailCache()->InvalidateThumbnailIfChanged(
+ thumbnail_cache_->InvalidateThumbnailIfChanged(
tab_id, GURL(base::android::ConvertJavaStringToUTF8(env, jurl)));
}
@@ -317,7 +315,7 @@ void TabContentManager::UpdateVisibleIds(JNIEnv* env,
priority_ids.push_back(static_cast<int>(ints[i]));
env->ReleaseIntArrayElements(priority, ints, JNI_ABORT);
- GetThumbnailCache()->UpdateVisibleIds(priority_ids);
+ thumbnail_cache_->UpdateVisibleIds(priority_ids);
}
void TabContentManager::RemoveTabThumbnail(JNIEnv* env,
@@ -327,14 +325,14 @@ void TabContentManager::RemoveTabThumbnail(JNIEnv* env,
pending_tab_readbacks_.find(tab_id);
if (readback_iter != pending_tab_readbacks_.end())
readback_iter->second->SetToDropAfterReadback();
- GetThumbnailCache()->Remove(tab_id);
+ thumbnail_cache_->Remove(tab_id);
}
void TabContentManager::RemoveTabThumbnailFromDiskAtAndAboveId(
JNIEnv* env,
jobject obj,
jint min_forbidden_id) {
- GetThumbnailCache()->RemoveFromDiskAtAndAboveId(min_forbidden_id);
+ thumbnail_cache_->RemoveFromDiskAtAndAboveId(min_forbidden_id);
}
void TabContentManager::GetDecompressedThumbnail(JNIEnv* env,
@@ -343,8 +341,8 @@ void TabContentManager::GetDecompressedThumbnail(JNIEnv* env,
base::Callback<void(bool, SkBitmap)> decompress_done_callback =
base::Bind(&TabContentManager::OnFinishDecompressThumbnail,
weak_factory_.GetWeakPtr(), reinterpret_cast<int>(tab_id));
- GetThumbnailCache()->DecompressThumbnailFromFile(
- reinterpret_cast<int>(tab_id), decompress_done_callback);
+ thumbnail_cache_->DecompressThumbnailFromFile(reinterpret_cast<int>(tab_id),
+ decompress_done_callback);
}
void TabContentManager::OnFinishedThumbnailRead(int tab_id) {
@@ -353,22 +351,6 @@ void TabContentManager::OnFinishedThumbnailRead(int tab_id) {
env, weak_java_tab_content_manager_.get(env).obj(), tab_id);
}
-ThumbnailCache* TabContentManager::GetThumbnailCache() {
- if (thumbnail_cache_ == nullptr) {
- JNIEnv* env = base::android::AttachCurrentThread();
-
- jlong thumbnail_cache_ptr =
- Java_TabContentManager_blockOnThumbnailCacheCreation(
- env, weak_java_tab_content_manager_.get(env).obj());
- DCHECK(thumbnail_cache_ptr != 0);
- SetThumbnailCache(env,
- weak_java_tab_content_manager_.get(env).obj(),
- thumbnail_cache_ptr);
- }
- DCHECK(thumbnail_cache_ != nullptr);
- return thumbnail_cache_.get();
-}
-
void TabContentManager::PutThumbnailIntoCache(int tab_id,
float thumbnail_scale,
const SkBitmap& bitmap) {
@@ -379,7 +361,7 @@ void TabContentManager::PutThumbnailIntoCache(int tab_id,
pending_tab_readbacks_.erase(tab_id);
if (thumbnail_scale > 0 && !bitmap.empty())
- GetThumbnailCache()->Put(tab_id, bitmap, thumbnail_scale);
+ thumbnail_cache_->Put(tab_id, bitmap, thumbnail_scale);
}
bool RegisterTabContentManager(JNIEnv* env) {
@@ -390,32 +372,20 @@ bool RegisterTabContentManager(JNIEnv* env) {
// Native JNI methods
// ----------------------------------------------------------------------------
-jlong Init(JNIEnv* env, jobject obj) {
- TabContentManager* manager = new TabContentManager(env, obj);
+jlong Init(JNIEnv* env,
+ jobject obj,
+ jstring disk_cache_path,
+ jint default_cache_size,
+ jint approximation_cache_size,
+ jint compression_queue_max_size,
+ jint write_queue_max_size,
+ jboolean use_approximation_thumbnail) {
+ TabContentManager* manager = new TabContentManager(
+ env, obj, disk_cache_path, default_cache_size, approximation_cache_size,
+ compression_queue_max_size, write_queue_max_size,
+ use_approximation_thumbnail);
return reinterpret_cast<intptr_t>(manager);
}
-jlong CreateThumbnailCache(JNIEnv* env,
- jclass caller,
- jstring disk_cache_path,
- jint default_cache_size,
- jint approximation_cache_size,
- jint compression_queue_max_size,
- jint write_queue_max_size,
- jboolean use_approximation_thumbnail) {
- std::string disk_cache_path_str =
- base::android::ConvertJavaStringToUTF8(env, disk_cache_path);
- return reinterpret_cast<intptr_t>(new ThumbnailCache(
- disk_cache_path_str, (size_t)default_cache_size,
- (size_t)approximation_cache_size, (size_t)compression_queue_max_size,
- (size_t)write_queue_max_size, use_approximation_thumbnail));
-}
-
-void DestroyThumbnailCache(JNIEnv* env,
- jclass caller,
- jlong thumbnail_cache_ptr) {
- delete reinterpret_cast<ThumbnailCache*>(thumbnail_cache_ptr);
-}
-
} // namespace android
} // namespace chrome
diff --git a/chrome/browser/android/compositor/tab_content_manager.h b/chrome/browser/android/compositor/tab_content_manager.h
index efb112a..df4f897 100644
--- a/chrome/browser/android/compositor/tab_content_manager.h
+++ b/chrome/browser/android/compositor/tab_content_manager.h
@@ -37,7 +37,13 @@ class TabContentManager : public ThumbnailCacheObserver {
static TabContentManager* FromJavaObject(jobject jobj);
TabContentManager(JNIEnv* env,
- jobject obj);
+ jobject obj,
+ jstring disk_cache_path,
+ jint default_cache_size,
+ jint approximation_cache_size,
+ jint compression_queue_max_size,
+ jint write_queue_max_size,
+ jboolean use_approximation_thumbnail);
virtual ~TabContentManager();
@@ -67,9 +73,6 @@ class TabContentManager : public ThumbnailCacheObserver {
// Callback for when the thumbnail decompression for tab_id is done.
void OnFinishDecompressThumbnail(int tab_id, bool success, SkBitmap bitmap);
// JNI methods.
- void SetThumbnailCache(JNIEnv* env,
- jobject obj,
- jlong thumbnail_cache_ptr);
jboolean HasFullCachedThumbnail(JNIEnv* env, jobject obj, jint tab_id);
void CacheTab(JNIEnv* env,
jobject obj,
@@ -103,10 +106,7 @@ class TabContentManager : public ThumbnailCacheObserver {
float thumbnail_scale,
const SkBitmap& bitmap);
- // Do not access directly as it may not be initialized yet, use the getter.
scoped_ptr<ThumbnailCache> thumbnail_cache_;
- ThumbnailCache* GetThumbnailCache();
-
ThumbnailLayerMap static_layer_cache_;
LayerMap live_layer_list_;
TabReadbackRequestMap pending_tab_readbacks_;
diff --git a/chrome/browser/android/thumbnail/thumbnail_cache.cc b/chrome/browser/android/thumbnail/thumbnail_cache.cc
index b9c403b..130385d 100644
--- a/chrome/browser/android/thumbnail/thumbnail_cache.cc
+++ b/chrome/browser/android/thumbnail/thumbnail_cache.cc
@@ -127,7 +127,9 @@ ThumbnailCache::ThumbnailCache(const std::string& disk_cache_path_str,
cache_(default_cache_size),
approximation_cache_(approximation_cache_size),
ui_resource_provider_(NULL),
- weak_factory_(this) {}
+ weak_factory_(this) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+}
ThumbnailCache::~ThumbnailCache() {
SetUIResourceProvider(NULL);