1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_TAB_CONTENT_MANAGER_H_
#define CHROME_BROWSER_ANDROID_COMPOSITOR_TAB_CONTENT_MANAGER_H_
#include <jni.h>
#include "base/android/jni_android.h"
#include "base/android/jni_weak_ref.h"
#include "base/containers/hash_tables.h"
#include "base/containers/scoped_ptr_hash_map.h"
#include "base/memory/weak_ptr.h"
#include "cc/layers/ui_resource_layer.h"
#include "chrome/browser/android/thumbnail/thumbnail_store.h"
using base::android::ScopedJavaLocalRef;
namespace cc {
class CopyOutputResult;
class Layer;
}
namespace ui {
class UIResourceProvider;
}
namespace chrome {
namespace android {
class ThumbnailLayer;
// A native component of the Java TabContentManager class.
class TabContentManager : public ThumbnailStoreObserver {
public:
static TabContentManager* FromJavaObject(jobject jobj);
TabContentManager(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);
virtual ~TabContentManager();
void Destroy(JNIEnv* env, jobject obj);
void SetUIResourceProvider(JNIEnv* env,
jobject obj,
jlong ui_resource_provider_ptr);
void SetUIResourceProvider(ui::UIResourceProvider* ui_resource_provider);
// Get the live layer from the cache.
scoped_refptr<cc::Layer> GetLiveLayer(int tab_id);
// Get the static thumbnail from the cache, or the NTP.
scoped_refptr<ThumbnailLayer> GetStaticLayer(int tab_id,
bool force_disk_read);
// Should be called when a tab gets a new live layer that should be served
// by the cache to the CompositorView.
void AttachLiveLayer(int tab_id, scoped_refptr<cc::Layer> layer);
// Should be called when a tab removes a live layer because it should no
// longer be served by the CompositorView. If |layer| is NULL, will
// make sure all live layers are detached.
void DetachLiveLayer(int tab_id, scoped_refptr<cc::Layer> layer);
// Callback for when the thumbnail decompression for tab_id is done.
void OnFinishDecompressThumbnail(int tab_id, bool success, SkBitmap bitmap);
// JNI methods.
jboolean HasFullCachedThumbnail(JNIEnv* env, jobject obj, jint tab_id);
void CacheTab(JNIEnv* env,
jobject obj,
jobject tab,
jobject content_view_core,
jfloat thumbnail_scale);
void CacheTabWithBitmap(JNIEnv* env,
jobject obj,
jobject tab,
jobject bitmap,
jfloat thumbnail_scale);
void InvalidateIfChanged(JNIEnv* env, jobject obj, jint tab_id, jstring jurl);
void UpdateVisibleIds(JNIEnv* env, jobject obj, jintArray priority);
void RemoveTabThumbnail(JNIEnv* env, jobject obj, jint tab_id);
void RemoveTabThumbnailFromDiskAtAndAboveId(JNIEnv* env,
jobject obj,
jint min_forbidden_id);
void GetDecompressedThumbnail(JNIEnv* env, jobject obj, jint tab_id);
// ThumbnailStoreObserver implementation;
void OnFinishedThumbnailRead(TabId tab_id) override;
private:
class TabReadbackRequest;
typedef base::hash_map<int, scoped_refptr<cc::Layer>> LayerMap;
typedef base::hash_map<int, scoped_refptr<ThumbnailLayer>> ThumbnailLayerMap;
typedef base::ScopedPtrHashMap<int, TabReadbackRequest> TabReadbackRequestMap;
// TODO(): The upstream ThumbnailCache class was temporarily renamed to
// ThumbnailStore to avoid conflict with downstream. Please rename the
// upstream to ThumbnailCache once the downstream is in a good state.
typedef ThumbnailStore ThumbnailCache;
void PutThumbnailIntoCache(int tab_id,
float thumbnail_scale,
const SkBitmap& bitmap);
scoped_ptr<ThumbnailCache> thumbnail_cache_;
ThumbnailLayerMap static_layer_cache_;
LayerMap live_layer_list_;
TabReadbackRequestMap pending_tab_readbacks_;
base::WeakPtrFactory<TabContentManager> weak_factory_;
JavaObjectWeakGlobalRef weak_java_tab_content_manager_;
DISALLOW_COPY_AND_ASSIGN(TabContentManager);
};
bool RegisterTabContentManager(JNIEnv* env);
} // namespace android
} // namespace chrome
#endif // CHROME_BROWSER_ANDROID_COMPOSITOR_TAB_CONTENT_MANAGER_H_
|