diff options
author | wnwen <wnwen@chromium.org> | 2015-07-13 11:53:58 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-13 18:58:51 +0000 |
commit | c67dc7b06600ad4ea44cfd350847d44866aa4b07 (patch) | |
tree | 0d4341b1df08f439d04b3b0ce18e581d0354e8b4 | |
parent | ff7d3cd4dbe741461fe6f691cc8adea1da66848a (diff) | |
download | chromium_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}
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); |