Index: cc/layers/surface_layer.cc |
diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc |
index 573f97b9b13280a3c9f5806052f0c7d81e52bd74..e7b0c4da4e63f1d93cabc4c3f5593ee3fa5b64fd 100644 |
--- a/cc/layers/surface_layer.cc |
+++ b/cc/layers/surface_layer.cc |
@@ -63,23 +63,48 @@ SurfaceLayer::~SurfaceLayer() { |
DCHECK(!layer_tree_host()); |
} |
+static inline const SurfaceId* GetReferencedSurfaceId( |
+ const SurfaceInfo& surface_info) { |
+ return surface_info.is_valid() ? &surface_info.id() : nullptr; |
+} |
+ |
void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) { |
+ const SurfaceId* old_surface_id = |
+ GetReferencedSurfaceId(primary_surface_info_); |
RemoveReference(std::move(primary_reference_returner_)); |
primary_surface_info_ = surface_info; |
if (layer_tree_host()) { |
primary_reference_returner_ = ref_factory_->CreateReference( |
layer_tree_host(), primary_surface_info_.id()); |
+ const SurfaceId* new_surface_id = |
+ GetReferencedSurfaceId(primary_surface_info_); |
+ if (old_surface_id != new_surface_id) { |
enne (OOO)
2017/05/24 21:57:42
Hmm. This check is comparing pointers? Can you ha
jaydasika
2017/05/24 22:12:56
Done.
|
+ if (old_surface_id) |
+ layer_tree_host()->RemoveSurfaceLayerId(*old_surface_id); |
+ if (new_surface_id) |
+ layer_tree_host()->AddSurfaceLayerId(*new_surface_id); |
+ } |
} |
UpdateDrawsContent(HasDrawableContent()); |
SetNeedsCommit(); |
} |
void SurfaceLayer::SetFallbackSurfaceInfo(const SurfaceInfo& surface_info) { |
+ const SurfaceId* old_surface_id = |
+ GetReferencedSurfaceId(fallback_surface_info_); |
RemoveReference(std::move(fallback_reference_returner_)); |
fallback_surface_info_ = surface_info; |
if (layer_tree_host()) { |
fallback_reference_returner_ = ref_factory_->CreateReference( |
layer_tree_host(), fallback_surface_info_.id()); |
+ const SurfaceId* new_surface_id = |
+ GetReferencedSurfaceId(fallback_surface_info_); |
+ if (old_surface_id != new_surface_id) { |
+ if (old_surface_id) |
+ layer_tree_host()->RemoveSurfaceLayerId(*old_surface_id); |
+ if (new_surface_id) |
+ layer_tree_host()->AddSurfaceLayerId(*new_surface_id); |
+ } |
} |
SetNeedsCommit(); |
} |
@@ -104,6 +129,17 @@ void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { |
Layer::SetLayerTreeHost(host); |
return; |
} |
+ const SurfaceId* primary_surface_id = |
+ GetReferencedSurfaceId(primary_surface_info_); |
+ const SurfaceId* fallback_surface_id = |
+ GetReferencedSurfaceId(fallback_surface_info_); |
+ |
+ if (layer_tree_host()) { |
+ if (primary_surface_id) |
+ layer_tree_host()->RemoveSurfaceLayerId(*primary_surface_id); |
+ if (fallback_surface_id) |
+ layer_tree_host()->RemoveSurfaceLayerId(*fallback_surface_id); |
+ } |
RemoveReference(std::move(primary_reference_returner_)); |
RemoveReference(std::move(fallback_reference_returner_)); |
Layer::SetLayerTreeHost(host); |
@@ -116,6 +152,10 @@ void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { |
fallback_reference_returner_ = ref_factory_->CreateReference( |
layer_tree_host(), fallback_surface_info_.id()); |
} |
+ if (primary_surface_id) |
+ layer_tree_host()->AddSurfaceLayerId(*primary_surface_id); |
+ if (fallback_surface_id) |
+ layer_tree_host()->RemoveSurfaceLayerId(*fallback_surface_id); |
enne (OOO)
2017/05/24 21:57:42
add?
jaydasika
2017/05/24 22:12:56
Done.
|
} |
} |