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

Side by Side Diff: dm/DMSrcSink.h

Issue 886233004: Print gpu/cache stats from DM. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: minor Created 5 years, 10 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 #ifndef DMSrcSink_DEFINED 1 #ifndef DMSrcSink_DEFINED
2 #define DMSrcSink_DEFINED 2 #define DMSrcSink_DEFINED
3 3
4 #include "DMGpuSupport.h" 4 #include "DMGpuSupport.h"
5 #include "SkBBHFactory.h" 5 #include "SkBBHFactory.h"
6 #include "SkBBoxHierarchy.h" 6 #include "SkBBoxHierarchy.h"
7 #include "SkBitmap.h" 7 #include "SkBitmap.h"
8 #include "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkData.h" 9 #include "SkData.h"
10 #include "SkGPipe.h" 10 #include "SkGPipe.h"
11 #include "SkNullCanvas.h" 11 #include "SkNullCanvas.h"
12 #include "SkPicture.h" 12 #include "SkPicture.h"
13 #include "SkString.h"
13 #include "gm.h" 14 #include "gm.h"
14 15
15 namespace DM { 16 namespace DM {
16 17
17 // This is just convenience. It lets you use either return "foo" or return SkSt ringPrintf(...). 18 // This is just convenience. It lets you use either return "foo" or return SkSt ringPrintf(...).
18 struct ImplicitString : public SkString { 19 struct ImplicitString : public SkString {
19 template <typename T> 20 template <typename T>
20 ImplicitString(const T& s) : SkString(s) {} 21 ImplicitString(const T& s) : SkString(s) {}
21 }; 22 };
22 typedef ImplicitString Error; 23 typedef ImplicitString Error;
23 typedef ImplicitString Name; 24 typedef ImplicitString Name;
24 typedef ImplicitString Path; 25 typedef ImplicitString Path;
25 26
26 struct Src { 27 struct Src {
27 // All Srcs must be thread safe. 28 // All Srcs must be thread safe.
28 virtual ~Src() {} 29 virtual ~Src() {}
29 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; 30 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0;
30 virtual SkISize size() const = 0; 31 virtual SkISize size() const = 0;
31 virtual Name name() const = 0; 32 virtual Name name() const = 0;
32 }; 33 };
33 34
34 struct Sink { 35 struct Sink {
35 virtual ~Sink() {} 36 virtual ~Sink() {}
36 // You may write to either the bitmap or stream. 37
37 virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*) const 38 Error SK_WARN_UNUSED_RESULT draw(const Src& src, SkBitmap* bmp, SkWStream* s tream) const {
38 = 0; 39 fVerboseLog.reset();
40 return this->onDraw(src, bmp, stream);
41 }
42
39 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o n the same thread. 43 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o n the same thread.
40 virtual int enclave() const = 0; 44 virtual int enclave() const = 0;
41 45
42 // File extension for the content draw() outputs, e.g. "png", "pdf". 46 // File extension for the content draw() outputs, e.g. "png", "pdf".
43 virtual const char* fileExtension() const = 0; 47 virtual const char* fileExtension() const = 0;
48
49 const SkString& verboseLog() const { return fVerboseLog; }
50
51 protected:
52 mutable SkString fVerboseLog;
mtklein 2015/02/02 16:23:17 I don't think this is going to work. Storing muta
bsalomon 2015/02/02 19:44:59 Ah... forgot that the sinks weren't instanced per
53
54 private:
55 // You may write to either the bitmap or stream.
56 virtual Error SK_WARN_UNUSED_RESULT onDraw(const Src&, SkBitmap*, SkWStream* ) const = 0;
44 }; 57 };
45 58
46 enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave }; 59 enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave };
47 static const int kNumEnclaves = kPDFSink_Enclave + 1; 60 static const int kNumEnclaves = kPDFSink_Enclave + 1;
48 61
49 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 62 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
50 63
51 class GMSrc : public Src { 64 class GMSrc : public Src {
52 public: 65 public:
53 explicit GMSrc(skiagm::GMRegistry::Factory); 66 explicit GMSrc(skiagm::GMRegistry::Factory);
(...skipping 29 matching lines...) Expand all
83 private: 96 private:
84 Path fPath; 97 Path fPath;
85 }; 98 };
86 99
87 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 100 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
88 101
89 class GPUSink : public Sink { 102 class GPUSink : public Sink {
90 public: 103 public:
91 GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfT ext, bool threaded); 104 GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfT ext, bool threaded);
92 105
93 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
94 int enclave() const SK_OVERRIDE; 106 int enclave() const SK_OVERRIDE;
95 const char* fileExtension() const SK_OVERRIDE { return "png"; } 107 const char* fileExtension() const SK_OVERRIDE { return "png"; }
96 private: 108 private:
109 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
110
97 GrContextFactory::GLContextType fContextType; 111 GrContextFactory::GLContextType fContextType;
98 GrGLStandard fGpuAPI; 112 GrGLStandard fGpuAPI;
99 int fSampleCount; 113 int fSampleCount;
100 bool fUseDFText; 114 bool fUseDFText;
101 bool fThreaded; 115 bool fThreaded;
102 }; 116 };
103 117
104 class PDFSink : public Sink { 118 class PDFSink : public Sink {
105 public: 119 public:
106 PDFSink(); 120 PDFSink();
107 121
108 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
109 int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; } 122 int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; }
110 const char* fileExtension() const SK_OVERRIDE { return "pdf"; } 123 const char* fileExtension() const SK_OVERRIDE { return "pdf"; }
124 private:
125 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
111 }; 126 };
112 127
113 class RasterSink : public Sink { 128 class RasterSink : public Sink {
114 public: 129 public:
115 explicit RasterSink(SkColorType); 130 explicit RasterSink(SkColorType);
116 131
117 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
118 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } 132 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
119 const char* fileExtension() const SK_OVERRIDE { return "png"; } 133 const char* fileExtension() const SK_OVERRIDE { return "png"; }
120 private: 134 private:
135 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
136
121 SkColorType fColorType; 137 SkColorType fColorType;
122 }; 138 };
123 139
124 class SKPSink : public Sink { 140 class SKPSink : public Sink {
125 public: 141 public:
126 SKPSink(); 142 SKPSink();
127 143
128 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
129 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } 144 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
130 const char* fileExtension() const SK_OVERRIDE { return "skp"; } 145 const char* fileExtension() const SK_OVERRIDE { return "skp"; }
146 private:
147 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
131 }; 148 };
132 149
133 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 150 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
134 151
135 class ViaMatrix : public Sink { 152 class ViaMatrix : public Sink {
136 public: 153 public:
137 ViaMatrix(SkMatrix, Sink*); 154 ViaMatrix(SkMatrix, Sink*);
138 155
139 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
140 int enclave() const SK_OVERRIDE { return fSink->enclave(); } 156 int enclave() const SK_OVERRIDE { return fSink->enclave(); }
141 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } 157 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); }
142 private: 158 private:
159 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
143 SkMatrix fMatrix; 160 SkMatrix fMatrix;
144 SkAutoTDelete<Sink> fSink; 161 SkAutoTDelete<Sink> fSink;
145 }; 162 };
146 163
147 class ViaPipe : public Sink { 164 class ViaPipe : public Sink {
148 public: 165 public:
149 explicit ViaPipe(Sink*); 166 explicit ViaPipe(Sink*);
150 167
151 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
152 int enclave() const SK_OVERRIDE { return fSink->enclave(); } 168 int enclave() const SK_OVERRIDE { return fSink->enclave(); }
153 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } 169 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); }
154 private: 170 private:
171 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
155 SkAutoTDelete<Sink> fSink; 172 SkAutoTDelete<Sink> fSink;
156 }; 173 };
157 174
158 class ViaSerialization : public Sink { 175 class ViaSerialization : public Sink {
159 public: 176 public:
160 explicit ViaSerialization(Sink*); 177 explicit ViaSerialization(Sink*);
161 178
162 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
163 int enclave() const SK_OVERRIDE { return fSink->enclave(); } 179 int enclave() const SK_OVERRIDE { return fSink->enclave(); }
164 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } 180 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); }
165 private: 181 private:
182 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
183
166 SkAutoTDelete<Sink> fSink; 184 SkAutoTDelete<Sink> fSink;
167 }; 185 };
168 186
169 class ViaTiles : public Sink { 187 class ViaTiles : public Sink {
170 public: 188 public:
171 ViaTiles(int w, int h, SkBBHFactory*, Sink*); 189 ViaTiles(int w, int h, SkBBHFactory*, Sink*);
172 190
173 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
174 int enclave() const SK_OVERRIDE { return fSink->enclave(); } 191 int enclave() const SK_OVERRIDE { return fSink->enclave(); }
175 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } 192 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); }
176 private: 193 private:
194 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
195
177 const int fW, fH; 196 const int fW, fH;
178 SkAutoTDelete<SkBBHFactory> fFactory; 197 SkAutoTDelete<SkBBHFactory> fFactory;
179 SkAutoTDelete<Sink> fSink; 198 SkAutoTDelete<Sink> fSink;
180 }; 199 };
181 200
182 class NullSink : public Sink { 201 class NullSink : public Sink {
183 public: 202 public:
184 Error draw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE { 203 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
204 const char* fileExtension() const SK_OVERRIDE { return ""; }
205 private:
206 Error onDraw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE {
185 return src.draw(SkCreateNullCanvas()); 207 return src.draw(SkCreateNullCanvas());
186 } 208 }
187 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
188 const char* fileExtension() const SK_OVERRIDE { return ""; }
189 }; 209 };
190 210
191 } // namespace DM 211 } // namespace DM
192 212
193 #endif//DMSrcSink_DEFINED 213 #endif//DMSrcSink_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698