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

Unified Diff: cc/layers/surface_layer.cc

Issue 2514033002: Introducing SurfaceReferenceFactory (Closed)
Patch Set: x Created 4 years 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: cc/layers/surface_layer.cc
diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc
index 0f8bd3380be1aa873bf5ed197dcafabad45a9c51..f381dd88b62760ab5c5728b1a9cd3a9b41275fc7 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -18,57 +18,52 @@ namespace cc {
class SatisfySwapPromise : public SwapPromise {
public:
- SatisfySwapPromise(SurfaceSequence sequence,
- const SurfaceLayer::SatisfyCallback& satisfy_callback)
- : sequence_(sequence), satisfy_callback_(satisfy_callback) {}
+ explicit SatisfySwapPromise(SurfaceRefPtr surface_ref)
+ : surface_ref_(std::move(surface_ref)) {}
~SatisfySwapPromise() override {}
private:
void DidActivate() override {}
void DidSwap(CompositorFrameMetadata* metadata) override {
- metadata->satisfies_sequences.push_back(sequence_.sequence);
+ surface_ref_->Destroy(metadata);
}
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
- satisfy_callback_.Run(sequence_);
+ surface_ref_->Destroy();
return DidNotSwapAction::BREAK_PROMISE;
}
int64_t TraceId() const override { return 0; }
- SurfaceSequence sequence_;
- SurfaceLayer::SatisfyCallback satisfy_callback_;
+ SurfaceRefPtr surface_ref_;
DISALLOW_COPY_AND_ASSIGN(SatisfySwapPromise);
};
+scoped_refptr<SurfaceLayer> SurfaceLayer::Create() {
+ return make_scoped_refptr(new SurfaceLayer());
+}
+
scoped_refptr<SurfaceLayer> SurfaceLayer::Create(
- const SatisfyCallback& satisfy_callback,
- const RequireCallback& require_callback) {
- return make_scoped_refptr(
- new SurfaceLayer(satisfy_callback, require_callback));
+ SurfaceEmbeddingPtr surface_ref) {
+ return make_scoped_refptr(new SurfaceLayer(std::move(surface_ref)));
}
-SurfaceLayer::SurfaceLayer(const SatisfyCallback& satisfy_callback,
- const RequireCallback& require_callback)
- : surface_scale_(1.f),
- satisfy_callback_(satisfy_callback),
- require_callback_(require_callback) {}
+SurfaceLayer::SurfaceLayer() {}
+
+SurfaceLayer::SurfaceLayer(SurfaceEmbeddingPtr surface_ref) {
+ SetSurfaceEmbedding(std::move(surface_ref));
+}
SurfaceLayer::~SurfaceLayer() {
DCHECK(!layer_tree_host());
- DCHECK(!destroy_sequence_.is_valid());
}
-void SurfaceLayer::SetSurfaceId(const SurfaceId& surface_id,
- float scale,
- const gfx::Size& size) {
- SatisfyDestroySequence();
- surface_id_ = surface_id;
- surface_size_ = size;
- surface_scale_ = scale;
- CreateNewDestroySequence();
-
+void SurfaceLayer::SetSurfaceEmbedding(SurfaceEmbeddingPtr surface_ref) {
+ RemoveCurrentReference();
+ surface_emb_ = std::move(surface_ref);
+ if (layer_tree_host())
+ current_ref_ = surface_emb_->CreateReference(layer_tree_host());
Fady Samuel 2016/12/12 16:11:59 if (layer_tree_host()) surface_embedding_->Bind(
UpdateDrawsContent(HasDrawableContent());
SetNeedsPushProperties();
}
@@ -79,7 +74,7 @@ std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl(
}
bool SurfaceLayer::HasDrawableContent() const {
- return surface_id_.is_valid() && Layer::HasDrawableContent();
+ return surface_emb_->id().is_valid() && Layer::HasDrawableContent();
}
void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
@@ -87,41 +82,26 @@ void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
Layer::SetLayerTreeHost(host);
return;
}
-
- SatisfyDestroySequence();
+ RemoveCurrentReference();
Layer::SetLayerTreeHost(host);
- CreateNewDestroySequence();
+ if (surface_emb_ && layer_tree_host())
+ current_ref_ = surface_emb_->CreateReference(layer_tree_host());
Fady Samuel 2016/12/12 16:11:59 surface_embedding_ = surface_embedding_->CloneSurf
}
void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) {
Layer::PushPropertiesTo(layer);
TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo");
SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer);
-
- layer_impl->SetSurfaceId(surface_id_);
- layer_impl->SetSurfaceSize(surface_size_);
- layer_impl->SetSurfaceScale(surface_scale_);
-}
-
-void SurfaceLayer::CreateNewDestroySequence() {
- DCHECK(!destroy_sequence_.is_valid());
- if (layer_tree_host()) {
- destroy_sequence_ = layer_tree_host()
- ->GetSurfaceSequenceGenerator()
- ->CreateSurfaceSequence();
- require_callback_.Run(surface_id_, destroy_sequence_);
- }
+ layer_impl->SetSurfaceInfo(surface_emb_->info());
}
-void SurfaceLayer::SatisfyDestroySequence() {
- if (!layer_tree_host())
+void SurfaceLayer::RemoveCurrentReference() {
+ if (!current_ref_)
return;
- DCHECK(destroy_sequence_.is_valid());
std::unique_ptr<SatisfySwapPromise> satisfy(
- new SatisfySwapPromise(destroy_sequence_, satisfy_callback_));
+ new SatisfySwapPromise(std::move(current_ref_)));
Fady Samuel 2016/12/12 16:11:59 Have this take in a SurfaceEmbedding.
layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
std::move(satisfy));
- destroy_sequence_ = SurfaceSequence();
}
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698