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

Unified Diff: cc/layers/surface_layer.cc

Issue 2514033002: Introducing SurfaceReferenceFactory (Closed)
Patch Set: rebase 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
« no previous file with comments | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_impl.h » ('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 d3b25acf5f522151c45a473dd263c68d103f31a6..16323e07d7e3ad3d9c241c26571fe5ea8b12f55b 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -20,67 +20,56 @@ namespace cc {
class SatisfySwapPromise : public SwapPromise {
public:
SatisfySwapPromise(
- const SurfaceSequence& sequence,
- const SurfaceLayer::SatisfyCallback& satisfy_callback,
+ std::unique_ptr<SurfaceReferenceBase> surface_ref,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner)
- : sequence_(sequence),
- satisfy_callback_(satisfy_callback),
+ : surface_ref_(std::move(surface_ref)),
main_task_runner_(std::move(main_task_runner)) {}
~SatisfySwapPromise() override {}
private:
void DidActivate() override {}
+
void WillSwap(CompositorFrameMetadata* metadata) override {}
+
void DidSwap() override {
- // DidSwap could run on compositor thread but satisfy callback must
- // run on the main thread.
- main_task_runner_->PostTask(FROM_HERE,
- base::Bind(satisfy_callback_, sequence_));
+ main_task_runner_->DeleteSoon(FROM_HERE, surface_ref_.release());
}
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
- main_task_runner_->PostTask(FROM_HERE,
- base::Bind(satisfy_callback_, sequence_));
+ main_task_runner_->DeleteSoon(FROM_HERE, surface_ref_.release());
return DidNotSwapAction::BREAK_PROMISE;
}
+
int64_t TraceId() const override { return 0; }
- SurfaceSequence sequence_;
- SurfaceLayer::SatisfyCallback satisfy_callback_;
+ std::unique_ptr<SurfaceReferenceBase> surface_ref_;
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
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));
+ scoped_refptr<SurfaceReferenceFactory> ref_factory) {
+ return make_scoped_refptr(new SurfaceLayer(std::move(ref_factory)));
}
-SurfaceLayer::SurfaceLayer(const SatisfyCallback& satisfy_callback,
- const RequireCallback& require_callback)
- : satisfy_callback_(satisfy_callback),
- require_callback_(require_callback) {}
+SurfaceLayer::SurfaceLayer(scoped_refptr<SurfaceReferenceFactory> 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,
- bool stretch_content_to_fill_bounds) {
- SatisfyDestroySequence();
- surface_id_ = surface_id;
- surface_size_ = size;
- surface_scale_ = scale;
+void SurfaceLayer::SetSurfaceInfo(const SurfaceInfo& surface_info,
+ bool stretch_content_to_fill_bounds) {
+ RemoveCurrentReference();
+ surface_info_ = surface_info;
+ if (layer_tree_host()) {
+ current_ref_ =
+ ref_factory_->CreateReference(layer_tree_host(), surface_info_.id());
+ }
stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds;
- CreateNewDestroySequence();
-
UpdateDrawsContent(HasDrawableContent());
SetNeedsPushProperties();
}
@@ -91,7 +80,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) {
@@ -99,43 +88,29 @@ 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_);
+ layer_impl->SetSurfaceInfo(surface_info_);
layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_);
}
-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_);
- }
-}
-
-void SurfaceLayer::SatisfyDestroySequence() {
- if (!layer_tree_host())
+void SurfaceLayer::RemoveCurrentReference() {
+ if (!current_ref_)
return;
- DCHECK(destroy_sequence_.is_valid());
- auto satisfy =
- base::MakeUnique<SatisfySwapPromise>(destroy_sequence_, satisfy_callback_,
- base::ThreadTaskRunnerHandle::Get());
+ auto swap_promise = base::MakeUnique<SatisfySwapPromise>(
+ std::move(current_ref_), base::ThreadTaskRunnerHandle::Get());
layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
- std::move(satisfy));
- destroy_sequence_ = SurfaceSequence();
+ std::move(swap_promise));
}
} // namespace cc
« no previous file with comments | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698