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

Unified Diff: cc/layers/surface_layer.cc

Issue 2905533002: cc : Store surface layer ids on LayerTreeHost and push them at commit (Closed)
Patch Set: comments Created 3 years, 7 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 | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_);
}
}
« no previous file with comments | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698