aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar borenet@google.com <borenet@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-26 13:26:55 +0000
committerGravatar borenet@google.com <borenet@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-26 13:26:55 +0000
commit070d354d51dac52a70f07d4b102392b89f2da5d7 (patch)
treebb49af4cef6960cb6adcd26527b179ea61600d97
parent08283afc265f1153834256fc1012519813ba6b73 (diff)
Make output path to render_pictures optional
Review URL: https://codereview.appspot.com/6779049 git-svn-id: http://skia.googlecode.com/svn/trunk@6136 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--tools/PictureRenderer.cpp23
-rw-r--r--tools/PictureRenderer.h3
-rw-r--r--tools/render_pictures_main.cpp51
3 files changed, 53 insertions, 24 deletions
diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp
index ae2c94e12d..e6d86dda2e 100644
--- a/tools/PictureRenderer.cpp
+++ b/tools/PictureRenderer.cpp
@@ -163,7 +163,10 @@ bool PipePictureRenderer::render(const SkString* path) {
pipeCanvas->drawPicture(*fPicture);
writer.endRecording();
fCanvas->flush();
- return path != NULL && write(fCanvas, *path);
+ if (NULL != path) {
+ return write(fCanvas, *path);
+ }
+ return true;
}
///////////////////////////////////////////////////////////////////////////////////////////////
@@ -177,7 +180,10 @@ bool SimplePictureRenderer::render(const SkString* path) {
fCanvas->drawPicture(*fPicture);
fCanvas->flush();
- return path != NULL && write(fCanvas, *path);
+ if (NULL != path) {
+ return write(fCanvas, *path);
+ }
+ return true;
}
///////////////////////////////////////////////////////////////////////////////////////////////
@@ -382,7 +388,8 @@ static void DrawTile(void* data) {
int32_t i;
while ((i = tileData->nextTile(&tileRect)) != -1) {
DrawTileToCanvas(tileData->fCanvas, tileRect, tileData->fController);
- if (!writeAppendNumber(tileData->fCanvas, tileData->fPath, i)) {
+ if (NULL != tileData->fPath &&
+ !writeAppendNumber(tileData->fCanvas, tileData->fPath, i)) {
*tileData->fSuccess = false;
break;
}
@@ -412,7 +419,8 @@ static void DrawClonedTiles(void* data) {
int32_t i;
while ((i = cloneData->nextTile(&tileRect)) != -1) {
DrawTileToCanvas(cloneData->fCanvas, tileRect, cloneData->fClone);
- if (!writeAppendNumber(cloneData->fCanvas, cloneData->fPath, i)) {
+ if (NULL != cloneData->fPath &&
+ !writeAppendNumber(cloneData->fCanvas, cloneData->fPath, i)) {
*cloneData->fSuccess = false;
break;
}
@@ -486,13 +494,14 @@ bool TiledPictureRenderer::render(const SkString* path) {
SkCanvas* canvas = this->setupCanvas(fTileWidth, fTileHeight);
SkAutoUnref aur(canvas);
+ bool success = true;
for (int i = 0; i < fTileRects.count(); ++i) {
DrawTileToCanvas(canvas, fTileRects[i], fPicture);
- if (!writeAppendNumber(canvas, path, i)) {
- return false;
+ if (NULL != path) {
+ success &= writeAppendNumber(canvas, path, i);
}
}
- return path != NULL;
+ return success;
}
}
diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h
index 4829e1df87..5d32203b3c 100644
--- a/tools/PictureRenderer.h
+++ b/tools/PictureRenderer.h
@@ -50,7 +50,8 @@ public:
* If path is non-null, subclass implementations should call write().
* @param path If non-null, also write the output to the file specified by path. path should
* have no extension; it will be added by write().
- * @return bool True if path is non-null and the output is successfully written to a file.
+ * @return bool True if rendering succeeded and, if path is non-null, the output was
+ * successfully written to a file.
*/
virtual bool render(const SkString* path) = 0;
diff --git a/tools/render_pictures_main.cpp b/tools/render_pictures_main.cpp
index 6d6e8db19a..ae9e94d4cc 100644
--- a/tools/render_pictures_main.cpp
+++ b/tools/render_pictures_main.cpp
@@ -23,7 +23,8 @@ static void usage(const char* argv0) {
SkDebugf("SkPicture rendering tool\n");
SkDebugf("\n"
"Usage: \n"
-" %s <input>... <outputDir> \n"
+" %s <input>... \n"
+" [-w <outputDir>]"
" [--mode pow2tile minWidth height[%] | simple\n"
" | tile width[%] height[%]]\n"
" [--pipe]\n"
@@ -84,7 +85,7 @@ static void make_output_filepath(SkString* path, const SkString& dir,
path->remove(path->size() - 4, 4);
}
-static bool render_picture(const SkString& inputPath, const SkString& outputDir,
+static bool render_picture(const SkString& inputPath, const SkString* outputDir,
sk_tools::PictureRenderer& renderer) {
SkString inputFilename;
sk_tools::get_basename(&inputFilename, inputPath);
@@ -109,12 +110,17 @@ static bool render_picture(const SkString& inputPath, const SkString& outputDir,
renderer.init(&picture);
renderer.setup();
- SkString outputPath;
- make_output_filepath(&outputPath, outputDir, inputFilename);
-
- success = renderer.render(&outputPath);
- if (!success) {
- SkDebugf("Could not write to file %s\n", outputPath.c_str());
+ SkString* outputPath = NULL;
+ if (NULL != outputDir) {
+ outputPath = SkNEW(SkString);
+ make_output_filepath(outputPath, *outputDir, inputFilename);
+ }
+ success = renderer.render(outputPath);
+ if (outputPath) {
+ if (!success) {
+ SkDebugf("Could not write to file %s\n", outputPath->c_str());
+ }
+ SkDELETE(outputPath);
}
renderer.resetState();
@@ -123,11 +129,12 @@ static bool render_picture(const SkString& inputPath, const SkString& outputDir,
return success;
}
-static int process_input(const SkString& input, const SkString& outputDir,
+static int process_input(const SkString& input, const SkString* outputDir,
sk_tools::PictureRenderer& renderer) {
SkOSFile::Iter iter(input.c_str(), "skp");
SkString inputFilename;
int failures = 0;
+ SkDebugf("process_input, %s\n", input.c_str());
if (iter.next(&inputFilename)) {
do {
SkString inputPath;
@@ -150,7 +157,7 @@ static int process_input(const SkString& input, const SkString& outputDir,
}
static void parse_commandline(int argc, char* const argv[], SkTArray<SkString>* inputs,
- sk_tools::PictureRenderer*& renderer){
+ sk_tools::PictureRenderer*& renderer, SkString*& outputDir){
const char* argv0 = argv[0];
char* const* stop = argv + argc;
@@ -247,6 +254,14 @@ static void parse_commandline(int argc, char* const argv[], SkTArray<SkString>*
SkDELETE(renderer);
usage(argv0);
exit(-1);
+ } else if (0 == strcmp(*argv, "-w")) {
+ ++argv;
+ if (argv >= stop) {
+ SkDebugf("Missing output directory for -w\n");
+ usage(argv0);
+ exit(-1);
+ }
+ outputDir = SkNEW_ARGS(SkString, (*argv));
} else {
inputs->push_back(SkString(*argv));
}
@@ -325,8 +340,11 @@ static void parse_commandline(int argc, char* const argv[], SkTArray<SkString>*
renderer = SkNEW(sk_tools::PipePictureRenderer);
}
- if (inputs->count() < 2) {
+ if (inputs->empty()) {
SkDELETE(renderer);
+ if (NULL != outputDir) {
+ SkDELETE(outputDir);
+ }
usage(argv0);
exit(-1);
}
@@ -343,13 +361,12 @@ int tool_main(int argc, char** argv) {
SkAutoGraphics ag;
SkTArray<SkString> inputs;
sk_tools::PictureRenderer* renderer = NULL;
-
- parse_commandline(argc, argv, &inputs, renderer);
- SkString outputDir = inputs[inputs.count() - 1];
+ SkString* outputDir = NULL;
+ parse_commandline(argc, argv, &inputs, renderer, outputDir);
SkASSERT(renderer);
int failures = 0;
- for (int i = 0; i < inputs.count() - 1; i ++) {
+ for (int i = 0; i < inputs.count(); i ++) {
failures += process_input(inputs[i], outputDir, *renderer);
}
if (failures != 0) {
@@ -365,7 +382,9 @@ int tool_main(int argc, char** argv) {
}
#endif
#endif
-
+ if (NULL != outputDir) {
+ SkDELETE(outputDir);
+ }
SkDELETE(renderer);
return 0;
}