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

Unified Diff: cc/layers/surface_layer.cc

Issue 2514033002: Introducing SurfaceReferenceFactory (Closed)
Patch Set: ref 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..40b01e34f410f9bcf4f7f156e947a399de5d22fc 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -18,57 +18,54 @@ 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)
Fady Samuel 2016/12/12 16:11:59 scoped_ptr<SurfaceReference> surface_reference?
+ : 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(
- 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(SurfaceEmbeddingPtr ref_factory) {
+ ref_factory_ = std::move(ref_factory);
+}
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::SetSurfaceInfo(const SurfaceId& id,
+ float scale,
+ const gfx::Size& size) {
+ SetSurfaceInfo(SurfaceInfo(id, scale, size));
+}
+void SurfaceLayer::SetSurfaceInfo(const SurfaceInfo& surface_info) {
+ RemoveCurrentReference();
+ surface_info_ = surface_info;
+ if (layer_tree_host()) {
+ current_ref_ =
+ ref_factory_->CreateReference(layer_tree_host(), surface_info_.id);
+ }
UpdateDrawsContent(HasDrawableContent());
SetNeedsPushProperties();
}
@@ -79,7 +76,7 @@ std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl(
}
bool SurfaceLayer::HasDrawableContent() const {
- return surface_id_.is_valid() && Layer::HasDrawableContent();
+ return surface_info_.id.is_valid() && Layer::HasDrawableContent();
}
void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
@@ -87,41 +84,26 @@ void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
Layer::SetLayerTreeHost(host);
return;
}
-
- SatisfyDestroySequence();
+ RemoveCurrentReference();
Layer::SetLayerTreeHost(host);
- CreateNewDestroySequence();
+ if (layer_tree_host()) {
+ current_ref_ =
+ ref_factory_->CreateReference(layer_tree_host(), surface_info_.id);
+ }
}
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_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_));
layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
- std::move(satisfy));
- destroy_sequence_ = SurfaceSequence();
+ base::MakeUnique<SatisfySwapPromise>(std::move(current_ref_)));
}
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698