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

Side by Side Diff: tools/PictureRenderer.cpp

Issue 291843010: Call write() within render_pictures but not bench_pictures (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: disable write() calls except in render_pictures Created 6 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
« no previous file with comments | « tools/PictureRenderer.h ('k') | tools/render_pictures_main.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "PictureRenderer.h" 8 #include "PictureRenderer.h"
9 #include "picture_utils.h" 9 #include "picture_utils.h"
10 #include "SamplePipeControllers.h" 10 #include "SamplePipeControllers.h"
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 SkGPipeWriter writer; 391 SkGPipeWriter writer;
392 SkCanvas* pipeCanvas = writer.startRecording(&pipeController); 392 SkCanvas* pipeCanvas = writer.startRecording(&pipeController);
393 pipeCanvas->drawPicture(*fPicture); 393 pipeCanvas->drawPicture(*fPicture);
394 writer.endRecording(); 394 writer.endRecording();
395 fCanvas->flush(); 395 fCanvas->flush();
396 if (NULL != out) { 396 if (NULL != out) {
397 *out = SkNEW(SkBitmap); 397 *out = SkNEW(SkBitmap);
398 setup_bitmap(*out, fPicture->width(), fPicture->height()); 398 setup_bitmap(*out, fPicture->width(), fPicture->height());
399 fCanvas->readPixels(*out, 0, 0); 399 fCanvas->readPixels(*out, 0, 0);
400 } 400 }
401 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSummar yPtr, 401 if (fEnableWrites) {
402 fUseChecksumBasedFilenames); 402 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSu mmaryPtr,
403 fUseChecksumBasedFilenames);
404 } else {
405 return true;
406 }
403 } 407 }
404 408
405 SkString PipePictureRenderer::getConfigNameInternal() { 409 SkString PipePictureRenderer::getConfigNameInternal() {
406 return SkString("pipe"); 410 return SkString("pipe");
407 } 411 }
408 412
409 //////////////////////////////////////////////////////////////////////////////// /////////////// 413 //////////////////////////////////////////////////////////////////////////////// ///////////////
410 414
411 void SimplePictureRenderer::init(SkPicture* picture, const SkString* writePath, 415 void SimplePictureRenderer::init(SkPicture* picture, const SkString* writePath,
412 const SkString* mismatchPath, const SkString* i nputFilename, 416 const SkString* mismatchPath, const SkString* i nputFilename,
413 bool useChecksumBasedFilenames) { 417 bool useChecksumBasedFilenames) {
414 INHERITED::init(picture, writePath, mismatchPath, inputFilename, useChecksum BasedFilenames); 418 INHERITED::init(picture, writePath, mismatchPath, inputFilename, useChecksum BasedFilenames);
415 this->buildBBoxHierarchy(); 419 this->buildBBoxHierarchy();
416 } 420 }
417 421
418 bool SimplePictureRenderer::render(SkBitmap** out) { 422 bool SimplePictureRenderer::render(SkBitmap** out) {
419 SkASSERT(fCanvas.get() != NULL); 423 SkASSERT(fCanvas.get() != NULL);
420 SkASSERT(NULL != fPicture); 424 SkASSERT(NULL != fPicture);
421 if (NULL == fCanvas.get() || NULL == fPicture) { 425 if (NULL == fCanvas.get() || NULL == fPicture) {
422 return false; 426 return false;
423 } 427 }
424 428
425 fCanvas->drawPicture(*fPicture); 429 fCanvas->drawPicture(*fPicture);
426 fCanvas->flush(); 430 fCanvas->flush();
427 if (NULL != out) { 431 if (NULL != out) {
428 *out = SkNEW(SkBitmap); 432 *out = SkNEW(SkBitmap);
429 setup_bitmap(*out, fPicture->width(), fPicture->height()); 433 setup_bitmap(*out, fPicture->width(), fPicture->height());
430 fCanvas->readPixels(*out, 0, 0); 434 fCanvas->readPixels(*out, 0, 0);
431 } 435 }
432 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSummar yPtr, 436 if (fEnableWrites) {
433 fUseChecksumBasedFilenames); 437 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSu mmaryPtr,
438 fUseChecksumBasedFilenames);
439 } else {
440 return true;
441 }
434 } 442 }
435 443
436 SkString SimplePictureRenderer::getConfigNameInternal() { 444 SkString SimplePictureRenderer::getConfigNameInternal() {
437 return SkString("simple"); 445 return SkString("simple");
438 } 446 }
439 447
440 //////////////////////////////////////////////////////////////////////////////// /////////////// 448 //////////////////////////////////////////////////////////////////////////////// ///////////////
441 449
442 TiledPictureRenderer::TiledPictureRenderer() 450 TiledPictureRenderer::TiledPictureRenderer()
443 : fTileWidth(kDefaultTileWidth) 451 : fTileWidth(kDefaultTileWidth)
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 641
634 SkBitmap bitmap; 642 SkBitmap bitmap;
635 if (out){ 643 if (out){
636 *out = SkNEW(SkBitmap); 644 *out = SkNEW(SkBitmap);
637 setup_bitmap(*out, fPicture->width(), fPicture->height()); 645 setup_bitmap(*out, fPicture->width(), fPicture->height());
638 setup_bitmap(&bitmap, fTileWidth, fTileHeight); 646 setup_bitmap(&bitmap, fTileWidth, fTileHeight);
639 } 647 }
640 bool success = true; 648 bool success = true;
641 for (int i = 0; i < fTileRects.count(); ++i) { 649 for (int i = 0; i < fTileRects.count(); ++i) {
642 draw_tile_to_canvas(fCanvas, fTileRects[i], fPicture); 650 draw_tile_to_canvas(fCanvas, fTileRects[i], fPicture);
643 success &= write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJs onSummaryPtr, 651 if (fEnableWrites) {
644 fUseChecksumBasedFilenames, &i); 652 success &= write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSummaryPtr,
653 fUseChecksumBasedFilenames, &i);
654 }
645 if (NULL != out) { 655 if (NULL != out) {
646 if (fCanvas->readPixels(&bitmap, 0, 0)) { 656 if (fCanvas->readPixels(&bitmap, 0, 0)) {
647 // Add this tile to the entire bitmap. 657 // Add this tile to the entire bitmap.
648 bitmapCopyAtOffset(bitmap, *out, SkScalarFloorToInt(fTileRects[i ].left()), 658 bitmapCopyAtOffset(bitmap, *out, SkScalarFloorToInt(fTileRects[i ].left()),
649 SkScalarFloorToInt(fTileRects[i].top())); 659 SkScalarFloorToInt(fTileRects[i].top()));
650 } else { 660 } else {
651 success = false; 661 success = false;
652 } 662 }
653 } 663 }
654 } 664 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 } 703 }
694 704
695 //////////////////////////////////////////////////////////////////////////////// /////////////// 705 //////////////////////////////////////////////////////////////////////////////// ///////////////
696 706
697 // Holds all of the information needed to draw a set of tiles. 707 // Holds all of the information needed to draw a set of tiles.
698 class CloneData : public SkRunnable { 708 class CloneData : public SkRunnable {
699 709
700 public: 710 public:
701 CloneData(SkPicture* clone, SkCanvas* canvas, SkTDArray<SkRect>& rects, int start, int end, 711 CloneData(SkPicture* clone, SkCanvas* canvas, SkTDArray<SkRect>& rects, int start, int end,
702 SkRunnable* done, ImageResultsAndExpectations* jsonSummaryPtr, 712 SkRunnable* done, ImageResultsAndExpectations* jsonSummaryPtr,
703 bool useChecksumBasedFilenames) 713 bool useChecksumBasedFilenames, bool enableWrites)
704 : fClone(clone) 714 : fClone(clone)
705 , fCanvas(canvas) 715 , fCanvas(canvas)
716 , fEnableWrites(enableWrites)
706 , fRects(rects) 717 , fRects(rects)
707 , fStart(start) 718 , fStart(start)
708 , fEnd(end) 719 , fEnd(end)
709 , fSuccess(NULL) 720 , fSuccess(NULL)
710 , fDone(done) 721 , fDone(done)
711 , fJsonSummaryPtr(jsonSummaryPtr) 722 , fJsonSummaryPtr(jsonSummaryPtr)
712 , fUseChecksumBasedFilenames(useChecksumBasedFilenames) { 723 , fUseChecksumBasedFilenames(useChecksumBasedFilenames) {
713 SkASSERT(fDone != NULL); 724 SkASSERT(fDone != NULL);
714 } 725 }
715 726
716 virtual void run() SK_OVERRIDE { 727 virtual void run() SK_OVERRIDE {
717 SkGraphics::SetTLSFontCacheLimit(1024 * 1024); 728 SkGraphics::SetTLSFontCacheLimit(1024 * 1024);
718 729
719 SkBitmap bitmap; 730 SkBitmap bitmap;
720 if (fBitmap != NULL) { 731 if (fBitmap != NULL) {
721 // All tiles are the same size. 732 // All tiles are the same size.
722 setup_bitmap(&bitmap, SkScalarFloorToInt(fRects[0].width()), SkScala rFloorToInt(fRects[0].height())); 733 setup_bitmap(&bitmap, SkScalarFloorToInt(fRects[0].width()), SkScala rFloorToInt(fRects[0].height()));
723 } 734 }
724 735
725 for (int i = fStart; i < fEnd; i++) { 736 for (int i = fStart; i < fEnd; i++) {
726 draw_tile_to_canvas(fCanvas, fRects[i], fClone); 737 draw_tile_to_canvas(fCanvas, fRects[i], fClone);
727 if (!write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJson SummaryPtr, 738 if (fEnableWrites) {
728 fUseChecksumBasedFilenames, &i) 739 if (!write(fCanvas, fWritePath, fMismatchPath, fInputFilename, f JsonSummaryPtr,
729 && fSuccess != NULL) { 740 fUseChecksumBasedFilenames, &i)
730 *fSuccess = false; 741 && fSuccess != NULL) {
731 // If one tile fails to write to a file, do not continue drawing the rest.
732 break;
733 }
734 if (fBitmap != NULL) {
735 if (fCanvas->readPixels(&bitmap, 0, 0)) {
736 SkAutoLockPixels alp(*fBitmap);
737 bitmapCopyAtOffset(bitmap, fBitmap, SkScalarFloorToInt(fRect s[i].left()),
738 SkScalarFloorToInt(fRects[i].top()));
739 } else {
740 *fSuccess = false; 742 *fSuccess = false;
741 // If one tile fails to read pixels, do not continue drawing the rest. 743 // If one tile fails to write to a file, do not continue dra wing the rest.
742 break; 744 break;
743 } 745 }
746 if (fBitmap != NULL) {
747 if (fCanvas->readPixels(&bitmap, 0, 0)) {
748 SkAutoLockPixels alp(*fBitmap);
749 bitmapCopyAtOffset(bitmap, fBitmap, SkScalarFloorToInt(f Rects[i].left()),
750 SkScalarFloorToInt(fRects[i].top()));
751 } else {
752 *fSuccess = false;
753 // If one tile fails to read pixels, do not continue dra wing the rest.
754 break;
755 }
756 }
744 } 757 }
745 } 758 }
746 fDone->run(); 759 fDone->run();
747 } 760 }
748 761
749 void setPathsAndSuccess(const SkString& writePath, const SkString& mismatchP ath, 762 void setPathsAndSuccess(const SkString& writePath, const SkString& mismatchP ath,
750 const SkString& inputFilename, bool* success) { 763 const SkString& inputFilename, bool* success) {
751 fWritePath.set(writePath); 764 fWritePath.set(writePath);
752 fMismatchPath.set(mismatchPath); 765 fMismatchPath.set(mismatchPath);
753 fInputFilename.set(inputFilename); 766 fInputFilename.set(inputFilename);
754 fSuccess = success; 767 fSuccess = success;
755 } 768 }
756 769
757 void setBitmap(SkBitmap* bitmap) { 770 void setBitmap(SkBitmap* bitmap) {
758 fBitmap = bitmap; 771 fBitmap = bitmap;
759 } 772 }
760 773
761 private: 774 private:
762 // All pointers unowned. 775 // All pointers unowned.
763 SkPicture* fClone; // Picture to draw from. Each CloneData has a unique one which 776 SkPicture* fClone; // Picture to draw from. Each CloneData has a unique one which
764 // is threadsafe. 777 // is threadsafe.
765 SkCanvas* fCanvas; // Canvas to draw to. Reused for each tile. 778 SkCanvas* fCanvas; // Canvas to draw to. Reused for each tile.
779 bool fEnableWrites; // TODO(epoger): Temporary hack; see decla ration of
780 // fEnableWrites in PictureRenderer.h.
766 SkString fWritePath; // If not empty, write all results into this directory. 781 SkString fWritePath; // If not empty, write all results into this directory.
767 SkString fMismatchPath; // If not empty, write all unexpected res ults into this dir. 782 SkString fMismatchPath; // If not empty, write all unexpected res ults into this dir.
768 SkString fInputFilename; // Filename of input SkPicture file. 783 SkString fInputFilename; // Filename of input SkPicture file.
769 SkTDArray<SkRect>& fRects; // All tiles of the picture. 784 SkTDArray<SkRect>& fRects; // All tiles of the picture.
770 const int fStart; // Range of tiles drawn by this thread. 785 const int fStart; // Range of tiles drawn by this thread.
771 const int fEnd; 786 const int fEnd;
772 bool* fSuccess; // Only meaningful if path is non-null. Shar ed by all threads, 787 bool* fSuccess; // Only meaningful if path is non-null. Shar ed by all threads,
773 // and only set to false upon failure to wri te to a PNG. 788 // and only set to false upon failure to wri te to a PNG.
774 SkRunnable* fDone; 789 SkRunnable* fDone;
775 SkBitmap* fBitmap; 790 SkBitmap* fBitmap;
(...skipping 30 matching lines...) Expand all
806 if (i == fNumThreads-1) { 821 if (i == fNumThreads-1) {
807 // The last set will use the original SkPicture. 822 // The last set will use the original SkPicture.
808 pic = fPicture; 823 pic = fPicture;
809 } else { 824 } else {
810 pic = &fPictureClones[i]; 825 pic = &fPictureClones[i];
811 } 826 }
812 const int start = i * chunkSize; 827 const int start = i * chunkSize;
813 const int end = SkMin32(start + chunkSize, fTileRects.count()); 828 const int end = SkMin32(start + chunkSize, fTileRects.count());
814 fCloneData[i] = SkNEW_ARGS(CloneData, 829 fCloneData[i] = SkNEW_ARGS(CloneData,
815 (pic, fCanvasPool[i], fTileRects, start, end, &fCountdown, 830 (pic, fCanvasPool[i], fTileRects, start, end, &fCountdown,
816 fJsonSummaryPtr, useChecksumBasedFilenames)) ; 831 fJsonSummaryPtr, useChecksumBasedFilenames, fEnableWrites));
817 } 832 }
818 } 833 }
819 834
820 bool MultiCorePictureRenderer::render(SkBitmap** out) { 835 bool MultiCorePictureRenderer::render(SkBitmap** out) {
821 bool success = true; 836 bool success = true;
822 if (!fWritePath.isEmpty() || !fMismatchPath.isEmpty()) { 837 if (!fWritePath.isEmpty() || !fMismatchPath.isEmpty()) {
823 for (int i = 0; i < fNumThreads-1; i++) { 838 for (int i = 0; i < fNumThreads-1; i++) {
824 fCloneData[i]->setPathsAndSuccess(fWritePath, fMismatchPath, fInputF ilename, &success); 839 fCloneData[i]->setPathsAndSuccess(fWritePath, fMismatchPath, fInputF ilename, &success);
825 } 840 }
826 } 841 }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 virtual SkString getConfigNameInternal() SK_OVERRIDE { 964 virtual SkString getConfigNameInternal() SK_OVERRIDE {
950 return SkString("picture_clone"); 965 return SkString("picture_clone");
951 } 966 }
952 }; 967 };
953 968
954 PictureRenderer* CreatePictureCloneRenderer() { 969 PictureRenderer* CreatePictureCloneRenderer() {
955 return SkNEW(PictureCloneRenderer); 970 return SkNEW(PictureCloneRenderer);
956 } 971 }
957 972
958 } // namespace sk_tools 973 } // namespace sk_tools
OLDNEW
« no previous file with comments | « tools/PictureRenderer.h ('k') | tools/render_pictures_main.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698