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

Unified Diff: cc/surfaces/surface_manager.cc

Issue 2514033002: Introducing SurfaceReferenceFactory (Closed)
Patch Set: fix 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/surfaces/surface_manager.cc
diff --git a/cc/surfaces/surface_manager.cc b/cc/surfaces/surface_manager.cc
index b8b121142ff7f18f707f9dea142be0f0faa6c6ee..8144f4ad21c31eb3bc79a81f415823f864f453f9 100644
--- a/cc/surfaces/surface_manager.cc
+++ b/cc/surfaces/surface_manager.cc
@@ -16,6 +16,51 @@
namespace cc {
+namespace {
+
+class SurfaceRef final : public SurfaceRefWithSequence<SurfaceRef> {
Saman Sami 2016/11/30 18:05:52 Move to a separate file and rename?
+ public:
+ SurfaceRef(SurfaceManager* manager,
+ const SurfaceId& surface_id,
+ float scale,
+ const gfx::Size& size);
+ // SurfaceRef(const SurfaceRef&);
+
+ protected:
+ void SatisfySequence(const SurfaceSequence&) override;
+ void RequireSequence(const SurfaceSequence&) override;
+
+ private:
+ SurfaceManager* manager_ = nullptr;
+};
+
+SurfaceRef::SurfaceRef(SurfaceManager* manager,
+ const SurfaceId& surface_id,
+ float scale,
+ const gfx::Size& size)
+ : manager_(manager) {
+ SetMetadata(surface_id, scale, size);
Fady Samuel 2016/11/30 19:51:29 Call the base class' constructor instead?
+}
+
+// SurfaceRef::SurfaceRef(const SurfaceRef& surface_ref) = default;
+
+void SurfaceRef::SatisfySequence(const SurfaceSequence& seq) {
+ std::vector<uint32_t> sequences;
+ sequences.push_back(seq.sequence);
+ manager_->DidSatisfySequences(seq.frame_sink_id, &sequences);
+}
+
+void SurfaceRef::RequireSequence(const SurfaceSequence& seq) {
+ auto surface = manager_->GetSurfaceForId(id());
+ if (!surface) {
+ LOG(ERROR) << "Attempting to require callback on nonexistent surface";
+ return;
+ }
+ surface->AddDestructionDependency(seq);
+}
+
+} // namespace
+
SurfaceManager::FrameSinkSourceMapping::FrameSinkSourceMapping()
: client(nullptr), source(nullptr) {}
@@ -420,6 +465,12 @@ void SurfaceManager::UnregisterFrameSinkHierarchy(
RecursivelyAttachBeginFrameSource(source_iter.second, source_iter.first);
}
+SurfaceRefPtr SurfaceManager::NewSurfaceRef(const SurfaceId& surface_id,
+ float scale,
+ const gfx::Size& size) {
+ return SurfaceRefPtr(new SurfaceRef(this, surface_id, scale, size));
+}
+
Surface* SurfaceManager::GetSurfaceForId(const SurfaceId& surface_id) {
DCHECK(thread_checker_.CalledOnValidThread());
SurfaceMap::iterator it = surface_map_.find(surface_id);

Powered by Google App Engine
This is Rietveld 408576698