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

Unified Diff: chrome/browser/android/compositor/tab_content_manager.cc

Issue 2702093002: Consistent CopyFromSurface() API, consolidated to RWHV (Closed)
Patch Set: REBASE Created 3 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/browser/extensions/api/tabs/tabs_api.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/android/compositor/tab_content_manager.cc
diff --git a/chrome/browser/android/compositor/tab_content_manager.cc b/chrome/browser/android/compositor/tab_content_manager.cc
index fe401012796e087e13a7608df8cfa11dfb8f9bd0..654e72135ffc5d4f7f524b8aaea1528a08319d2a 100644
--- a/chrome/browser/android/compositor/tab_content_manager.cc
+++ b/chrome/browser/android/compositor/tab_content_manager.cc
@@ -47,23 +47,24 @@ namespace android {
class TabContentManager::TabReadbackRequest {
public:
- TabReadbackRequest(content::RenderWidgetHost* rwh,
+ TabReadbackRequest(content::RenderWidgetHostView* rwhv,
float thumbnail_scale,
const TabReadbackCallback& end_callback)
: thumbnail_scale_(thumbnail_scale),
end_callback_(end_callback),
drop_after_readback_(false),
weak_factory_(this) {
- DCHECK(rwh);
+ DCHECK(rwhv);
content::ReadbackRequestCallback result_callback =
base::Bind(&TabReadbackRequest::OnFinishGetTabThumbnailBitmap,
weak_factory_.GetWeakPtr());
SkColorType color_type = kN32_SkColorType;
- gfx::Rect src_rect = rwh->GetView()->GetViewBounds();
- gfx::Size dst_size(
- gfx::ScaleToCeiledSize(src_rect.size(), thumbnail_scale_));
- rwh->CopyFromBackingStore(src_rect, dst_size, result_callback, color_type);
+ gfx::Size view_size_on_screen = rwhv->GetViewBounds().size();
+ gfx::Size thumbnail_size(
+ gfx::ScaleToCeiledSize(view_size_on_screen, thumbnail_scale_));
+ rwhv->CopyFromSurface(gfx::Rect(), thumbnail_size, result_callback,
+ color_type);
}
virtual ~TabReadbackRequest() {}
@@ -213,8 +214,11 @@ void TabContentManager::CacheTab(JNIEnv* env,
jfloat thumbnail_scale) {
TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
DCHECK(tab_android);
- int tab_id = tab_android->GetAndroidId();
- GURL url = tab_android->GetURL();
+ const int tab_id = tab_android->GetAndroidId();
+ if (pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end() ||
+ pending_tab_readbacks_.size() >= kMaxReadbacks) {
+ return;
+ }
content::WebContents* web_contents = tab_android->web_contents();
DCHECK(web_contents);
@@ -227,20 +231,21 @@ void TabContentManager::CacheTab(JNIEnv* env,
rvh = web_contents->GetInterstitialPage()->GetMainFrame()->
GetRenderViewHost();
}
+ if (!rvh)
+ return;
- if (!rvh || !rvh->GetWidget() ||
- !rvh->GetWidget()->CanCopyFromBackingStore() ||
- pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end() ||
- pending_tab_readbacks_.size() >= kMaxReadbacks) {
+ content::RenderWidgetHost* rwh = rvh->GetWidget();
+ content::RenderWidgetHostView* rwhv = rwh ? rwh->GetView() : nullptr;
+ if (!rwhv || !rwhv->IsSurfaceAvailableForCopy())
return;
- }
- if (thumbnail_cache_->CheckAndUpdateThumbnailMetaData(tab_id, url)) {
+ if (thumbnail_cache_->CheckAndUpdateThumbnailMetaData(
+ tab_id, tab_android->GetURL())) {
TabReadbackCallback readback_done_callback =
base::Bind(&TabContentManager::PutThumbnailIntoCache,
weak_factory_.GetWeakPtr(), tab_id);
pending_tab_readbacks_[tab_id] = base::MakeUnique<TabReadbackRequest>(
- rvh->GetWidget(), thumbnail_scale, readback_done_callback);
+ rwhv, thumbnail_scale, readback_done_callback);
}
}
« 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