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

Side by Side Diff: dm/DMSrcSink.cpp

Issue 894013002: patch from issue 886233004 at patchset 40001 (http://crrev.com/886233004#ps40001) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase 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
« no previous file with comments | « dm/DMSrcSink.h ('k') | include/gpu/GrContext.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include "DMSrcSink.h" 1 #include "DMSrcSink.h"
2 #include "SamplePipeControllers.h" 2 #include "SamplePipeControllers.h"
3 #include "SkCommonFlags.h" 3 #include "SkCommonFlags.h"
4 #include "SkDocument.h" 4 #include "SkDocument.h"
5 #include "SkMultiPictureDraw.h" 5 #include "SkMultiPictureDraw.h"
6 #include "SkOSFile.h" 6 #include "SkOSFile.h"
7 #include "SkPictureRecorder.h" 7 #include "SkPictureRecorder.h"
8 #include "SkRandom.h" 8 #include "SkRandom.h"
9 #include "SkSVGDevice.h" 9 #include "SkSVGDevice.h"
10 #include "SkStream.h" 10 #include "SkStream.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 124
125 SkISize SKPSrc::size() const { 125 SkISize SKPSrc::size() const {
126 // This may be unnecessarily large. 126 // This may be unnecessarily large.
127 return kSKPViewport.roundOut().size(); 127 return kSKPViewport.roundOut().size();
128 } 128 }
129 129
130 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } 130 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); }
131 131
132 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 132 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
133 133
134 DEFINE_bool(gpuStats, false, "Append GPU stats to the log for each GPU task?");
135
134 GPUSink::GPUSink(GrContextFactory::GLContextType ct, 136 GPUSink::GPUSink(GrContextFactory::GLContextType ct,
135 GrGLStandard api, 137 GrGLStandard api,
136 int samples, 138 int samples,
137 bool dfText, 139 bool dfText,
138 bool threaded) 140 bool threaded)
139 : fContextType(ct) 141 : fContextType(ct)
140 , fGpuAPI(api) 142 , fGpuAPI(api)
141 , fSampleCount(samples) 143 , fSampleCount(samples)
142 , fUseDFText(dfText) 144 , fUseDFText(dfText)
143 , fThreaded(threaded) {} 145 , fThreaded(threaded) {}
144 146
145 int GPUSink::enclave() const { 147 int GPUSink::enclave() const {
146 return fThreaded ? kAnyThread_Enclave : kGPU_Enclave; 148 return fThreaded ? kAnyThread_Enclave : kGPU_Enclave;
147 } 149 }
148 150
149 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const { 151 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) co nst {
150 GrContextFactory factory; 152 GrContextFactory factory;
151 const SkISize size = src.size(); 153 const SkISize size = src.size();
152 const SkImageInfo info = 154 const SkImageInfo info =
153 SkImageInfo::Make(size.width(), size.height(), kN32_SkColorType, kPremul _SkAlphaType); 155 SkImageInfo::Make(size.width(), size.height(), kN32_SkColorType, kPremul _SkAlphaType);
154 SkAutoTUnref<SkSurface> surface( 156 SkAutoTUnref<SkSurface> surface(
155 NewGpuSurface(&factory, fContextType, fGpuAPI, info, fSampleCount, f UseDFText)); 157 NewGpuSurface(&factory, fContextType, fGpuAPI, info, fSampleCount, f UseDFText));
156 if (!surface) { 158 if (!surface) {
157 return "Could not create a surface."; 159 return "Could not create a surface.";
158 } 160 }
159 SkCanvas* canvas = surface->getCanvas(); 161 SkCanvas* canvas = surface->getCanvas();
160 Error err = src.draw(canvas); 162 Error err = src.draw(canvas);
161 if (!err.isEmpty()) { 163 if (!err.isEmpty()) {
162 return err; 164 return err;
163 } 165 }
164 canvas->flush(); 166 canvas->flush();
167 if (FLAGS_gpuStats) {
168 canvas->getGrContext()->dumpCacheStats(log);
169 canvas->getGrContext()->dumpGpuStats(log);
170 }
165 dst->allocPixels(info); 171 dst->allocPixels(info);
166 canvas->readPixels(dst, 0,0); 172 canvas->readPixels(dst, 0,0);
167 if (FLAGS_abandonGpuContext) { 173 if (FLAGS_abandonGpuContext) {
168 factory.abandonContexts(); 174 factory.abandonContexts();
169 } 175 }
170 return ""; 176 return "";
171 } 177 }
172 178
173 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 179 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
174 180
175 PDFSink::PDFSink() {} 181 PDFSink::PDFSink() {}
176 182
177 Error PDFSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { 183 Error PDFSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
178 // Print the given DM:Src to a PDF, breaking on 8.5x11 pages. 184 // Print the given DM:Src to a PDF, breaking on 8.5x11 pages.
179 SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(dst)); 185 SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(dst));
180 186
181 int width = src.size().width(), 187 int width = src.size().width(),
182 height = src.size().height(); 188 height = src.size().height();
183 189
184 const int kLetterWidth = 612, // 8.5 * 72 190 const int kLetterWidth = 612, // 8.5 * 72
185 kLetterHeight = 792; // 11 * 72 191 kLetterHeight = 792; // 11 * 72
186 const SkRect letter = SkRect::MakeWH(SkIntToScalar(kLetterWidth), 192 const SkRect letter = SkRect::MakeWH(SkIntToScalar(kLetterWidth),
187 SkIntToScalar(kLetterHeight)); 193 SkIntToScalar(kLetterHeight));
(...skipping 18 matching lines...) Expand all
206 } 212 }
207 doc->close(); 213 doc->close();
208 dst->flush(); 214 dst->flush();
209 return ""; 215 return "";
210 } 216 }
211 217
212 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 218 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
213 219
214 SKPSink::SKPSink() {} 220 SKPSink::SKPSink() {}
215 221
216 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { 222 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
217 SkSize size; 223 SkSize size;
218 size = src.size(); 224 size = src.size();
219 SkPictureRecorder recorder; 225 SkPictureRecorder recorder;
220 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); 226 Error err = src.draw(recorder.beginRecording(size.width(), size.height()));
221 if (!err.isEmpty()) { 227 if (!err.isEmpty()) {
222 return err; 228 return err;
223 } 229 }
224 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); 230 SkAutoTUnref<SkPicture> pic(recorder.endRecording());
225 pic->serialize(dst); 231 pic->serialize(dst);
226 return ""; 232 return "";
227 } 233 }
228 234
229 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 235 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
230 236
231 SVGSink::SVGSink() {} 237 SVGSink::SVGSink() {}
232 238
233 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { 239 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
234 SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst)); 240 SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst));
235 SkCanvas canvas(device); 241 SkCanvas canvas(device);
236 return src.draw(&canvas); 242 return src.draw(&canvas);
237 } 243 }
238 244
239 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 245 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
240 246
241 RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {} 247 RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {}
242 248
243 Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const { 249 Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) con st {
244 const SkISize size = src.size(); 250 const SkISize size = src.size();
245 // If there's an appropriate alpha type for this color type, use it, otherwi se use premul. 251 // If there's an appropriate alpha type for this color type, use it, otherwi se use premul.
246 SkAlphaType alphaType = kPremul_SkAlphaType; 252 SkAlphaType alphaType = kPremul_SkAlphaType;
247 (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType); 253 (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType);
248 254
249 dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType, alphaType)); 255 dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType, alphaType));
250 dst->eraseColor(SK_ColorTRANSPARENT); 256 dst->eraseColor(SK_ColorTRANSPARENT);
251 SkCanvas canvas(*dst); 257 SkCanvas canvas(*dst);
252 return src.draw(&canvas); 258 return src.draw(&canvas);
253 } 259 }
254 260
255 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 261 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
256 262
257 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sink) {} 263 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sink) {}
258 264
259 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const { 265 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr ing* log) const {
260 // We turn our arguments into a Src, then draw that Src into our Sink to fil l bitmap or stream. 266 // We turn our arguments into a Src, then draw that Src into our Sink to fil l bitmap or stream.
261 struct ProxySrc : public Src { 267 struct ProxySrc : public Src {
262 const Src& fSrc; 268 const Src& fSrc;
263 SkMatrix fMatrix; 269 SkMatrix fMatrix;
264 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) { } 270 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) { }
265 271
266 Error draw(SkCanvas* canvas) const SK_OVERRIDE { 272 Error draw(SkCanvas* canvas) const SK_OVERRIDE {
267 canvas->concat(fMatrix); 273 canvas->concat(fMatrix);
268 return fSrc.draw(canvas); 274 return fSrc.draw(canvas);
269 } 275 }
270 SkISize size() const SK_OVERRIDE { return fSrc.size(); } 276 SkISize size() const SK_OVERRIDE { return fSrc.size(); }
271 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this. 277 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this.
272 } proxy(src, fMatrix); 278 } proxy(src, fMatrix);
273 return fSink->draw(proxy, bitmap, stream); 279 return fSink->draw(proxy, bitmap, stream, log);
274 } 280 }
275 281
276 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 282 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
277 283
278 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} 284 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {}
279 285
280 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const { 286 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin g* log) const {
281 // We turn ourselves into another Src that draws our argument into bitmap/st ream via pipe. 287 // We turn ourselves into another Src that draws our argument into bitmap/st ream via pipe.
282 struct ProxySrc : public Src { 288 struct ProxySrc : public Src {
283 const Src& fSrc; 289 const Src& fSrc;
284 ProxySrc(const Src& src) : fSrc(src) {} 290 ProxySrc(const Src& src) : fSrc(src) {}
285 291
286 Error draw(SkCanvas* canvas) const SK_OVERRIDE { 292 Error draw(SkCanvas* canvas) const SK_OVERRIDE {
287 SkISize size = this->size(); 293 SkISize size = this->size();
288 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); 294 PipeController controller(canvas, &SkImageDecoder::DecodeMemory);
289 SkGPipeWriter pipe; 295 SkGPipeWriter pipe;
290 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does n't use any flags. 296 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does n't use any flags.
291 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width (), size.height())); 297 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width (), size.height()));
292 } 298 }
293 SkISize size() const SK_OVERRIDE { return fSrc.size(); } 299 SkISize size() const SK_OVERRIDE { return fSrc.size(); }
294 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this. 300 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this.
295 } proxy(src); 301 } proxy(src);
296 return fSink->draw(proxy, bitmap, stream); 302 return fSink->draw(proxy, bitmap, stream, log);
297 } 303 }
298 304
299 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 305 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
300 306
301 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} 307 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {}
302 308
303 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream ) const { 309 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream , SkString* log)
310 const {
304 // Record our Src into a picture. 311 // Record our Src into a picture.
305 SkSize size; 312 SkSize size;
306 size = src.size(); 313 size = src.size();
307 SkPictureRecorder recorder; 314 SkPictureRecorder recorder;
308 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); 315 Error err = src.draw(recorder.beginRecording(size.width(), size.height()));
309 if (!err.isEmpty()) { 316 if (!err.isEmpty()) {
310 return err; 317 return err;
311 } 318 }
312 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); 319 SkAutoTUnref<SkPicture> pic(recorder.endRecording());
313 320
314 // Serialize it and then deserialize it. 321 // Serialize it and then deserialize it.
315 SkDynamicMemoryWStream wStream; 322 SkDynamicMemoryWStream wStream;
316 pic->serialize(&wStream); 323 pic->serialize(&wStream);
317 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); 324 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream());
318 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); 325 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream));
319 326
320 // Turn that deserialized picture into a Src, draw it into our Sink to fill bitmap or stream. 327 // Turn that deserialized picture into a Src, draw it into our Sink to fill bitmap or stream.
321 struct ProxySrc : public Src { 328 struct ProxySrc : public Src {
322 const SkPicture* fPic; 329 const SkPicture* fPic;
323 const SkISize fSize; 330 const SkISize fSize;
324 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} 331 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {}
325 332
326 Error draw(SkCanvas* canvas) const SK_OVERRIDE { 333 Error draw(SkCanvas* canvas) const SK_OVERRIDE {
327 canvas->drawPicture(fPic); 334 canvas->drawPicture(fPic);
328 return ""; 335 return "";
329 } 336 }
330 SkISize size() const SK_OVERRIDE { return fSize; } 337 SkISize size() const SK_OVERRIDE { return fSize; }
331 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this. 338 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this.
332 } proxy(deserialized, src.size()); 339 } proxy(deserialized, src.size());
333 return fSink->draw(proxy, bitmap, stream); 340 return fSink->draw(proxy, bitmap, stream, log);
334 } 341 }
335 342
336 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 343 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
337 344
338 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) 345 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink)
339 : fW(w) 346 : fW(w)
340 , fH(h) 347 , fH(h)
341 , fFactory(factory) 348 , fFactory(factory)
342 , fSink(sink) {} 349 , fSink(sink) {}
343 350
344 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const { 351 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const {
345 // Record our Src into a picture. 352 // Record our Src into a picture.
346 SkSize size; 353 SkSize size;
347 size = src.size(); 354 size = src.size();
348 SkPictureRecorder recorder; 355 SkPictureRecorder recorder;
349 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF actory.get())); 356 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF actory.get()));
350 if (!err.isEmpty()) { 357 if (!err.isEmpty()) {
351 return err; 358 return err;
352 } 359 }
353 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); 360 SkAutoTUnref<SkPicture> pic(recorder.endRecording());
354 361
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn apshot()); 396 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn apshot());
390 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar( j*fH)); 397 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar( j*fH));
391 } 398 }
392 } 399 }
393 surfaces.unrefAll(); 400 surfaces.unrefAll();
394 return ""; 401 return "";
395 } 402 }
396 SkISize size() const SK_OVERRIDE { return fSize; } 403 SkISize size() const SK_OVERRIDE { return fSize; }
397 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this. 404 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this.
398 } proxy(fW, fH, pic, src.size()); 405 } proxy(fW, fH, pic, src.size());
399 return fSink->draw(proxy, bitmap, stream); 406 return fSink->draw(proxy, bitmap, stream, log);
400 } 407 }
401 408
402 } // namespace DM 409 } // namespace DM
OLDNEW
« no previous file with comments | « dm/DMSrcSink.h ('k') | include/gpu/GrContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698