| Index: tools/PictureRenderer.cpp
|
| ===================================================================
|
| --- tools/PictureRenderer.cpp (revision 14159)
|
| +++ tools/PictureRenderer.cpp (working copy)
|
| @@ -120,7 +120,7 @@
|
|
|
| SkASSERT(NULL == fPicture);
|
| SkASSERT(NULL == fCanvas.get());
|
| - if (fPicture != NULL || NULL != fCanvas.get()) {
|
| + if (NULL != fPicture || NULL != fCanvas.get()) {
|
| return;
|
| }
|
|
|
| @@ -129,8 +129,7 @@
|
| return;
|
| }
|
|
|
| - fPicture = pict;
|
| - fPicture->ref();
|
| + fPicture.reset(pict)->ref();
|
| fCanvas.reset(this->setupCanvas());
|
| }
|
|
|
| @@ -246,8 +245,7 @@
|
|
|
| void PictureRenderer::end() {
|
| this->resetState(true);
|
| - SkSafeUnref(fPicture);
|
| - fPicture = NULL;
|
| + fPicture.reset(NULL);
|
| fCanvas.reset(NULL);
|
| }
|
|
|
| @@ -276,13 +274,12 @@
|
| void PictureRenderer::buildBBoxHierarchy() {
|
| SkASSERT(NULL != fPicture);
|
| if (kNone_BBoxHierarchyType != fBBoxHierarchyType && NULL != fPicture) {
|
| - SkPicture* newPicture = this->createPicture();
|
| - SkCanvas* recorder = newPicture->beginRecording(fPicture->width(), fPicture->height(),
|
| - this->recordFlags());
|
| - fPicture->draw(recorder);
|
| - newPicture->endRecording();
|
| - fPicture->unref();
|
| - fPicture = newPicture;
|
| + SkAutoTUnref<SkPictureFactory> factory(this->getFactory());
|
| + SkPictureRecorder recorder(factory);
|
| + SkCanvas* canvas = recorder.beginRecording(fPicture->width(), fPicture->height(),
|
| + this->recordFlags());
|
| + fPicture->draw(canvas);
|
| + fPicture.reset(recorder.endRecording());
|
| }
|
| }
|
|
|
| @@ -438,17 +435,18 @@
|
| }
|
|
|
| bool RecordPictureRenderer::render(SkBitmap** out) {
|
| - SkAutoTUnref<SkPicture> replayer(this->createPicture());
|
| - SkCanvas* recorder = replayer->beginRecording(this->getViewWidth(), this->getViewHeight(),
|
| - this->recordFlags());
|
| - this->scaleToScaleFactor(recorder);
|
| - fPicture->draw(recorder);
|
| - replayer->endRecording();
|
| + SkAutoTUnref<SkPictureFactory> factory(this->getFactory());
|
| + SkPictureRecorder recorder(factory);
|
| + SkCanvas* canvas = recorder.beginRecording(this->getViewWidth(), this->getViewHeight(),
|
| + this->recordFlags());
|
| + this->scaleToScaleFactor(canvas);
|
| + fPicture->draw(canvas);
|
| + SkAutoTUnref<SkPicture> picture(recorder.endRecording());
|
| if (!fOutputDir.isEmpty()) {
|
| // Record the new picture as a new SKP with PNG encoded bitmaps.
|
| SkString skpPath = SkOSPath::SkPathJoin(fOutputDir.c_str(), fInputFilename.c_str());
|
| SkFILEWStream stream(skpPath.c_str());
|
| - replayer->serialize(&stream, &encode_bitmap_to_data);
|
| + picture->serialize(&stream, &encode_bitmap_to_data);
|
| return true;
|
| }
|
| return false;
|
| @@ -499,7 +497,7 @@
|
|
|
| bool SimplePictureRenderer::render(SkBitmap** out) {
|
| SkASSERT(fCanvas.get() != NULL);
|
| - SkASSERT(fPicture != NULL);
|
| + SkASSERT(NULL != fPicture);
|
| if (NULL == fCanvas.get() || NULL == fPicture) {
|
| return false;
|
| }
|
| @@ -538,7 +536,7 @@
|
|
|
| void TiledPictureRenderer::init(SkPicture* pict, const SkString* outputDir,
|
| const SkString* inputFilename, bool useChecksumBasedFilenames) {
|
| - SkASSERT(pict != NULL);
|
| + SkASSERT(NULL != pict);
|
| SkASSERT(0 == fTileRects.count());
|
| if (NULL == pict || fTileRects.count() != 0) {
|
| return;
|
| @@ -546,7 +544,7 @@
|
|
|
| // Do not call INHERITED::init(), which would create a (potentially large) canvas which is not
|
| // used by bench_pictures.
|
| - fPicture = SkRef(pict);
|
| + fPicture.reset(pict)->ref();
|
| this->CopyString(&fOutputDir, outputDir);
|
| this->CopyString(&fInputFilename, inputFilename);
|
| fUseChecksumBasedFilenames = useChecksumBasedFilenames;
|
| @@ -956,15 +954,16 @@
|
| ///////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| void PlaybackCreationRenderer::setup() {
|
| - fReplayer.reset(this->createPicture());
|
| - SkCanvas* recorder = fReplayer->beginRecording(this->getViewWidth(), this->getViewHeight(),
|
| - this->recordFlags());
|
| - this->scaleToScaleFactor(recorder);
|
| - recorder->drawPicture(*fPicture);
|
| + SkAutoTUnref<SkPictureFactory> factory(this->getFactory());
|
| + fRecorder.reset(SkNEW_ARGS(SkPictureRecorder, (factory)));
|
| + SkCanvas* canvas = fRecorder->beginRecording(this->getViewWidth(), this->getViewHeight(),
|
| + this->recordFlags());
|
| + this->scaleToScaleFactor(canvas);
|
| + canvas->drawPicture(*fPicture);
|
| }
|
|
|
| bool PlaybackCreationRenderer::render(SkBitmap** out) {
|
| - fReplayer->endRecording();
|
| + fPicture.reset(fRecorder->endRecording());
|
| // Since this class does not actually render, return false.
|
| return false;
|
| }
|
| @@ -978,7 +977,7 @@
|
|
|
| class RTreePicture : public SkPicture {
|
| public:
|
| - virtual SkBBoxHierarchy* createBBoxHierarchy() const SK_OVERRIDE{
|
| + virtual SkBBoxHierarchy* createBBoxHierarchy() const SK_OVERRIDE {
|
| static const int kRTreeMinChildren = 6;
|
| static const int kRTreeMaxChildren = 11;
|
| SkScalar aspectRatio = SkScalarDiv(SkIntToScalar(fWidth),
|
| @@ -989,18 +988,26 @@
|
| }
|
| };
|
|
|
| -SkPicture* PictureRenderer::createPicture() {
|
| +class SkRTreePictureFactory : public SkPictureFactory {
|
| +private:
|
| + virtual SkPicture* create(int width, int height) SK_OVERRIDE {
|
| + return SkNEW(RTreePicture);
|
| + }
|
| +
|
| +private:
|
| + typedef SkPictureFactory INHERITED;
|
| +};
|
| +
|
| +SkPictureFactory* PictureRenderer::getFactory() {
|
| switch (fBBoxHierarchyType) {
|
| case kNone_BBoxHierarchyType:
|
| - return SkNEW(SkPicture);
|
| + return NULL;
|
| case kQuadTree_BBoxHierarchyType:
|
| - return SkNEW_ARGS(SkQuadTreePicture, (SkIRect::MakeWH(fPicture->width(),
|
| - fPicture->height())));
|
| + return SkNEW(SkQuadTreePictureFactory);
|
| case kRTree_BBoxHierarchyType:
|
| - return SkNEW(RTreePicture);
|
| + return SkNEW(SkRTreePictureFactory);
|
| case kTileGrid_BBoxHierarchyType:
|
| - return SkNEW_ARGS(SkTileGridPicture, (fPicture->width(),
|
| - fPicture->height(), fGridInfo));
|
| + return new SkTileGridPictureFactory(fGridInfo);
|
| }
|
| SkASSERT(0); // invalid bbhType
|
| return NULL;
|
|
|