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

Unified Diff: src/core/SkRemote.h

Issue 1409113005: SkRemote: more refactoring (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: forward declares Created 5 years, 2 months 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 | « dm/DMSrcSink.cpp ('k') | src/core/SkRemote.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkRemote.h
diff --git a/src/core/SkRemote.h b/src/core/SkRemote.h
index cbfcf9b3813153d137e0dd5f424a519d491de654..537d1ac41751fa1060af346f15ad169aa07e58ea 100644
--- a/src/core/SkRemote.h
+++ b/src/core/SkRemote.h
@@ -8,13 +8,17 @@
#ifndef SkRemote_DEFINED
#define SkRemote_DEFINED
-#include "SkCanvas.h"
#include "SkPaint.h"
+#include "SkRegion.h"
#include "SkRemote_protocol.h"
-#include "SkShader.h"
-#include "SkTHash.h"
#include "SkTypes.h"
+class SkCanvas;
+class SkMatrix;
+class SkPath;
+class SkShader;
+class SkXfermode;
+
// TODO: document
namespace SkRemote {
@@ -61,8 +65,6 @@ namespace SkRemote {
struct Encoder {
virtual ~Encoder() {}
- static Encoder* CreateCachingEncoder(Encoder*);
-
virtual ID define(const SkMatrix&) = 0;
virtual ID define(const Misc&) = 0;
virtual ID define(const SkPath&) = 0;
@@ -85,145 +87,14 @@ namespace SkRemote {
virtual void strokePath(ID path, ID misc, ID shader, ID xfermode, ID stroke) = 0;
};
- // An SkCanvas that translates to Encoder calls.
- class Client final : public SkCanvas {
- public:
- explicit Client(Encoder*);
-
- private:
- class AutoID;
-
- template <typename T>
- AutoID id(const T&);
-
- void willSave() override;
- void didRestore() override;
-
- void didConcat(const SkMatrix&) override;
- void didSetMatrix(const SkMatrix&) override;
-
- void onClipPath (const SkPath&, SkRegion::Op, ClipEdgeStyle) override;
- void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override;
- void onClipRect (const SkRect&, SkRegion::Op, ClipEdgeStyle) override;
+ // None of these factories take ownership of their arguments.
- void onDrawOval(const SkRect&, const SkPaint&) override;
- void onDrawRRect(const SkRRect&, const SkPaint&) override;
- void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
- void onDrawPath(const SkPath&, const SkPaint&) override;
- void onDrawRect(const SkRect&, const SkPaint&) override;
- void onDrawPaint(const SkPaint&) override;
-
- void onDrawText(const void*, size_t, SkScalar,
- SkScalar, const SkPaint&) override;
- void onDrawPosText(const void*, size_t, const SkPoint[],
- const SkPaint&) override;
- void onDrawPosTextH(const void*, size_t, const SkScalar[], SkScalar,
- const SkPaint&) override;
-
- Encoder* fEncoder;
- };
-
- // An Encoder that translates back to SkCanvas calls.
- class Server final : public Encoder {
- public:
- explicit Server(SkCanvas*);
-
- private:
- ID define(const SkMatrix&) override;
- ID define(const Misc&) override;
- ID define(const SkPath&) override;
- ID define(const Stroke&) override;
- ID define(SkShader*) override;
- ID define(SkXfermode*) override;
-
- void undefine(ID) override;
-
- void save() override;
- void restore() override;
-
- void setMatrix(ID matrix) override;
-
- void clipPath(ID path, SkRegion::Op, bool aa) override;
- void fillPath(ID path, ID misc, ID shader, ID xfermode) override;
- void strokePath(ID path, ID misc, ID shader, ID xfermode, ID stroke) override;
-
- // Maps ID -> T.
- template <typename T, Type kType>
- class IDMap {
- public:
- ~IDMap() {
- // A well-behaved client always cleans up its definitions.
- SkASSERT(fMap.count() == 0);
- }
-
- void set(const ID& id, const T& val) {
- SkASSERT(id.type() == kType);
- fMap.set(id, val);
- }
-
- void remove(const ID& id) {
- SkASSERT(id.type() == kType);
- fMap.remove(id);
- }
-
- const T& find(const ID& id) const {
- SkASSERT(id.type() == kType);
- T* val = fMap.find(id);
- SkASSERT(val != nullptr);
- return *val;
- }
-
- private:
- SkTHashMap<ID, T> fMap;
- };
-
- // Maps ID -> T*, and keeps the T alive by reffing it.
- template <typename T, Type kType>
- class ReffedIDMap {
- public:
- ReffedIDMap() {}
- ~ReffedIDMap() {
- // A well-behaved client always cleans up its definitions.
- SkASSERT(fMap.count() == 0);
- }
-
- void set(const ID& id, T* val) {
- SkASSERT(id.type() == kType);
- fMap.set(id, SkSafeRef(val));
- }
-
- void remove(const ID& id) {
- SkASSERT(id.type() == kType);
- T** val = fMap.find(id);
- SkASSERT(val);
- SkSafeUnref(*val);
- fMap.remove(id);
- }
-
- T* find(const ID& id) const {
- SkASSERT(id.type() == kType);
- T** val = fMap.find(id);
- SkASSERT(val);
- return *val;
- }
-
- private:
- SkTHashMap<ID, T*> fMap;
- };
-
- template <typename Map, typename T>
- ID define(Type, Map*, const T&);
-
- IDMap<SkMatrix, Type::kMatrix> fMatrix;
- IDMap<Misc , Type::kMisc > fMisc;
- IDMap<SkPath , Type::kPath > fPath;
- IDMap<Stroke , Type::kStroke> fStroke;
- ReffedIDMap<SkShader, Type::kShader> fShader;
- ReffedIDMap<SkXfermode, Type::kXfermode> fXfermode;
-
- SkCanvas* fCanvas;
- uint64_t fNextID = 0;
- };
+ // Returns a new SkCanvas that translates to the Encoder API.
+ SkCanvas* NewCanvas(Encoder*);
+ // Returns an Encoder that translates back to the SkCanvas API.
+ Encoder* NewDecoder(SkCanvas*);
+ // Wraps another Encoder with a cache. TODO: parameterize
+ Encoder* NewCachingEncoder(Encoder*);
} // namespace SkRemote
« no previous file with comments | « dm/DMSrcSink.cpp ('k') | src/core/SkRemote.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698