OLD | NEW |
---|---|
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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
488 void TiledPictureRenderer::init(SkPicture* pict, const SkString* outputDir, | 488 void TiledPictureRenderer::init(SkPicture* pict, const SkString* outputDir, |
489 const SkString* inputFilename, bool useChecksumB asedFilenames) { | 489 const SkString* inputFilename, bool useChecksumB asedFilenames) { |
490 SkASSERT(pict != NULL); | 490 SkASSERT(pict != NULL); |
491 SkASSERT(0 == fTileRects.count()); | 491 SkASSERT(0 == fTileRects.count()); |
492 if (NULL == pict || fTileRects.count() != 0) { | 492 if (NULL == pict || fTileRects.count() != 0) { |
493 return; | 493 return; |
494 } | 494 } |
495 | 495 |
496 // Do not call INHERITED::init(), which would create a (potentially large) c anvas which is not | 496 // Do not call INHERITED::init(), which would create a (potentially large) c anvas which is not |
497 // used by bench_pictures. | 497 // used by bench_pictures. |
498 fPicture = pict; | 498 fPicture = pict; |
bsalomon
2014/03/26 17:29:21
could be
fPicture = SkRef(pict);
robertphillips
2014/03/28 11:48:16
Done.
| |
499 fPicture->ref(); | |
499 this->CopyString(&fOutputDir, outputDir); | 500 this->CopyString(&fOutputDir, outputDir); |
500 this->CopyString(&fInputFilename, inputFilename); | 501 this->CopyString(&fInputFilename, inputFilename); |
501 fUseChecksumBasedFilenames = useChecksumBasedFilenames; | 502 fUseChecksumBasedFilenames = useChecksumBasedFilenames; |
502 fPicture->ref(); | |
503 this->buildBBoxHierarchy(); | 503 this->buildBBoxHierarchy(); |
504 | 504 |
505 if (fTileWidthPercentage > 0) { | 505 if (fTileWidthPercentage > 0) { |
506 fTileWidth = sk_float_ceil2int(float(fTileWidthPercentage * fPicture->wi dth() / 100)); | 506 fTileWidth = sk_float_ceil2int(float(fTileWidthPercentage * fPicture->wi dth() / 100)); |
507 } | 507 } |
508 if (fTileHeightPercentage > 0) { | 508 if (fTileHeightPercentage > 0) { |
509 fTileHeight = sk_float_ceil2int(float(fTileHeightPercentage * fPicture-> height() / 100)); | 509 fTileHeight = sk_float_ceil2int(float(fTileHeightPercentage * fPicture-> height() / 100)); |
510 } | 510 } |
511 | 511 |
512 if (fTileMinPowerOf2Width > 0) { | 512 if (fTileMinPowerOf2Width > 0) { |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
687 } else { | 687 } else { |
688 success = false; | 688 success = false; |
689 } | 689 } |
690 } | 690 } |
691 } | 691 } |
692 return success; | 692 return success; |
693 } | 693 } |
694 | 694 |
695 SkCanvas* TiledPictureRenderer::setupCanvas(int width, int height) { | 695 SkCanvas* TiledPictureRenderer::setupCanvas(int width, int height) { |
696 SkCanvas* canvas = this->INHERITED::setupCanvas(width, height); | 696 SkCanvas* canvas = this->INHERITED::setupCanvas(width, height); |
697 SkASSERT(fPicture != NULL); | 697 SkASSERT(NULL != fPicture); |
698 // Clip the tile to an area that is completely inside both the SkPicture and the viewport. This | 698 // Clip the tile to an area that is completely inside both the SkPicture and the viewport. This |
699 // is mostly important for tiles on the right and bottom edges as they may g o over this area and | 699 // is mostly important for tiles on the right and bottom edges as they may g o over this area and |
700 // the picture may have some commands that draw outside of this area and so should not actually | 700 // the picture may have some commands that draw outside of this area and so should not actually |
701 // be written. | 701 // be written. |
702 // Uses a clipRegion so that it will be unaffected by the scale factor, whic h may have been set | 702 // Uses a clipRegion so that it will be unaffected by the scale factor, whic h may have been set |
703 // by INHERITED::setupCanvas. | 703 // by INHERITED::setupCanvas. |
704 SkRegion clipRegion; | 704 SkRegion clipRegion; |
705 clipRegion.setRect(0, 0, this->getViewWidth(), this->getViewHeight()); | 705 clipRegion.setRect(0, 0, this->getViewWidth(), this->getViewHeight()); |
706 canvas->clipRegion(clipRegion); | 706 canvas->clipRegion(clipRegion); |
707 return canvas; | 707 return canvas; |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
903 return name; | 903 return name; |
904 } | 904 } |
905 | 905 |
906 //////////////////////////////////////////////////////////////////////////////// /////////////// | 906 //////////////////////////////////////////////////////////////////////////////// /////////////// |
907 | 907 |
908 void PlaybackCreationRenderer::setup() { | 908 void PlaybackCreationRenderer::setup() { |
909 fReplayer.reset(this->createPicture()); | 909 fReplayer.reset(this->createPicture()); |
910 SkCanvas* recorder = fReplayer->beginRecording(this->getViewWidth(), this->g etViewHeight(), | 910 SkCanvas* recorder = fReplayer->beginRecording(this->getViewWidth(), this->g etViewHeight(), |
911 this->recordFlags()); | 911 this->recordFlags()); |
912 this->scaleToScaleFactor(recorder); | 912 this->scaleToScaleFactor(recorder); |
913 fPicture->draw(recorder); | 913 recorder->drawPicture(*fPicture); |
914 } | 914 } |
915 | 915 |
916 bool PlaybackCreationRenderer::render(SkBitmap** out) { | 916 bool PlaybackCreationRenderer::render(SkBitmap** out) { |
917 fReplayer->endRecording(); | 917 fReplayer->endRecording(); |
918 // Since this class does not actually render, return false. | 918 // Since this class does not actually render, return false. |
919 return false; | 919 return false; |
920 } | 920 } |
921 | 921 |
922 SkString PlaybackCreationRenderer::getConfigNameInternal() { | 922 SkString PlaybackCreationRenderer::getConfigNameInternal() { |
923 return SkString("playback_creation"); | 923 return SkString("playback_creation"); |
(...skipping 14 matching lines...) Expand all Loading... | |
938 aspectRatio, sortDraws); | 938 aspectRatio, sortDraws); |
939 } | 939 } |
940 }; | 940 }; |
941 | 941 |
942 SkPicture* PictureRenderer::createPicture() { | 942 SkPicture* PictureRenderer::createPicture() { |
943 switch (fBBoxHierarchyType) { | 943 switch (fBBoxHierarchyType) { |
944 case kNone_BBoxHierarchyType: | 944 case kNone_BBoxHierarchyType: |
945 return SkNEW(SkPicture); | 945 return SkNEW(SkPicture); |
946 case kQuadTree_BBoxHierarchyType: | 946 case kQuadTree_BBoxHierarchyType: |
947 return SkNEW_ARGS(SkQuadTreePicture, (SkIRect::MakeWH(fPicture->widt h(), | 947 return SkNEW_ARGS(SkQuadTreePicture, (SkIRect::MakeWH(fPicture->widt h(), |
948 fPicture->height()))); | 948 fPicture->heig ht()))); |
949 case kRTree_BBoxHierarchyType: | 949 case kRTree_BBoxHierarchyType: |
950 return SkNEW(RTreePicture); | 950 return SkNEW(RTreePicture); |
951 case kTileGrid_BBoxHierarchyType: | 951 case kTileGrid_BBoxHierarchyType: |
952 return SkNEW_ARGS(SkTileGridPicture, (fPicture->width(), | 952 return SkNEW_ARGS(SkTileGridPicture, (fPicture->width(), |
953 fPicture->height(), fGridInfo)); | 953 fPicture->height(), fGridInfo) ); |
954 } | 954 } |
955 SkASSERT(0); // invalid bbhType | 955 SkASSERT(0); // invalid bbhType |
956 return NULL; | 956 return NULL; |
957 } | 957 } |
958 | 958 |
959 /////////////////////////////////////////////////////////////////////////////// | 959 /////////////////////////////////////////////////////////////////////////////// |
960 | 960 |
961 class GatherRenderer : public PictureRenderer { | 961 class GatherRenderer : public PictureRenderer { |
962 public: | 962 public: |
963 virtual bool render(SkBitmap** out = NULL) | 963 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE { |
964 SK_OVERRIDE { | |
965 SkRect bounds = SkRect::MakeWH(SkIntToScalar(fPicture->width()), | 964 SkRect bounds = SkRect::MakeWH(SkIntToScalar(fPicture->width()), |
966 SkIntToScalar(fPicture->height())); | 965 SkIntToScalar(fPicture->height())); |
967 SkData* data = SkPictureUtils::GatherPixelRefs(fPicture, bounds); | 966 SkData* data = SkPictureUtils::GatherPixelRefs(fPicture, bounds); |
968 SkSafeUnref(data); | 967 SkSafeUnref(data); |
969 | 968 |
970 return (fOutputDir.isEmpty()); // we don't have anything to write | 969 return (fOutputDir.isEmpty()); // we don't have anything to write |
971 } | 970 } |
972 | 971 |
973 private: | 972 private: |
974 virtual SkString getConfigNameInternal() SK_OVERRIDE { | 973 virtual SkString getConfigNameInternal() SK_OVERRIDE { |
975 return SkString("gather_pixelrefs"); | 974 return SkString("gather_pixelrefs"); |
976 } | 975 } |
977 }; | 976 }; |
978 | 977 |
979 PictureRenderer* CreateGatherPixelRefsRenderer() { | 978 PictureRenderer* CreateGatherPixelRefsRenderer() { |
980 return SkNEW(GatherRenderer); | 979 return SkNEW(GatherRenderer); |
981 } | 980 } |
982 | 981 |
983 /////////////////////////////////////////////////////////////////////////////// | 982 /////////////////////////////////////////////////////////////////////////////// |
984 | 983 |
985 class PictureCloneRenderer : public PictureRenderer { | 984 class PictureCloneRenderer : public PictureRenderer { |
986 public: | 985 public: |
987 virtual bool render(SkBitmap** out = NULL) | 986 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE { |
988 SK_OVERRIDE { | |
989 for (int i = 0; i < 100; ++i) { | 987 for (int i = 0; i < 100; ++i) { |
990 SkPicture* clone = fPicture->clone(); | 988 SkPicture* clone = fPicture->clone(); |
991 SkSafeUnref(clone); | 989 SkSafeUnref(clone); |
992 } | 990 } |
993 | 991 |
994 return (fOutputDir.isEmpty()); // we don't have anything to write | 992 return (fOutputDir.isEmpty()); // we don't have anything to write |
995 } | 993 } |
996 | 994 |
997 private: | 995 private: |
998 virtual SkString getConfigNameInternal() SK_OVERRIDE { | 996 virtual SkString getConfigNameInternal() SK_OVERRIDE { |
999 return SkString("picture_clone"); | 997 return SkString("picture_clone"); |
1000 } | 998 } |
1001 }; | 999 }; |
1002 | 1000 |
1003 PictureRenderer* CreatePictureCloneRenderer() { | 1001 PictureRenderer* CreatePictureCloneRenderer() { |
1004 return SkNEW(PictureCloneRenderer); | 1002 return SkNEW(PictureCloneRenderer); |
1005 } | 1003 } |
1006 | 1004 |
1007 } // namespace sk_tools | 1005 } // namespace sk_tools |
OLD | NEW |