Chromium Code Reviews| Index: cc/layers/surface_layer.cc |
| diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc |
| index 573f97b9b13280a3c9f5806052f0c7d81e52bd74..c8548813fa215fafbdd94c43db879b2b6903ee0f 100644 |
| --- a/cc/layers/surface_layer.cc |
| +++ b/cc/layers/surface_layer.cc |
| @@ -63,12 +63,27 @@ SurfaceLayer::~SurfaceLayer() { |
| DCHECK(!layer_tree_host()); |
| } |
| +void SurfaceLayer::AddSurfaceId(const SurfaceInfo& surface_info) { |
| + DCHECK(layer_tree_host()); |
| + if (surface_info.is_valid()) |
| + layer_tree_host()->AddSurfaceLayerId(surface_info.id()); |
| +} |
| + |
| +void SurfaceLayer::RemoveSurfaceId(const SurfaceInfo& surface_info) { |
| + DCHECK(layer_tree_host()); |
| + if (surface_info.is_valid()) |
| + layer_tree_host()->RemoveSurfaceLayerId(surface_info.id()); |
| +} |
| + |
| void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) { |
| RemoveReference(std::move(primary_reference_returner_)); |
| + if (layer_tree_host()) |
| + RemoveSurfaceId(primary_surface_info_); |
| primary_surface_info_ = surface_info; |
| if (layer_tree_host()) { |
| primary_reference_returner_ = ref_factory_->CreateReference( |
| layer_tree_host(), primary_surface_info_.id()); |
| + AddSurfaceId(primary_surface_info_); |
| } |
| UpdateDrawsContent(HasDrawableContent()); |
| SetNeedsCommit(); |
| @@ -76,10 +91,13 @@ void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) { |
| void SurfaceLayer::SetFallbackSurfaceInfo(const SurfaceInfo& surface_info) { |
| RemoveReference(std::move(fallback_reference_returner_)); |
| + if (layer_tree_host()) |
| + RemoveSurfaceId(fallback_surface_info_); |
| fallback_surface_info_ = surface_info; |
| if (layer_tree_host()) { |
| fallback_reference_returner_ = ref_factory_->CreateReference( |
| layer_tree_host(), fallback_surface_info_.id()); |
| + AddSurfaceId(fallback_surface_info_); |
| } |
| SetNeedsCommit(); |
| } |
| @@ -104,6 +122,11 @@ void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { |
| Layer::SetLayerTreeHost(host); |
| return; |
| } |
| + |
| + if (layer_tree_host()) { |
| + RemoveSurfaceId(primary_surface_info_); |
| + RemoveSurfaceId(fallback_surface_info_); |
|
Fady Samuel
2017/05/24 22:31:14
This breaks surface synchronization and surface re
jaydasika
2017/05/24 22:43:03
I did not understand how removing surface ids from
|
| + } |
| RemoveReference(std::move(primary_reference_returner_)); |
| RemoveReference(std::move(fallback_reference_returner_)); |
| Layer::SetLayerTreeHost(host); |
| @@ -116,6 +139,8 @@ void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { |
| fallback_reference_returner_ = ref_factory_->CreateReference( |
| layer_tree_host(), fallback_surface_info_.id()); |
| } |
| + AddSurfaceId(primary_surface_info_); |
| + AddSurfaceId(fallback_surface_info_); |
| } |
| } |