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

Side by Side Diff: chrome/browser/android/compositor/tab_content_manager.cc

Issue 2702093002: Consistent CopyFromSurface() API, consolidated to RWHV (Closed)
Patch Set: REBASE Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/extensions/api/tabs/tabs_api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/compositor/tab_content_manager.h" 5 #include "chrome/browser/android/compositor/tab_content_manager.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 29 matching lines...) Expand all
40 40
41 const size_t kMaxReadbacks = 1; 41 const size_t kMaxReadbacks = 1;
42 typedef base::Callback<void(float, const SkBitmap&)> TabReadbackCallback; 42 typedef base::Callback<void(float, const SkBitmap&)> TabReadbackCallback;
43 43
44 } // namespace 44 } // namespace
45 45
46 namespace android { 46 namespace android {
47 47
48 class TabContentManager::TabReadbackRequest { 48 class TabContentManager::TabReadbackRequest {
49 public: 49 public:
50 TabReadbackRequest(content::RenderWidgetHost* rwh, 50 TabReadbackRequest(content::RenderWidgetHostView* rwhv,
51 float thumbnail_scale, 51 float thumbnail_scale,
52 const TabReadbackCallback& end_callback) 52 const TabReadbackCallback& end_callback)
53 : thumbnail_scale_(thumbnail_scale), 53 : thumbnail_scale_(thumbnail_scale),
54 end_callback_(end_callback), 54 end_callback_(end_callback),
55 drop_after_readback_(false), 55 drop_after_readback_(false),
56 weak_factory_(this) { 56 weak_factory_(this) {
57 DCHECK(rwh); 57 DCHECK(rwhv);
58 content::ReadbackRequestCallback result_callback = 58 content::ReadbackRequestCallback result_callback =
59 base::Bind(&TabReadbackRequest::OnFinishGetTabThumbnailBitmap, 59 base::Bind(&TabReadbackRequest::OnFinishGetTabThumbnailBitmap,
60 weak_factory_.GetWeakPtr()); 60 weak_factory_.GetWeakPtr());
61 61
62 SkColorType color_type = kN32_SkColorType; 62 SkColorType color_type = kN32_SkColorType;
63 gfx::Rect src_rect = rwh->GetView()->GetViewBounds(); 63 gfx::Size view_size_on_screen = rwhv->GetViewBounds().size();
64 gfx::Size dst_size( 64 gfx::Size thumbnail_size(
65 gfx::ScaleToCeiledSize(src_rect.size(), thumbnail_scale_)); 65 gfx::ScaleToCeiledSize(view_size_on_screen, thumbnail_scale_));
66 rwh->CopyFromBackingStore(src_rect, dst_size, result_callback, color_type); 66 rwhv->CopyFromSurface(gfx::Rect(), thumbnail_size, result_callback,
67 color_type);
67 } 68 }
68 69
69 virtual ~TabReadbackRequest() {} 70 virtual ~TabReadbackRequest() {}
70 71
71 void OnFinishGetTabThumbnailBitmap(const SkBitmap& bitmap, 72 void OnFinishGetTabThumbnailBitmap(const SkBitmap& bitmap,
72 content::ReadbackResponse response) { 73 content::ReadbackResponse response) {
73 if (response != content::READBACK_SUCCESS || drop_after_readback_) { 74 if (response != content::READBACK_SUCCESS || drop_after_readback_) {
74 end_callback_.Run(0.f, SkBitmap()); 75 end_callback_.Run(0.f, SkBitmap());
75 return; 76 return;
76 } 77 }
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 jint tab_id) { 207 jint tab_id) {
207 return thumbnail_cache_->Get(tab_id, false, false) != nullptr; 208 return thumbnail_cache_->Get(tab_id, false, false) != nullptr;
208 } 209 }
209 210
210 void TabContentManager::CacheTab(JNIEnv* env, 211 void TabContentManager::CacheTab(JNIEnv* env,
211 const JavaParamRef<jobject>& obj, 212 const JavaParamRef<jobject>& obj,
212 const JavaParamRef<jobject>& tab, 213 const JavaParamRef<jobject>& tab,
213 jfloat thumbnail_scale) { 214 jfloat thumbnail_scale) {
214 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab); 215 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
215 DCHECK(tab_android); 216 DCHECK(tab_android);
216 int tab_id = tab_android->GetAndroidId(); 217 const int tab_id = tab_android->GetAndroidId();
217 GURL url = tab_android->GetURL(); 218 if (pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end() ||
219 pending_tab_readbacks_.size() >= kMaxReadbacks) {
220 return;
221 }
218 222
219 content::WebContents* web_contents = tab_android->web_contents(); 223 content::WebContents* web_contents = tab_android->web_contents();
220 DCHECK(web_contents); 224 DCHECK(web_contents);
221 225
222 content::RenderViewHost* rvh = web_contents->GetRenderViewHost(); 226 content::RenderViewHost* rvh = web_contents->GetRenderViewHost();
223 if (web_contents->ShowingInterstitialPage()) { 227 if (web_contents->ShowingInterstitialPage()) {
224 if (!web_contents->GetInterstitialPage()->GetMainFrame()) 228 if (!web_contents->GetInterstitialPage()->GetMainFrame())
225 return; 229 return;
226 230
227 rvh = web_contents->GetInterstitialPage()->GetMainFrame()-> 231 rvh = web_contents->GetInterstitialPage()->GetMainFrame()->
228 GetRenderViewHost(); 232 GetRenderViewHost();
229 } 233 }
234 if (!rvh)
235 return;
230 236
231 if (!rvh || !rvh->GetWidget() || 237 content::RenderWidgetHost* rwh = rvh->GetWidget();
232 !rvh->GetWidget()->CanCopyFromBackingStore() || 238 content::RenderWidgetHostView* rwhv = rwh ? rwh->GetView() : nullptr;
233 pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end() || 239 if (!rwhv || !rwhv->IsSurfaceAvailableForCopy())
234 pending_tab_readbacks_.size() >= kMaxReadbacks) {
235 return; 240 return;
236 }
237 241
238 if (thumbnail_cache_->CheckAndUpdateThumbnailMetaData(tab_id, url)) { 242 if (thumbnail_cache_->CheckAndUpdateThumbnailMetaData(
243 tab_id, tab_android->GetURL())) {
239 TabReadbackCallback readback_done_callback = 244 TabReadbackCallback readback_done_callback =
240 base::Bind(&TabContentManager::PutThumbnailIntoCache, 245 base::Bind(&TabContentManager::PutThumbnailIntoCache,
241 weak_factory_.GetWeakPtr(), tab_id); 246 weak_factory_.GetWeakPtr(), tab_id);
242 pending_tab_readbacks_[tab_id] = base::MakeUnique<TabReadbackRequest>( 247 pending_tab_readbacks_[tab_id] = base::MakeUnique<TabReadbackRequest>(
243 rvh->GetWidget(), thumbnail_scale, readback_done_callback); 248 rwhv, thumbnail_scale, readback_done_callback);
244 } 249 }
245 } 250 }
246 251
247 void TabContentManager::CacheTabWithBitmap(JNIEnv* env, 252 void TabContentManager::CacheTabWithBitmap(JNIEnv* env,
248 const JavaParamRef<jobject>& obj, 253 const JavaParamRef<jobject>& obj,
249 const JavaParamRef<jobject>& tab, 254 const JavaParamRef<jobject>& tab,
250 const JavaParamRef<jobject>& bitmap, 255 const JavaParamRef<jobject>& bitmap,
251 jfloat thumbnail_scale) { 256 jfloat thumbnail_scale) {
252 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab); 257 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
253 DCHECK(tab_android); 258 DCHECK(tab_android);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 jint write_queue_max_size, 349 jint write_queue_max_size,
345 jboolean use_approximation_thumbnail) { 350 jboolean use_approximation_thumbnail) {
346 TabContentManager* manager = new TabContentManager( 351 TabContentManager* manager = new TabContentManager(
347 env, obj, default_cache_size, approximation_cache_size, 352 env, obj, default_cache_size, approximation_cache_size,
348 compression_queue_max_size, write_queue_max_size, 353 compression_queue_max_size, write_queue_max_size,
349 use_approximation_thumbnail); 354 use_approximation_thumbnail);
350 return reinterpret_cast<intptr_t>(manager); 355 return reinterpret_cast<intptr_t>(manager);
351 } 356 }
352 357
353 } // namespace android 358 } // namespace android
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/tabs/tabs_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698