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

Unified Diff: cc/surfaces/surface_embedding_base.h

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/surfaces/surface_embedding_base.h
diff --git a/cc/surfaces/surface_embedding_base.h b/cc/surfaces/surface_embedding_base.h
new file mode 100644
index 0000000000000000000000000000000000000000..6907065cf63670c950934c827dd5ad0cfc28378b
--- /dev/null
+++ b/cc/surfaces/surface_embedding_base.h
@@ -0,0 +1,90 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_SURFACES_SURFACE_EMBEDDING_BASE_H_
+#define CC_SURFACES_SURFACE_EMBEDDING_BASE_H_
+
+#include <memory>
+
+#include "base/memory/ptr_util.h"
+#include "cc/surfaces/surface_id.h"
+#include "cc/surfaces/surface_sequence.h"
+#include "cc/surfaces/surface_sequence_generator.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace cc {
+
+struct SurfaceInfo {
+ SurfaceId id;
+ float scale = 1.f;
+ gfx::Size size;
+
+ SurfaceInfo() {}
+ SurfaceInfo(const SurfaceId& id, float scale, gfx::Size size)
+ : id(id), scale(scale), size(size) {}
+ bool operator==(const SurfaceInfo& info) const {
+ return id == info.id && scale == info.scale && size == info.size;
+ }
+};
+
+class CompositorFrameMetadata;
+class SurfaceEmbedding;
+typedef std::unique_ptr<SurfaceEmbedding> SurfaceEmbeddingPtr;
+
+class SurfaceEmbeddingOwner {
+ public:
+ virtual SurfaceSequenceGenerator* GetSurfaceSequenceGenerator() = 0;
+};
+
+class SurfaceRef;
+typedef std::unique_ptr<SurfaceRef> SurfaceRefPtr;
+
+class SurfaceRef final {
Fady Samuel 2016/12/12 16:11:59 Make this move only and create on stack. Call it S
+ public:
+ void Destroy();
+ void Destroy(CompositorFrameMetadata* metadata);
+ ~SurfaceRef();
+
+ private:
+ friend class SurfaceEmbedding;
+ explicit SurfaceRef(SurfaceEmbeddingPtr embedding);
+ bool is_deleted_ = false;
Fady Samuel 2016/12/12 16:11:59 What's the point of this? Set embedding_ = nullptr
+ SurfaceEmbeddingPtr embedding_;
+};
+
+class SurfaceEmbedding {
Fady Samuel 2016/12/12 16:11:59 Make this refcounted.
+ public:
+ explicit SurfaceEmbedding(const SurfaceInfo& info) : info_(info) {}
+
+ SurfaceRefPtr CreateReference(SurfaceEmbeddingOwner* owner) const {
+ SurfaceEmbeddingPtr clone = Clone();
+ clone->owner_ = owner;
+ return SurfaceRefPtr(new SurfaceRef(std::move(clone)));
+ }
+
+ const SurfaceInfo& info() const { return info_; }
+ const SurfaceId& id() const { return info_.id; }
+ float scale() const { return info_.scale; }
+ const gfx::Size& size() const { return info_.size; }
+
+ SurfaceEmbeddingPtr Clone() const { return SurfaceEmbeddingPtr(CloneImpl()); }
+
+ protected:
+ SurfaceEmbeddingOwner* owner() { return owner_; }
+
+ private:
+ virtual void AddReference() = 0;
+ virtual void RemoveReference() = 0;
+ virtual void RemoveReference(CompositorFrameMetadata*) = 0;
+ virtual SurfaceEmbedding* CloneImpl() const = 0;
+
+ const SurfaceInfo info_;
+ SurfaceEmbeddingOwner* owner_ = nullptr;
+
+ friend class SurfaceRef;
+};
+
+} // namespace cc
+
+#endif // CC_SURFACES_SURFACE_EMBEDDING_BASE_H_

Powered by Google App Engine
This is Rietveld 408576698