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

Side by Side Diff: include/core/SkWriteBuffer.h

Issue 1920423002: Prototype code that turns any/every flattenable into JSON (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Interfacification. Tweaks to SkPaint and ordering of name vs. fields Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #ifndef SkWriteBuffer_DEFINED 9 #ifndef SkWriteBuffer_DEFINED
10 #define SkWriteBuffer_DEFINED 10 #define SkWriteBuffer_DEFINED
11 11
12 #include "SkData.h" 12 #include "SkData.h"
13 #include "SkImage.h" 13 #include "SkImage.h"
14 #include "SkPath.h" 14 #include "SkPath.h"
15 #include "SkPicture.h" 15 #include "SkPicture.h"
16 #include "SkPixelSerializer.h" 16 #include "SkPixelSerializer.h"
17 #include "SkRefCnt.h" 17 #include "SkRefCnt.h"
18 #include "SkWriter32.h" 18 #include "SkWriter32.h"
19 #include "../private/SkTHash.h" 19 #include "../private/SkTHash.h"
20 20
21 class SkBitmap; 21 class SkBitmap;
22 class SkBitmapHeap; 22 class SkBitmapHeap;
23 class SkFactorySet; 23 class SkFactorySet;
24 class SkFlattenable; 24 class SkFlattenable;
25 class SkRefCntSet; 25 class SkRefCntSet;
26 26
27 class SkWriteBuffer { 27 class SkWriteBuffer {
28 public: 28 public:
29 SkWriteBuffer() {}
30 virtual ~SkWriteBuffer() {}
31
32 virtual bool isCrossProcess() const = 0;
33
34 // This is the only really leaky abstraction in this interface:
35 virtual uint32_t* reserve(size_t size) = 0;
Brian Osman 2016/04/28 14:22:32 All of the other "binary" parts (and implementatio
36
37 virtual void writeByteArray(const void* data, size_t size) = 0;
38 virtual void writeDataAsByteArray(SkData* data) = 0;
39 virtual void writeBool(bool value) = 0;;
40 virtual void writeScalar(SkScalar value) = 0;
41 virtual void writeScalarArray(const SkScalar* value, uint32_t count) = 0;
42 virtual void writeInt(int32_t value) = 0;
43 virtual void writeIntArray(const int32_t* value, uint32_t count) = 0;
44 virtual void writeUInt(uint32_t value) = 0;
45 virtual void write32(int32_t value) = 0;
46 virtual void writeString(const char* value) = 0;
47 virtual void writeEncodedString(const void* value, size_t byteLength,
48 SkPaint::TextEncoding encoding) = 0;
49 virtual void writeFunctionPtr(void* ptr) = 0;
50
51 virtual void writeFlattenable(const SkFlattenable* flattenable) = 0;
52 virtual void writeColor(const SkColor& color) = 0;
53 virtual void writeColorArray(const SkColor* color, uint32_t count) = 0;
54 virtual void writePoint(const SkPoint& point) = 0;
55 virtual void writePointArray(const SkPoint* point, uint32_t count) = 0;
56 virtual void writeMatrix(const SkMatrix& matrix) = 0;
57 virtual void writeIRect(const SkIRect& rect) = 0;
58 virtual void writeRect(const SkRect& rect) = 0;
59 virtual void writeRegion(const SkRegion& region) = 0;
60 virtual void writePath(const SkPath& path) = 0;
61 virtual size_t writeStream(SkStream* stream, size_t length) = 0;
62 virtual void writeBitmap(const SkBitmap& bitmap) = 0;
63 virtual void writeImage(const SkImage*) = 0;
64 virtual void writeTypeface(SkTypeface* typeface) = 0;
65 virtual void writePaint(const SkPaint& paint) = 0;
66 };
67
68 /**
69 * Concrete implementation that serializes to a flat binary blob.
70 */
71 class SkBinaryWriteBuffer : public SkWriteBuffer {
72 public:
29 enum Flags { 73 enum Flags {
30 kCrossProcess_Flag = 1 << 0, 74 kCrossProcess_Flag = 1 << 0,
31 }; 75 };
32 76
33 SkWriteBuffer(uint32_t flags = 0); 77 SkBinaryWriteBuffer(uint32_t flags = 0);
34 SkWriteBuffer(void* initialStorage, size_t storageSize, uint32_t flags = 0); 78 SkBinaryWriteBuffer(void* initialStorage, size_t storageSize, uint32_t flags = 0);
35 ~SkWriteBuffer(); 79 ~SkBinaryWriteBuffer();
36 80
37 bool isCrossProcess() const { 81 bool isCrossProcess() const override {
38 return SkToBool(fFlags & kCrossProcess_Flag); 82 return SkToBool(fFlags & kCrossProcess_Flag);
39 } 83 }
40 84
41 SkWriter32* getWriter32() { return &fWriter; } 85 SkWriter32* getWriter32() { return &fWriter; }
42 void reset(void* storage = NULL, size_t storageSize = 0) { 86 void reset(void* storage = NULL, size_t storageSize = 0) {
43 fWriter.reset(storage, storageSize); 87 fWriter.reset(storage, storageSize);
44 } 88 }
45 89
46 uint32_t* reserve(size_t size) { return fWriter.reserve(size); } 90 uint32_t* reserve(size_t size) override { return fWriter.reserve(size); }
47 91
48 size_t bytesWritten() const { return fWriter.bytesWritten(); } 92 size_t bytesWritten() const { return fWriter.bytesWritten(); }
49 93
50 void writeByteArray(const void* data, size_t size); 94 void writeByteArray(const void* data, size_t size) override;
51 void writeDataAsByteArray(SkData* data) { this->writeByteArray(data->data(), data->size()); } 95 void writeDataAsByteArray(SkData* data) override {
52 void writeBool(bool value); 96 this->writeByteArray(data->data(), data->size());
53 void writeScalar(SkScalar value); 97 }
54 void writeScalarArray(const SkScalar* value, uint32_t count); 98 void writeBool(bool value) override;
55 void writeInt(int32_t value); 99 void writeScalar(SkScalar value) override;
56 void writeIntArray(const int32_t* value, uint32_t count); 100 void writeScalarArray(const SkScalar* value, uint32_t count) override;
57 void writeUInt(uint32_t value); 101 void writeInt(int32_t value) override;
58 void write32(int32_t value); 102 void writeIntArray(const int32_t* value, uint32_t count) override;
59 void writeString(const char* value); 103 void writeUInt(uint32_t value) override;
60 void writeEncodedString(const void* value, size_t byteLength, SkPaint::TextE ncoding encoding); 104 void write32(int32_t value) override;
61 void writeFunctionPtr(void* ptr) { fWriter.writePtr(ptr); } 105 void writeString(const char* value) override;
106 void writeEncodedString(const void* value, size_t byteLength,
107 SkPaint::TextEncoding encoding) override;
108 void writeFunctionPtr(void* ptr) override { fWriter.writePtr(ptr); }
62 109
63 void writeFlattenable(const SkFlattenable* flattenable); 110 void writeFlattenable(const SkFlattenable* flattenable) override;
64 void writeColor(const SkColor& color); 111 void writeColor(const SkColor& color) override;
65 void writeColorArray(const SkColor* color, uint32_t count); 112 void writeColorArray(const SkColor* color, uint32_t count) override;
66 void writePoint(const SkPoint& point); 113 void writePoint(const SkPoint& point) override;
67 void writePointArray(const SkPoint* point, uint32_t count); 114 void writePointArray(const SkPoint* point, uint32_t count) override;
68 void writeMatrix(const SkMatrix& matrix); 115 void writeMatrix(const SkMatrix& matrix) override;
69 void writeIRect(const SkIRect& rect); 116 void writeIRect(const SkIRect& rect) override;
70 void writeRect(const SkRect& rect); 117 void writeRect(const SkRect& rect) override;
71 void writeRegion(const SkRegion& region); 118 void writeRegion(const SkRegion& region) override;
72 void writePath(const SkPath& path); 119 void writePath(const SkPath& path) override;
73 size_t writeStream(SkStream* stream, size_t length); 120 size_t writeStream(SkStream* stream, size_t length) override;
74 void writeBitmap(const SkBitmap& bitmap); 121 void writeBitmap(const SkBitmap& bitmap) override;
75 void writeImage(const SkImage*); 122 void writeImage(const SkImage*) override;
76 void writeTypeface(SkTypeface* typeface); 123 void writeTypeface(SkTypeface* typeface) override;
77 void writePaint(const SkPaint& paint) { paint.flatten(*this); } 124 void writePaint(const SkPaint& paint) override { paint.flatten(*this); }
78 125
79 bool writeToStream(SkWStream*); 126 bool writeToStream(SkWStream*);
80 void writeToMemory(void* dst) { fWriter.flatten(dst); } 127 void writeToMemory(void* dst) { fWriter.flatten(dst); }
81 128
82 SkFactorySet* setFactoryRecorder(SkFactorySet*); 129 SkFactorySet* setFactoryRecorder(SkFactorySet*);
83
84 SkRefCntSet* getTypefaceRecorder() const { return fTFSet; }
85 SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); 130 SkRefCntSet* setTypefaceRecorder(SkRefCntSet*);
86 131
87 /** 132 /**
88 * Set an SkBitmapHeap to store bitmaps rather than flattening. 133 * Set an SkBitmapHeap to store bitmaps rather than flattening.
89 * 134 *
90 * Incompatible with an SkPixelSerializer. If an SkPixelSerializer is set, 135 * Incompatible with an SkPixelSerializer. If an SkPixelSerializer is set,
91 * setting an SkBitmapHeap will set the SkPixelSerializer to NULL in release 136 * setting an SkBitmapHeap will set the SkPixelSerializer to NULL in release
92 * and crash in debug. 137 * and crash in debug.
93 */ 138 */
94 void setBitmapHeap(SkBitmapHeap*); 139 void setBitmapHeap(SkBitmapHeap*);
95 140
96 /** 141 /**
97 * Set an SkPixelSerializer to store an encoded representation of pixels, 142 * Set an SkPixelSerializer to store an encoded representation of pixels,
98 * e.g. SkBitmaps. 143 * e.g. SkBitmaps.
99 * 144 *
100 * Calls ref() on the serializer. 145 * Calls ref() on the serializer.
101 * 146 *
102 * TODO: Encode SkImage pixels as well. 147 * TODO: Encode SkImage pixels as well.
103 * 148 *
104 * Incompatible with the SkBitmapHeap. If an encoder is set fBitmapHeap will 149 * Incompatible with the SkBitmapHeap. If an encoder is set fBitmapHeap will
105 * be set to NULL in release and crash in debug. 150 * be set to NULL in release and crash in debug.
106 */ 151 */
107 void setPixelSerializer(SkPixelSerializer*); 152 void setPixelSerializer(SkPixelSerializer*);
108 SkPixelSerializer* getPixelSerializer() const { return fPixelSerializer; } 153 SkPixelSerializer* getPixelSerializer() const { return fPixelSerializer; }
109 154
110 private: 155 private:
111 const uint32_t fFlags; 156 const uint32_t fFlags;
112 SkFactorySet* fFactorySet; 157 SkFactorySet* fFactorySet;
113 SkWriter32 fWriter; 158 SkWriter32 fWriter;
114 159
115 SkBitmapHeap* fBitmapHeap; 160 SkBitmapHeap* fBitmapHeap;
116 SkRefCntSet* fTFSet; 161 SkRefCntSet* fTFSet;
117 162
118 SkAutoTUnref<SkPixelSerializer> fPixelSerializer; 163 SkAutoTUnref<SkPixelSerializer> fPixelSerializer;
119 164
120 // Only used if we do not have an fFactorySet 165 // Only used if we do not have an fFactorySet
121 SkTHashMap<SkString, uint32_t> fFlattenableDict; 166 SkTHashMap<SkString, uint32_t> fFlattenableDict;
122 }; 167 };
123 168
124 #endif // SkWriteBuffer_DEFINED 169 #endif // SkWriteBuffer_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698