diff options
author | 2014-04-17 23:35:06 +0000 | |
---|---|---|
committer | 2014-04-17 23:35:06 +0000 | |
commit | 5fb2ce38b3dcb8e60e9e112df23c9d42456d7069 (patch) | |
tree | 521360e38040e661934a07f7fe1c2c49f520940b /tools | |
parent | d24a130c1217873d0744d35722005516a0acb774 (diff) |
Staged removal of SkPicture-derived classes
This CL removes the SkPicture-derived classes (with a flag to keeps clients working). In the process it also lightens the recording factory function so it is no longer ref counted).
The only interesting bits are in SkPicture* and Sk*Picture.*
R=reed@google.com
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/238273012
git-svn-id: http://skia.googlecode.com/svn/trunk@14251 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tools')
-rw-r--r-- | tools/PictureRenderer.cpp | 23 | ||||
-rw-r--r-- | tools/PictureRenderer.h | 4 | ||||
-rw-r--r-- | tools/PictureRenderingFlags.cpp | 4 | ||||
-rw-r--r-- | tools/bench_record.cpp | 57 | ||||
-rw-r--r-- | tools/filtermain.cpp | 2 | ||||
-rw-r--r-- | tools/render_pictures_main.cpp | 3 | ||||
-rw-r--r-- | tools/skpmaker.cpp | 2 |
7 files changed, 39 insertions, 56 deletions
diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp index 8aedc15b33..cd87f608a8 100644 --- a/tools/PictureRenderer.cpp +++ b/tools/PictureRenderer.cpp @@ -274,9 +274,10 @@ int PictureRenderer::getViewHeight() { void PictureRenderer::buildBBoxHierarchy() { SkASSERT(NULL != fPicture); if (kNone_BBoxHierarchyType != fBBoxHierarchyType && NULL != fPicture) { - SkAutoTUnref<SkPictureFactory> factory(this->getFactory()); - SkPictureRecorder recorder(factory); + SkAutoTDelete<SkBBHFactory> factory(this->getFactory()); + SkPictureRecorder recorder; SkCanvas* canvas = recorder.beginRecording(fPicture->width(), fPicture->height(), + factory.get(), this->recordFlags()); fPicture->draw(canvas); fPicture.reset(recorder.endRecording()); @@ -435,9 +436,10 @@ static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) { } bool RecordPictureRenderer::render(SkBitmap** out) { - SkAutoTUnref<SkPictureFactory> factory(this->getFactory()); - SkPictureRecorder recorder(factory); + SkAutoTDelete<SkBBHFactory> factory(this->getFactory()); + SkPictureRecorder recorder; SkCanvas* canvas = recorder.beginRecording(this->getViewWidth(), this->getViewHeight(), + factory.get(), this->recordFlags()); this->scaleToScaleFactor(canvas); fPicture->draw(canvas); @@ -954,9 +956,10 @@ SkString MultiCorePictureRenderer::getConfigNameInternal() { /////////////////////////////////////////////////////////////////////////////////////////////// void PlaybackCreationRenderer::setup() { - SkAutoTUnref<SkPictureFactory> factory(this->getFactory()); - fRecorder.reset(SkNEW_ARGS(SkPictureRecorder, (factory))); + SkAutoTDelete<SkBBHFactory> factory(this->getFactory()); + fRecorder.reset(SkNEW(SkPictureRecorder)); SkCanvas* canvas = fRecorder->beginRecording(this->getViewWidth(), this->getViewHeight(), + factory.get(), this->recordFlags()); this->scaleToScaleFactor(canvas); canvas->drawPicture(*fPicture); @@ -975,16 +978,16 @@ SkString PlaybackCreationRenderer::getConfigNameInternal() { /////////////////////////////////////////////////////////////////////////////////////////////// // SkPicture variants for each BBoxHierarchy type -SkPictureFactory* PictureRenderer::getFactory() { +SkBBHFactory* PictureRenderer::getFactory() { switch (fBBoxHierarchyType) { case kNone_BBoxHierarchyType: return NULL; case kQuadTree_BBoxHierarchyType: - return SkNEW(SkQuadTreePictureFactory); + return SkNEW(SkQuadTreeFactory); case kRTree_BBoxHierarchyType: - return SkNEW(SkRTreePictureFactory); + return SkNEW(SkRTreeFactory); case kTileGrid_BBoxHierarchyType: - return new SkTileGridPictureFactory(fGridInfo); + return SkNEW_ARGS(SkTileGridFactory, (fGridInfo)); } SkASSERT(0); // invalid bbhType return NULL; diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h index 4c5b426887..a8c0cc52c3 100644 --- a/tools/PictureRenderer.h +++ b/tools/PictureRenderer.h @@ -409,7 +409,7 @@ protected: SkString fDrawFiltersConfig; SkString fOutputDir; SkString fInputFilename; - SkTileGridPicture::TileGridInfo fGridInfo; // used when fBBoxHierarchyType is TileGrid + SkTileGridFactory::TileGridInfo fGridInfo; // used when fBBoxHierarchyType is TileGrid void buildBBoxHierarchy(); @@ -430,7 +430,7 @@ protected: */ void scaleToScaleFactor(SkCanvas*); - SkPictureFactory* getFactory(); + SkBBHFactory* getFactory(); uint32_t recordFlags(); SkCanvas* setupCanvas(); virtual SkCanvas* setupCanvas(int width, int height); diff --git a/tools/PictureRenderingFlags.cpp b/tools/PictureRenderingFlags.cpp index 0c4bc75fa0..5acec267b0 100644 --- a/tools/PictureRenderingFlags.cpp +++ b/tools/PictureRenderingFlags.cpp @@ -135,7 +135,9 @@ sk_tools::PictureRenderer* parseRenderer(SkString& error, PictureTool tool) { // Allow 'mode' to be set to 'simple', but do not create a renderer, so we can // ensure that pipe does not override a mode besides simple. The renderer will // be created below. - } else if (0 != strcmp(mode, "simple")) { + } else if (0 == strcmp(mode, "simple")) { + gridSupported = true; + } else { error.printf("%s is not a valid mode for --mode\n", mode); return NULL; } diff --git a/tools/bench_record.cpp b/tools/bench_record.cpp index 0798de21e7..65198fa5ba 100644 --- a/tools/bench_record.cpp +++ b/tools/bench_record.cpp @@ -34,50 +34,29 @@ DEFINE_int32(tileGridSize, 512, "Set the tile grid size. Has no effect if bbh is DEFINE_string(bbh, "", "Turn on the bbh and select the type, one of rtree, tilegrid, quadtree"); DEFINE_bool(skr, false, "Record SKR instead of SKP."); -typedef SkPictureFactory* (*PictureFactory)(); - -static SkPictureFactory* vanilla_factory() { - return NULL; -} - -static SkPictureFactory* rtree_factory() { - return SkNEW(SkRTreePictureFactory); -} - -static SkPictureFactory* tilegrid_factory() { - SkTileGridPicture::TileGridInfo info; - info.fTileInterval.set(FLAGS_tileGridSize, FLAGS_tileGridSize); - info.fMargin.setEmpty(); - info.fOffset.setZero(); - return SkNEW_ARGS(SkTileGridPictureFactory, (info)); -} - -static SkPictureFactory* quadtree_factory() { - return SkNEW(SkQuadTreePictureFactory); -} - -static PictureFactory parse_FLAGS_bbh() { +static SkBBHFactory* parse_FLAGS_bbh() { if (FLAGS_bbh.isEmpty()) { - return &vanilla_factory; - } - if (FLAGS_bbh.count() != 1) { - SkDebugf("Multiple bbh arguments supplied.\n"); return NULL; } + if (FLAGS_bbh.contains("rtree")) { - return rtree_factory; + return SkNEW(SkRTreeFactory); } if (FLAGS_bbh.contains("tilegrid")) { - return tilegrid_factory; + SkTileGridFactory::TileGridInfo info; + info.fTileInterval.set(FLAGS_tileGridSize, FLAGS_tileGridSize); + info.fMargin.setEmpty(); + info.fOffset.setZero(); + return SkNEW_ARGS(SkTileGridFactory, (info)); } if (FLAGS_bbh.contains("quadtree")) { - return quadtree_factory; + return SkNEW(SkQuadTreeFactory); } SkDebugf("Invalid bbh type %s, must be one of rtree, tilegrid, quadtree.\n", FLAGS_bbh[0]); return NULL; } -static void bench_record(SkPicture* src, const char* name, PictureFactory pictureFactory) { +static void bench_record(SkPicture* src, const char* name, SkBBHFactory* bbhFactory) { const SkMSec start = SkTime::GetMSecs(); const int width = src ? src->width() : FLAGS_nullSize; const int height = src ? src->height() : FLAGS_nullSize; @@ -91,10 +70,8 @@ static void bench_record(SkPicture* src, const char* name, PictureFactory pictur } SkDELETE(SkRecording::Delete(recording)); // delete the SkPlayback*. } else { - int recordingFlags = FLAGS_flags; - SkAutoTUnref<SkPictureFactory> factory(pictureFactory()); - SkPictureRecorder recorder(factory); - SkCanvas* canvas = recorder.beginRecording(width, height, recordingFlags); + SkPictureRecorder recorder; + SkCanvas* canvas = recorder.beginRecording(width, height, bbhFactory, FLAGS_flags); if (NULL != src) { src->draw(canvas); } @@ -114,11 +91,13 @@ int tool_main(int argc, char** argv) { SkCommandLineFlags::Parse(argc, argv); SkAutoGraphics autoGraphics; - PictureFactory pictureFactory = parse_FLAGS_bbh(); - if (pictureFactory == NULL) { + if (FLAGS_bbh.count() > 1) { + SkDebugf("Multiple bbh arguments supplied.\n"); return 1; } - bench_record(NULL, "NULL", pictureFactory); + + SkAutoTDelete<SkBBHFactory> bbhFactory(parse_FLAGS_bbh()); + bench_record(NULL, "NULL", bbhFactory.get()); if (FLAGS_skps.isEmpty()) { return 0; } @@ -142,7 +121,7 @@ int tool_main(int argc, char** argv) { failed = true; continue; } - bench_record(src, filename.c_str(), pictureFactory); + bench_record(src, filename.c_str(), bbhFactory.get()); } return failed ? 1 : 0; } diff --git a/tools/filtermain.cpp b/tools/filtermain.cpp index b61e15d656..ecd1eee5b5 100644 --- a/tools/filtermain.cpp +++ b/tools/filtermain.cpp @@ -718,7 +718,7 @@ static int filter_picture(const SkString& inFile, const SkString& outFile) { if (!outFile.isEmpty()) { SkPictureRecorder recorder; - SkCanvas* canvas = recorder.beginRecording(inPicture->width(), inPicture->height()); + SkCanvas* canvas = recorder.beginRecording(inPicture->width(), inPicture->height(), NULL, 0); debugCanvas.draw(canvas); SkAutoTUnref<SkPicture> outPicture(recorder.endRecording()); diff --git a/tools/render_pictures_main.cpp b/tools/render_pictures_main.cpp index 0e68117c72..444efd0c5f 100644 --- a/tools/render_pictures_main.cpp +++ b/tools/render_pictures_main.cpp @@ -173,9 +173,8 @@ static bool render_picture_internal(const SkString& inputPath, const SkString* o } while (FLAGS_bench_record) { - const int kRecordFlags = 0; SkPictureRecorder recorder; - picture->draw(recorder.beginRecording(picture->width(), picture->height(), kRecordFlags)); + picture->draw(recorder.beginRecording(picture->width(), picture->height(), NULL, 0)); SkAutoTUnref<SkPicture> other(recorder.endRecording()); } diff --git a/tools/skpmaker.cpp b/tools/skpmaker.cpp index 740d522366..0d46d045a6 100644 --- a/tools/skpmaker.cpp +++ b/tools/skpmaker.cpp @@ -27,7 +27,7 @@ DEFINE_string(writePath, "", "Filepath to write the SKP into."); static void skpmaker(int width, int height, int border, SkColor color, const char *writePath) { SkPictureRecorder recorder; - SkCanvas* canvas = recorder.beginRecording(width, height); + SkCanvas* canvas = recorder.beginRecording(width, height, NULL, 0); SkPaint paint; paint.setStyle(SkPaint::kFill_Style); paint.setColor(SK_ColorBLACK); |