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

Side by Side Diff: tools/PictureRenderer.h

Issue 202983003: add --writeChecksumBasedFilenames flag to render_pictures (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 9 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 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef PictureRenderer_DEFINED 8 #ifndef PictureRenderer_DEFINED
9 #define PictureRenderer_DEFINED 9 #define PictureRenderer_DEFINED
10 10
(...skipping 26 matching lines...) Expand all
37 namespace sk_tools { 37 namespace sk_tools {
38 38
39 class TiledPictureRenderer; 39 class TiledPictureRenderer;
40 40
41 /** 41 /**
42 * Class for collecting image results (checksums) as we go. 42 * Class for collecting image results (checksums) as we go.
43 */ 43 */
44 class ImageResultsSummary { 44 class ImageResultsSummary {
45 public: 45 public:
46 /** 46 /**
47 * Adds this bitmap hash to the summary of results.
48 *
49 * @param testName name of the test
50 * @param hash hash to store
51 */
52 void add(const char *testName, uint64_t hash);
53
54 /**
47 * Adds this bitmap's hash to the summary of results. 55 * Adds this bitmap's hash to the summary of results.
48 * 56 *
49 * @param testName name of the test 57 * @param testName name of the test
50 * @param bitmap bitmap to store the hash of 58 * @param bitmap bitmap to store the hash of
51 */ 59 */
52 void add(const char *testName, const SkBitmap& bitmap); 60 void add(const char *testName, const SkBitmap& bitmap);
53 61
54 /** 62 /**
55 * Writes the summary (as constructed so far) to a file. 63 * Writes the summary (as constructed so far) to a file.
56 * 64 *
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 }; 106 };
99 107
100 SK_COMPILE_ASSERT(!(kMaskFilter_DrawFilterFlag & SkPaint::kAllFlags), maskfi lter_flag_must_be_greater); 108 SK_COMPILE_ASSERT(!(kMaskFilter_DrawFilterFlag & SkPaint::kAllFlags), maskfi lter_flag_must_be_greater);
101 SK_COMPILE_ASSERT(!(kHinting_DrawFilterFlag & SkPaint::kAllFlags), 109 SK_COMPILE_ASSERT(!(kHinting_DrawFilterFlag & SkPaint::kAllFlags),
102 hinting_flag_must_be_greater); 110 hinting_flag_must_be_greater);
103 SK_COMPILE_ASSERT(!(kSlightHinting_DrawFilterFlag & SkPaint::kAllFlags), 111 SK_COMPILE_ASSERT(!(kSlightHinting_DrawFilterFlag & SkPaint::kAllFlags),
104 slight_hinting_flag_must_be_greater); 112 slight_hinting_flag_must_be_greater);
105 113
106 /** 114 /**
107 * Called with each new SkPicture to render. 115 * Called with each new SkPicture to render.
116 *
117 * @param pict The SkPicture to render.
118 * @param outputDir The output directory within which this renderer should w rite files,
119 * or empty string if this renderer should not write files at all.
120 * @param intputFilename The name of the input file we are rendering.
121 * @param useChecksumBasedFilenames Whether to use checksum-based filenames when writing
122 * bitmap images to disk.
108 */ 123 */
109 virtual void init(SkPicture* pict); 124 virtual void init(SkPicture* pict, const SkString& outputDir,
125 const SkString& inputFilename, bool useChecksumBasedFilena mes);
110 126
111 /** 127 /**
112 * Set the viewport so that only the portion listed gets drawn. 128 * Set the viewport so that only the portion listed gets drawn.
113 */ 129 */
114 void setViewport(SkISize size) { fViewport = size; } 130 void setViewport(SkISize size) { fViewport = size; }
115 131
116 /** 132 /**
117 * Set the scale factor at which draw the picture. 133 * Set the scale factor at which draw the picture.
118 */ 134 */
119 void setScaleFactor(SkScalar scale) { fScaleFactor = scale; } 135 void setScaleFactor(SkScalar scale) { fScaleFactor = scale; }
120 136
121 /** 137 /**
122 * Perform any setup that should done prior to each iteration of render() wh ich should not be 138 * Perform any setup that should done prior to each iteration of render() wh ich should not be
123 * timed. 139 * timed.
124 */ 140 */
125 virtual void setup() {} 141 virtual void setup() {}
126 142
127 /** 143 /**
128 * Perform work that is to be timed. Typically this is rendering, but is als o used for recording 144 * Perform the work. If this is being called within the context of bench_pi ctures,
129 * and preparing picture for playback by the subclasses which do those. 145 * this is the step that will be timed.
130 * If path is non-null, subclass implementations should call write(). 146 *
131 * @param path If non-null, also write the output to the file specified by p ath. path should 147 * Typically "the work" is rendering an SkPicture into a bitmap, but in some subclasses
132 * have no extension; it will be added by write(). 148 * it is recording the source SkPicture into another SkPicture.
133 * @return bool True if rendering succeeded and, if path is non-null, the ou tput was 149 *
134 * successfully written to a file. 150 * If fOutputDir has been specified, the result of the work will be written to that dir.
151 *
152 * @param out If non-null, the implementing subclass MAY allocate an SkBitma p, copy the
153 * output image into it, and return it here. (Some subclasses ig nore this parameter)
154 * @return bool True if rendering succeeded and, if fOutputDir had been spec ified, the output
155 * was successfully written to a file.
135 */ 156 */
136 virtual bool render(const SkString* path, SkBitmap** out = NULL) = 0; 157 virtual bool render(SkBitmap** out = NULL) = 0;
137 158
138 /** 159 /**
139 * Called once finished with a particular SkPicture, before calling init aga in, and before 160 * Called once finished with a particular SkPicture, before calling init aga in, and before
140 * being done with this Renderer. 161 * being done with this Renderer.
141 */ 162 */
142 virtual void end(); 163 virtual void end();
143 164
144 /** 165 /**
145 * If this PictureRenderer is actually a TiledPictureRender, return a pointe r to this as a 166 * If this PictureRenderer is actually a TiledPictureRender, return a pointe r to this as a
146 * TiledPictureRender so its methods can be called. 167 * TiledPictureRender so its methods can be called.
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 385
365 #if SK_SUPPORT_GPU 386 #if SK_SUPPORT_GPU
366 virtual ~PictureRenderer() { 387 virtual ~PictureRenderer() {
367 SkSafeUnref(fGrContext); 388 SkSafeUnref(fGrContext);
368 } 389 }
369 #endif 390 #endif
370 391
371 protected: 392 protected:
372 SkAutoTUnref<SkCanvas> fCanvas; 393 SkAutoTUnref<SkCanvas> fCanvas;
373 SkPicture* fPicture; 394 SkPicture* fPicture;
395 bool fUseChecksumBasedFilenames;
374 ImageResultsSummary* fJsonSummaryPtr; 396 ImageResultsSummary* fJsonSummaryPtr;
375 SkDeviceTypes fDeviceType; 397 SkDeviceTypes fDeviceType;
376 BBoxHierarchyType fBBoxHierarchyType; 398 BBoxHierarchyType fBBoxHierarchyType;
377 DrawFilterFlags fDrawFilters[SkDrawFilter::kTypeCount]; 399 DrawFilterFlags fDrawFilters[SkDrawFilter::kTypeCount];
378 SkString fDrawFiltersConfig; 400 SkString fDrawFiltersConfig;
401 SkString fOutputDir;
402 SkString fInputFilename;
379 SkTileGridPicture::TileGridInfo fGridInfo; // used when fBBoxHierarchyType i s TileGrid 403 SkTileGridPicture::TileGridInfo fGridInfo; // used when fBBoxHierarchyType i s TileGrid
380 404
381 void buildBBoxHierarchy(); 405 void buildBBoxHierarchy();
382 406
383 /** 407 /**
384 * Return the total width that should be drawn. If the viewport width has be en set greater than 408 * Return the total width that should be drawn. If the viewport width has be en set greater than
385 * 0, this will be the minimum of the current SkPicture's width and the view port's width. 409 * 0, this will be the minimum of the current SkPicture's width and the view port's width.
386 */ 410 */
387 int getViewWidth(); 411 int getViewWidth();
388 412
(...skipping 25 matching lines...) Expand all
414 virtual SkString getConfigNameInternal() = 0; 438 virtual SkString getConfigNameInternal() = 0;
415 439
416 typedef SkRefCnt INHERITED; 440 typedef SkRefCnt INHERITED;
417 }; 441 };
418 442
419 /** 443 /**
420 * This class does not do any rendering, but its render function executes record ing, which we want 444 * This class does not do any rendering, but its render function executes record ing, which we want
421 * to time. 445 * to time.
422 */ 446 */
423 class RecordPictureRenderer : public PictureRenderer { 447 class RecordPictureRenderer : public PictureRenderer {
424 virtual bool render(const SkString*, SkBitmap** out = NULL) SK_OVERRIDE; 448 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE;
425 449
426 virtual SkString getPerIterTimeFormat() SK_OVERRIDE { return SkString("%.4f" ); } 450 virtual SkString getPerIterTimeFormat() SK_OVERRIDE { return SkString("%.4f" ); }
427 451
428 virtual SkString getNormalTimeFormat() SK_OVERRIDE { return SkString("%6.4f" ); } 452 virtual SkString getNormalTimeFormat() SK_OVERRIDE { return SkString("%6.4f" ); }
429 453
430 protected: 454 protected:
431 virtual SkCanvas* setupCanvas(int width, int height) SK_OVERRIDE; 455 virtual SkCanvas* setupCanvas(int width, int height) SK_OVERRIDE;
432 456
433 private: 457 private:
434 virtual SkString getConfigNameInternal() SK_OVERRIDE; 458 virtual SkString getConfigNameInternal() SK_OVERRIDE;
435 }; 459 };
436 460
437 class PipePictureRenderer : public PictureRenderer { 461 class PipePictureRenderer : public PictureRenderer {
438 public: 462 public:
439 virtual bool render(const SkString*, SkBitmap** out = NULL) SK_OVERRIDE; 463 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE;
440 464
441 private: 465 private:
442 virtual SkString getConfigNameInternal() SK_OVERRIDE; 466 virtual SkString getConfigNameInternal() SK_OVERRIDE;
443 467
444 typedef PictureRenderer INHERITED; 468 typedef PictureRenderer INHERITED;
445 }; 469 };
446 470
447 class SimplePictureRenderer : public PictureRenderer { 471 class SimplePictureRenderer : public PictureRenderer {
448 public: 472 public:
449 virtual void init(SkPicture* pict) SK_OVERRIDE; 473 virtual void init(SkPicture* pict, const SkString& outputDir,
474 const SkString& inputFilename, bool useChecksumBasedFilena mes) SK_OVERRIDE;
450 475
451 virtual bool render(const SkString*, SkBitmap** out = NULL) SK_OVERRIDE; 476 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE;
452 477
453 private: 478 private:
454 virtual SkString getConfigNameInternal() SK_OVERRIDE; 479 virtual SkString getConfigNameInternal() SK_OVERRIDE;
455 480
456 typedef PictureRenderer INHERITED; 481 typedef PictureRenderer INHERITED;
457 }; 482 };
458 483
459 class TiledPictureRenderer : public PictureRenderer { 484 class TiledPictureRenderer : public PictureRenderer {
460 public: 485 public:
461 TiledPictureRenderer(); 486 TiledPictureRenderer();
462 487
463 virtual void init(SkPicture* pict) SK_OVERRIDE; 488 virtual void init(SkPicture* pict, const SkString& outputDir,
489 const SkString& inputFilename, bool useChecksumBasedFilena mes) SK_OVERRIDE;
464 490
465 /** 491 /**
466 * Renders to tiles, rather than a single canvas. If a path is provided, a s eparate file is 492 * Renders to tiles, rather than a single canvas.
493 * If fOutputDir was provided, a separate file is
467 * created for each tile, named "path0.png", "path1.png", etc. 494 * created for each tile, named "path0.png", "path1.png", etc.
468 * Multithreaded mode currently does not support writing to a file. 495 * Multithreaded mode currently does not support writing to a file.
469 */ 496 */
470 virtual bool render(const SkString* path, SkBitmap** out = NULL) SK_OVERRIDE ; 497 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE;
471 498
472 virtual void end() SK_OVERRIDE; 499 virtual void end() SK_OVERRIDE;
473 500
474 void setTileWidth(int width) { 501 void setTileWidth(int width) {
475 fTileWidth = width; 502 fTileWidth = width;
476 } 503 }
477 504
478 int getTileWidth() const { 505 int getTileWidth() const {
479 return fTileWidth; 506 return fTileWidth;
480 } 507 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 }; 603 };
577 604
578 class CloneData; 605 class CloneData;
579 606
580 class MultiCorePictureRenderer : public TiledPictureRenderer { 607 class MultiCorePictureRenderer : public TiledPictureRenderer {
581 public: 608 public:
582 explicit MultiCorePictureRenderer(int threadCount); 609 explicit MultiCorePictureRenderer(int threadCount);
583 610
584 ~MultiCorePictureRenderer(); 611 ~MultiCorePictureRenderer();
585 612
586 virtual void init(SkPicture* pict) SK_OVERRIDE; 613 virtual void init(SkPicture* pict, const SkString& outputDir,
614 const SkString& inputFilename, bool useChecksumBasedFilena mes) SK_OVERRIDE;
587 615
588 /** 616 /**
589 * Behaves like TiledPictureRenderer::render(), only using multiple threads. 617 * Behaves like TiledPictureRenderer::render(), only using multiple threads.
590 */ 618 */
591 virtual bool render(const SkString* path, SkBitmap** out = NULL) SK_OVERRIDE ; 619 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE;
592 620
593 virtual void end() SK_OVERRIDE; 621 virtual void end() SK_OVERRIDE;
594 622
595 virtual bool supportsTimingIndividualTiles() SK_OVERRIDE { return false; } 623 virtual bool supportsTimingIndividualTiles() SK_OVERRIDE { return false; }
596 624
597 private: 625 private:
598 virtual SkString getConfigNameInternal() SK_OVERRIDE; 626 virtual SkString getConfigNameInternal() SK_OVERRIDE;
599 627
600 const int fNumThreads; 628 const int fNumThreads;
601 SkTDArray<SkCanvas*> fCanvasPool; 629 SkTDArray<SkCanvas*> fCanvasPool;
602 SkThreadPool fThreadPool; 630 SkThreadPool fThreadPool;
603 SkPicture* fPictureClones; 631 SkPicture* fPictureClones;
604 CloneData** fCloneData; 632 CloneData** fCloneData;
605 SkCountdown fCountdown; 633 SkCountdown fCountdown;
606 634
607 typedef TiledPictureRenderer INHERITED; 635 typedef TiledPictureRenderer INHERITED;
608 }; 636 };
609 637
610 /** 638 /**
611 * This class does not do any rendering, but its render function executes turnin g an SkPictureRecord 639 * This class does not do any rendering, but its render function executes turnin g an SkPictureRecord
612 * into an SkPicturePlayback, which we want to time. 640 * into an SkPicturePlayback, which we want to time.
613 */ 641 */
614 class PlaybackCreationRenderer : public PictureRenderer { 642 class PlaybackCreationRenderer : public PictureRenderer {
615 public: 643 public:
616 virtual void setup() SK_OVERRIDE; 644 virtual void setup() SK_OVERRIDE;
617 645
618 virtual bool render(const SkString*, SkBitmap** out = NULL) SK_OVERRIDE; 646 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE;
619 647
620 virtual SkString getPerIterTimeFormat() SK_OVERRIDE { return SkString("%.4f" ); } 648 virtual SkString getPerIterTimeFormat() SK_OVERRIDE { return SkString("%.4f" ); }
621 649
622 virtual SkString getNormalTimeFormat() SK_OVERRIDE { return SkString("%6.4f" ); } 650 virtual SkString getNormalTimeFormat() SK_OVERRIDE { return SkString("%6.4f" ); }
623 651
624 private: 652 private:
625 SkAutoTUnref<SkPicture> fReplayer; 653 SkAutoTUnref<SkPicture> fReplayer;
626 654
627 virtual SkString getConfigNameInternal() SK_OVERRIDE; 655 virtual SkString getConfigNameInternal() SK_OVERRIDE;
628 656
629 typedef PictureRenderer INHERITED; 657 typedef PictureRenderer INHERITED;
630 }; 658 };
631 659
632 extern PictureRenderer* CreateGatherPixelRefsRenderer(); 660 extern PictureRenderer* CreateGatherPixelRefsRenderer();
633 extern PictureRenderer* CreatePictureCloneRenderer(); 661 extern PictureRenderer* CreatePictureCloneRenderer();
634 662
635 } 663 }
636 664
637 #endif // PictureRenderer_DEFINED 665 #endif // PictureRenderer_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698