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

Unified Diff: ui/android/delegated_frame_host_android.cc

Issue 2302023003: Set content opacity of DFHAndroid surfacelayer based on renderer frame contents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: modify background color Created 4 years, 3 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
Index: ui/android/delegated_frame_host_android.cc
diff --git a/ui/android/delegated_frame_host_android.cc b/ui/android/delegated_frame_host_android.cc
index 1e821c4738aa1820e6b443a8b8a4829475d12759..59584b4579e1082e9c054b0a2f9deb32c3c047fb 100644
--- a/ui/android/delegated_frame_host_android.cc
+++ b/ui/android/delegated_frame_host_android.cc
@@ -45,7 +45,8 @@ void RequireCallback(cc::SurfaceManager* manager,
scoped_refptr<cc::SurfaceLayer> CreateSurfaceLayer(
cc::SurfaceManager* surface_manager,
cc::SurfaceId surface_id,
- const gfx::Size surface_size) {
+ const gfx::Size surface_size,
+ bool surface_opaque) {
// manager must outlive compositors using it.
scoped_refptr<cc::SurfaceLayer> layer = cc::SurfaceLayer::Create(
base::Bind(&SatisfyCallback, base::Unretained(surface_manager)),
@@ -53,7 +54,7 @@ scoped_refptr<cc::SurfaceLayer> CreateSurfaceLayer(
layer->SetSurfaceId(surface_id, 1.f, surface_size);
layer->SetBounds(surface_size);
layer->SetIsDrawable(true);
- layer->SetContentsOpaque(true);
+ layer->SetContentsOpaque(surface_opaque);
return layer;
}
@@ -122,7 +123,9 @@ void DelegatedFrameHostAndroid::SubmitCompositorFrame(
frame.metadata.bottom_controls_height ||
current_frame_->bottom_controls_shown_ratio !=
frame.metadata.bottom_controls_shown_ratio ||
- current_frame_->viewport_selection != frame.metadata.selection) {
+ current_frame_->viewport_selection != frame.metadata.selection ||
+ current_frame_->has_transparent_background !=
+ root_pass->has_transparent_background) {
DestroyDelegatedContent();
DCHECK(!content_layer_);
DCHECK(!current_frame_);
@@ -139,11 +142,14 @@ void DelegatedFrameHostAndroid::SubmitCompositorFrame(
frame.metadata.bottom_controls_height;
current_frame_->bottom_controls_shown_ratio =
frame.metadata.bottom_controls_shown_ratio;
+ current_frame_->has_transparent_background =
+ root_pass->has_transparent_background;
current_frame_->viewport_selection = frame.metadata.selection;
content_layer_ =
CreateSurfaceLayer(surface_manager_, current_frame_->surface_id,
- current_frame_->surface_size);
+ current_frame_->surface_size,
+ !current_frame_->has_transparent_background);
view_->GetLayer()->AddChild(content_layer_);
UpdateBackgroundLayer();
}
@@ -165,7 +171,8 @@ void DelegatedFrameHostAndroid::RequestCopyOfSurface(
scoped_refptr<cc::Layer> readback_layer =
CreateSurfaceLayer(surface_manager_, current_frame_->surface_id,
- current_frame_->surface_size);
+ current_frame_->surface_size,
+ !current_frame_->has_transparent_background);
no sievers 2016/09/02 22:06:52 nit: maybe just make the readback layer always opa
readback_layer->SetHideLayerAndSubtree(true);
compositor->AttachLayerForReadback(readback_layer);
std::unique_ptr<cc::CopyOutputRequest> copy_output_request =
@@ -206,12 +213,6 @@ void DelegatedFrameHostAndroid::UpdateBackgroundColor(SkColor color) {
background_layer_->SetBackgroundColor(color);
}
-void DelegatedFrameHostAndroid::SetContentsOpaque(bool opaque) {
- if (!content_layer_)
- return;
- content_layer_->SetContentsOpaque(opaque);
-}
-
void DelegatedFrameHostAndroid::UpdateContainerSizeinDIP(
const gfx::Size& size_in_dip) {
container_size_in_dip_ = size_in_dip;

Powered by Google App Engine
This is Rietveld 408576698