| Index: experimental/PdfViewer/pdf_viewer_main.cpp
|
| diff --git a/experimental/PdfViewer/pdf_viewer_main.cpp b/experimental/PdfViewer/pdf_viewer_main.cpp
|
| index 6f8fb538eb1dbc3548dc457f8622ee50b5ba6280..5ecd2dbd97dcab019d14f586ac79059b5bfcdcb1 100644
|
| --- a/experimental/PdfViewer/pdf_viewer_main.cpp
|
| +++ b/experimental/PdfViewer/pdf_viewer_main.cpp
|
| @@ -214,81 +214,67 @@ static bool render_page(const SkString& outputDir,
|
| /** Reads an skp file, renders it to pdf and writes the output to a pdf file
|
| * @param inputPath The skp file to be read.
|
| * @param outputDir Output dir.
|
| - * @param renderer The object responsible to render the skp object into pdf.
|
| */
|
| -static bool process_pdf(const SkString& inputPath, const SkString& outputDir,
|
| - SkPdfRenderer& renderer) {
|
| +static bool process_pdf(const SkString& inputPath, const SkString& outputDir) {
|
| SkDebugf("Loading PDF: %s\n", inputPath.c_str());
|
|
|
| SkString inputFilename = SkOSPath::SkBasename(inputPath.c_str());
|
|
|
| - bool success = true;
|
| + SkAutoTDelete<SkPdfRenderer> renderer(SkPdfRenderer::CreateFromFile(inputPath.c_str()));
|
| + if (NULL == renderer.get()) {
|
| + SkDebugf("Failure loading file %s\n", inputPath.c_str());
|
| + return false;
|
| + }
|
|
|
| - success = renderer.load(inputPath);
|
| if (FLAGS_showMemoryUsage) {
|
| - SkDebugf("Memory usage after load: %u\n", (unsigned int)renderer.bytesUsed());
|
| + SkDebugf("Memory usage after load: %u\n", (unsigned int) renderer->bytesUsed());
|
| }
|
|
|
| // TODO(edisonn): bench timers
|
| if (FLAGS_benchLoad > 0) {
|
| for (int i = 0 ; i < FLAGS_benchLoad; i++) {
|
| - success = renderer.load(inputPath) && success;
|
| - if (FLAGS_showMemoryUsage) {
|
| + SkAutoTDelete<SkPdfRenderer> benchRenderer(
|
| + SkPdfRenderer::CreateFromFile(inputPath.c_str()));
|
| + if (NULL == benchRenderer.get()) {
|
| + SkDebugf("Failed to load on %ith attempt\n", i);
|
| + } else if (FLAGS_showMemoryUsage) {
|
| SkDebugf("Memory usage after load %i number : %u\n", i,
|
| - (unsigned int)renderer.bytesUsed());
|
| + (unsigned int) benchRenderer->bytesUsed());
|
| }
|
| }
|
| }
|
|
|
| - if (success) {
|
| - if (!renderer.pages())
|
| - {
|
| - SkDebugf("ERROR: Empty PDF Document %s\n", inputPath.c_str());
|
| - return false;
|
| - } else {
|
| - for (int i = 0; i < FLAGS_benchRender + 1; i++) {
|
| - // TODO(edisonn) if (i == 1) start timer
|
| - if (strcmp(FLAGS_pages[0], "all") == 0) {
|
| - for (int pn = 0; pn < renderer.pages(); ++pn) {
|
| - success = render_page(
|
| - outputDir,
|
| - inputFilename,
|
| - renderer,
|
| - FLAGS_noExtensionForOnePagePdf && renderer.pages() == 1 ? -1 :
|
| - pn) &&
|
| - success;
|
| - }
|
| - } else if (strcmp(FLAGS_pages[0], "reverse") == 0) {
|
| - for (int pn = renderer.pages() - 1; pn >= 0; --pn) {
|
| - success = render_page(
|
| - outputDir,
|
| - inputFilename,
|
| - renderer,
|
| - FLAGS_noExtensionForOnePagePdf && renderer.pages() == 1 ? -1 :
|
| - pn) &&
|
| - success;
|
| - }
|
| - } else if (strcmp(FLAGS_pages[0], "first") == 0) {
|
| - success = render_page(
|
| - outputDir,
|
| - inputFilename,
|
| - renderer,
|
| - FLAGS_noExtensionForOnePagePdf && renderer.pages() == 1 ? -1 : 0) &&
|
| - success;
|
| - } else if (strcmp(FLAGS_pages[0], "last") == 0) {
|
| - success = render_page(
|
| - outputDir,
|
| - inputFilename,
|
| - renderer,
|
| - FLAGS_noExtensionForOnePagePdf &&
|
| - renderer.pages() == 1 ? -1 : renderer.pages() - 1) && success;
|
| - } else {
|
| - int pn = atoi(FLAGS_pages[0]);
|
| - success = render_page(outputDir, inputFilename, renderer,
|
| - FLAGS_noExtensionForOnePagePdf &&
|
| - renderer.pages() == 1 ? -1 : pn) && success;
|
| - }
|
| + if (!renderer->pages()) {
|
| + // This should never happen, since CreateFromFile will return NULL if there are no pages.
|
| + SkASSERT(false);
|
| + SkDebugf("ERROR: Empty PDF Document %s\n", inputPath.c_str());
|
| + return false;
|
| + }
|
| +
|
| + bool success = true;
|
| + for (int i = 0; i < FLAGS_benchRender + 1; i++) {
|
| + // TODO(edisonn) if (i == 1) start timer
|
| + if (strcmp(FLAGS_pages[0], "all") == 0) {
|
| + for (int pn = 0; pn < renderer->pages(); ++pn) {
|
| + success &= render_page(outputDir, inputFilename, *renderer,
|
| + FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1 : pn);
|
| + }
|
| + } else if (strcmp(FLAGS_pages[0], "reverse") == 0) {
|
| + for (int pn = renderer->pages() - 1; pn >= 0; --pn) {
|
| + success &= render_page(outputDir, inputFilename, *renderer,
|
| + FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1 : pn);
|
| }
|
| + } else if (strcmp(FLAGS_pages[0], "first") == 0) {
|
| + success &= render_page(outputDir, inputFilename, *renderer,
|
| + FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1 : 0);
|
| + } else if (strcmp(FLAGS_pages[0], "last") == 0) {
|
| + success &= render_page(outputDir, inputFilename, *renderer,
|
| + FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1
|
| + : renderer->pages() - 1);
|
| + } else {
|
| + int pn = atoi(FLAGS_pages[0]);
|
| + success &= render_page(outputDir, inputFilename, *renderer,
|
| + FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1 : pn);
|
| }
|
| }
|
|
|
| @@ -303,23 +289,21 @@ static bool process_pdf(const SkString& inputPath, const SkString& outputDir,
|
| * parse_pdf.
|
| * @param input A directory or an pdf file.
|
| * @param outputDir Output dir.
|
| - * @param renderer The object responsible to render the skp object into pdf.
|
| */
|
| -static int process_input(const char* input, const SkString& outputDir,
|
| - SkPdfRenderer& renderer) {
|
| +static int process_input(const char* input, const SkString& outputDir) {
|
| int failures = 0;
|
| if (sk_isdir(input)) {
|
| SkOSFile::Iter iter(input, PDF_FILE_EXTENSION);
|
| SkString inputFilename;
|
| while (iter.next(&inputFilename)) {
|
| SkString inputPath = SkOSPath::SkPathJoin(input, inputFilename.c_str());
|
| - if (!process_pdf(inputPath, outputDir, renderer)) {
|
| + if (!process_pdf(inputPath, outputDir)) {
|
| ++failures;
|
| }
|
| }
|
| } else {
|
| SkString inputPath(input);
|
| - if (!process_pdf(inputPath, outputDir, renderer)) {
|
| + if (!process_pdf(inputPath, outputDir)) {
|
| ++failures;
|
| }
|
| }
|
| @@ -336,8 +320,6 @@ int tool_main(int argc, char** argv) {
|
| exit(-1);
|
| }
|
|
|
| - SkPdfRenderer renderer;
|
| -
|
| SkString outputDir;
|
| if (FLAGS_writePath.count() == 1) {
|
| outputDir.set(FLAGS_writePath[0]);
|
| @@ -345,8 +327,7 @@ int tool_main(int argc, char** argv) {
|
|
|
| int failures = 0;
|
| for (int i = 0; i < FLAGS_readPath.count(); i ++) {
|
| - failures += process_input(FLAGS_readPath[i], outputDir, renderer);
|
| - renderer.unload();
|
| + failures += process_input(FLAGS_readPath[i], outputDir);
|
| }
|
|
|
| reportPdfRenderStats();
|
|
|