| Index: tools/render_pictures_main.cpp
|
| diff --git a/tools/render_pictures_main.cpp b/tools/render_pictures_main.cpp
|
| index 70bc22132b06663b2dfb09992271462e61b8454a..b067a652bd430c004be3169ba87ead887c9cf3b3 100644
|
| --- a/tools/render_pictures_main.cpp
|
| +++ b/tools/render_pictures_main.cpp
|
| @@ -32,6 +32,8 @@ DECLARE_string(readPath);
|
| DEFINE_bool(writeEncodedImages, false, "Any time the skp contains an encoded image, write it to a "
|
| "file rather than decoding it. Requires writePath to be set. Skips drawing the full "
|
| "skp to a file. Not compatible with deferImageDecoding.");
|
| +DEFINE_string(writeJsonSummaryPath, "", "File to write a JSON summary of image results to. "
|
| + "TODO(epoger): Currently, this only works if --writePath is also specified.");
|
| DEFINE_string2(writePath, w, "", "Directory to write the rendered images.");
|
| DEFINE_bool(writeWholeImage, false, "In tile mode, write the entire rendered image to a "
|
| "file, instead of an image for each tile.");
|
| @@ -132,9 +134,12 @@ static bool write_image_to_file(const void* buffer, size_t size, SkBitmap* bitma
|
|
|
| ////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| -static bool render_picture(const SkString& inputPath, const SkString* outputDir,
|
| - sk_tools::PictureRenderer& renderer,
|
| - SkBitmap** out) {
|
| +/**
|
| + * Called only by render_picture().
|
| + */
|
| +static bool render_picture_internal(const SkString& inputPath, const SkString* outputDir,
|
| + sk_tools::PictureRenderer& renderer,
|
| + SkBitmap** out) {
|
| SkString inputFilename;
|
| sk_tools::get_basename(&inputFilename, inputPath);
|
|
|
| @@ -241,11 +246,21 @@ private:
|
| };
|
| }
|
|
|
| +/**
|
| + * Render the SKP file(s) within inputPath, writing their bitmap images into outputDir.
|
| + *
|
| + * @param inputPath path to an individual SKP file, or a directory of SKP files
|
| + * @param outputDir if not NULL, write the image(s) generated into this directory
|
| + * @param renderer PictureRenderer to use to render the SKPs
|
| + * @param jsonSummaryPtr if not NULL, add the image(s) generated to this summary
|
| + */
|
| static bool render_picture(const SkString& inputPath, const SkString* outputDir,
|
| - sk_tools::PictureRenderer& renderer) {
|
| + sk_tools::PictureRenderer& renderer,
|
| + sk_tools::ImageResultsSummary *jsonSummaryPtr) {
|
| int diffs[256] = {0};
|
| SkBitmap* bitmap = NULL;
|
| - bool success = render_picture(inputPath,
|
| + renderer.setJsonSummaryPtr(jsonSummaryPtr);
|
| + bool success = render_picture_internal(inputPath,
|
| FLAGS_writeWholeImage ? NULL : outputDir,
|
| renderer,
|
| FLAGS_validate || FLAGS_writeWholeImage ? &bitmap : NULL);
|
| @@ -272,8 +287,8 @@ static bool render_picture(const SkString& inputPath, const SkString* outputDir,
|
| }
|
| SkAutoTUnref<sk_tools::PictureRenderer> aurReferenceRenderer(referenceRenderer);
|
|
|
| - success = render_picture(inputPath, NULL, *referenceRenderer,
|
| - &referenceBitmap);
|
| + success = render_picture_internal(inputPath, NULL, *referenceRenderer,
|
| + &referenceBitmap);
|
|
|
| if (!success || NULL == referenceBitmap || NULL == referenceBitmap->getPixels()) {
|
| SkDebugf("Failed to draw the reference picture.\n");
|
| @@ -327,7 +342,24 @@ static bool render_picture(const SkString& inputPath, const SkString* outputDir,
|
|
|
| if (FLAGS_writeWholeImage) {
|
| sk_tools::force_all_opaque(*bitmap);
|
| - if (NULL != outputDir && FLAGS_writeWholeImage) {
|
| +
|
| + if (NULL != jsonSummaryPtr) {
|
| + // EPOGER: This is a hacky way of constructing the filename associated with the
|
| + // image checksum; we basically are repeating the logic of make_output_filepath()
|
| + // and code below here, within here.
|
| + // It would be better for the filename (without outputDir) to be passed in here,
|
| + // and used both for the checksum file and writing into outputDir.
|
| + //
|
| + // EPOGER: what about including the config type within hashFilename? That way,
|
| + // we could combine results of different config types without conflicting filenames.
|
| + SkString hashFilename;
|
| + sk_tools::get_basename(&hashFilename, inputPath);
|
| + hashFilename.remove(hashFilename.size() - 4, 4); // Remove ".skp"
|
| + hashFilename.append(".png");
|
| + jsonSummaryPtr->add(hashFilename.c_str(), *bitmap);
|
| + }
|
| +
|
| + if (NULL != outputDir) {
|
| SkString inputFilename;
|
| sk_tools::get_basename(&inputFilename, inputPath);
|
| SkString outputPath;
|
| @@ -347,7 +379,8 @@ static bool render_picture(const SkString& inputPath, const SkString* outputDir,
|
|
|
|
|
| static int process_input(const char* input, const SkString* outputDir,
|
| - sk_tools::PictureRenderer& renderer) {
|
| + sk_tools::PictureRenderer& renderer,
|
| + sk_tools::ImageResultsSummary *jsonSummaryPtr) {
|
| SkOSFile::Iter iter(input, "skp");
|
| SkString inputFilename;
|
| int failures = 0;
|
| @@ -357,13 +390,13 @@ static int process_input(const char* input, const SkString* outputDir,
|
| SkString inputPath;
|
| SkString inputAsSkString(input);
|
| sk_tools::make_filepath(&inputPath, inputAsSkString, inputFilename);
|
| - if (!render_picture(inputPath, outputDir, renderer)) {
|
| + if (!render_picture(inputPath, outputDir, renderer, jsonSummaryPtr)) {
|
| ++failures;
|
| }
|
| } while(iter.next(&inputFilename));
|
| } else if (SkStrEndsWith(input, ".skp")) {
|
| SkString inputPath(input);
|
| - if (!render_picture(inputPath, outputDir, renderer)) {
|
| + if (!render_picture(inputPath, outputDir, renderer, jsonSummaryPtr)) {
|
| ++failures;
|
| }
|
| } else {
|
| @@ -427,10 +460,15 @@ int tool_main(int argc, char** argv) {
|
| if (FLAGS_writePath.count() == 1) {
|
| outputDir.set(FLAGS_writePath[0]);
|
| }
|
| + sk_tools::ImageResultsSummary jsonSummary;
|
| + sk_tools::ImageResultsSummary* jsonSummaryPtr = NULL;
|
| + if (FLAGS_writeJsonSummaryPath.count() == 1) {
|
| + jsonSummaryPtr = &jsonSummary;
|
| + }
|
|
|
| int failures = 0;
|
| for (int i = 0; i < FLAGS_readPath.count(); i ++) {
|
| - failures += process_input(FLAGS_readPath[i], &outputDir, *renderer.get());
|
| + failures += process_input(FLAGS_readPath[i], &outputDir, *renderer.get(), jsonSummaryPtr);
|
| }
|
| if (failures != 0) {
|
| SkDebugf("Failed to render %i pictures.\n", failures);
|
| @@ -447,6 +485,9 @@ int tool_main(int argc, char** argv) {
|
| }
|
| #endif
|
| #endif
|
| + if (FLAGS_writeJsonSummaryPath.count() == 1) {
|
| + jsonSummary.writeToFile(FLAGS_writeJsonSummaryPath[0]);
|
| + }
|
| return 0;
|
| }
|
|
|
|
|