Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(493)

Side by Side Diff: experimental/PdfViewer/pdf_viewer_main.cpp

Issue 59493011: Pdfviewer refactoring. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Move include/ to inc/ Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBitmapDevice.h" 8 #include "SkBitmapDevice.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkCommandLineFlags.h" 10 #include "SkCommandLineFlags.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 SkDebugf("Memory usage after page %i rendered: %u\n", 207 SkDebugf("Memory usage after page %i rendered: %u\n",
208 page < 0 ? 0 : page, (unsigned int)renderer.bytesUsed()); 208 page < 0 ? 0 : page, (unsigned int)renderer.bytesUsed());
209 } 209 }
210 } 210 }
211 return true; 211 return true;
212 } 212 }
213 213
214 /** Reads an skp file, renders it to pdf and writes the output to a pdf file 214 /** Reads an skp file, renders it to pdf and writes the output to a pdf file
215 * @param inputPath The skp file to be read. 215 * @param inputPath The skp file to be read.
216 * @param outputDir Output dir. 216 * @param outputDir Output dir.
217 * @param renderer The object responsible to render the skp object into pdf.
218 */ 217 */
219 static bool process_pdf(const SkString& inputPath, const SkString& outputDir, 218 static bool process_pdf(const SkString& inputPath, const SkString& outputDir) {
220 SkPdfRenderer& renderer) {
221 SkDebugf("Loading PDF: %s\n", inputPath.c_str()); 219 SkDebugf("Loading PDF: %s\n", inputPath.c_str());
222 220
223 SkString inputFilename = SkOSPath::SkBasename(inputPath.c_str()); 221 SkString inputFilename = SkOSPath::SkBasename(inputPath.c_str());
224 222
225 bool success = true; 223 SkAutoTDelete<SkPdfRenderer> renderer(SkPdfRenderer::CreateFromFile(inputPat h.c_str()));
224 if (NULL == renderer.get()) {
225 SkDebugf("Failure loading file %s\n", inputPath.c_str());
226 return false;
227 }
226 228
227 success = renderer.load(inputPath);
228 if (FLAGS_showMemoryUsage) { 229 if (FLAGS_showMemoryUsage) {
229 SkDebugf("Memory usage after load: %u\n", (unsigned int)renderer.bytesUs ed()); 230 SkDebugf("Memory usage after load: %u\n", (unsigned int) renderer->bytes Used());
230 } 231 }
231 232
232 // TODO(edisonn): bench timers 233 // TODO(edisonn): bench timers
233 if (FLAGS_benchLoad > 0) { 234 if (FLAGS_benchLoad > 0) {
234 for (int i = 0 ; i < FLAGS_benchLoad; i++) { 235 for (int i = 0 ; i < FLAGS_benchLoad; i++) {
235 success = renderer.load(inputPath) && success; 236 SkAutoTDelete<SkPdfRenderer> benchRenderer(
236 if (FLAGS_showMemoryUsage) { 237 SkPdfRenderer::CreateFromFile(inputPath.c_str()));
238 if (NULL == benchRenderer.get()) {
239 SkDebugf("Failed to load on %ith attempt\n", i);
240 } else if (FLAGS_showMemoryUsage) {
237 SkDebugf("Memory usage after load %i number : %u\n", i, 241 SkDebugf("Memory usage after load %i number : %u\n", i,
238 (unsigned int)renderer.bytesUsed()); 242 (unsigned int) benchRenderer->bytesUsed());
239 } 243 }
240 } 244 }
241 } 245 }
242 246
243 if (success) { 247 if (!renderer->pages()) {
244 if (!renderer.pages()) 248 // This should never happen, since CreateFromFile will return NULL if th ere are no pages.
245 { 249 SkASSERT(false);
246 SkDebugf("ERROR: Empty PDF Document %s\n", inputPath.c_str()); 250 SkDebugf("ERROR: Empty PDF Document %s\n", inputPath.c_str());
247 return false; 251 return false;
252 }
253
254 bool success = true;
255 for (int i = 0; i < FLAGS_benchRender + 1; i++) {
256 // TODO(edisonn) if (i == 1) start timer
257 if (strcmp(FLAGS_pages[0], "all") == 0) {
258 for (int pn = 0; pn < renderer->pages(); ++pn) {
259 success &= render_page(outputDir, inputFilename, *renderer,
260 FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1 : pn);
261 }
262 } else if (strcmp(FLAGS_pages[0], "reverse") == 0) {
263 for (int pn = renderer->pages() - 1; pn >= 0; --pn) {
264 success &= render_page(outputDir, inputFilename, *renderer,
265 FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? -1 : pn);
266 }
267 } else if (strcmp(FLAGS_pages[0], "first") == 0) {
268 success &= render_page(outputDir, inputFilename, *renderer,
269 FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? - 1 : 0);
270 } else if (strcmp(FLAGS_pages[0], "last") == 0) {
271 success &= render_page(outputDir, inputFilename, *renderer,
272 FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? - 1
273 : renderer->pages() - 1);
248 } else { 274 } else {
249 for (int i = 0; i < FLAGS_benchRender + 1; i++) { 275 int pn = atoi(FLAGS_pages[0]);
250 // TODO(edisonn) if (i == 1) start timer 276 success &= render_page(outputDir, inputFilename, *renderer,
251 if (strcmp(FLAGS_pages[0], "all") == 0) { 277 FLAGS_noExtensionForOnePagePdf && renderer->pages() == 1 ? - 1 : pn);
252 for (int pn = 0; pn < renderer.pages(); ++pn) {
253 success = render_page(
254 outputDir,
255 inputFilename,
256 renderer,
257 FLAGS_noExtensionForOnePagePdf && renderer.pages () == 1 ? -1 :
258 pn) &&
259 success;
260 }
261 } else if (strcmp(FLAGS_pages[0], "reverse") == 0) {
262 for (int pn = renderer.pages() - 1; pn >= 0; --pn) {
263 success = render_page(
264 outputDir,
265 inputFilename,
266 renderer,
267 FLAGS_noExtensionForOnePagePdf && renderer.pages () == 1 ? -1 :
268 pn) &&
269 success;
270 }
271 } else if (strcmp(FLAGS_pages[0], "first") == 0) {
272 success = render_page(
273 outputDir,
274 inputFilename,
275 renderer,
276 FLAGS_noExtensionForOnePagePdf && renderer.pages() = = 1 ? -1 : 0) &&
277 success;
278 } else if (strcmp(FLAGS_pages[0], "last") == 0) {
279 success = render_page(
280 outputDir,
281 inputFilename,
282 renderer,
283 FLAGS_noExtensionForOnePagePdf &&
284 renderer.pages() == 1 ? -1 : renderer.pages( ) - 1) && success;
285 } else {
286 int pn = atoi(FLAGS_pages[0]);
287 success = render_page(outputDir, inputFilename, renderer,
288 FLAGS_noExtensionForOnePagePdf &&
289 renderer.pages() == 1 ? -1 : pn) & & success;
290 }
291 }
292 } 278 }
293 } 279 }
294 280
295 if (!success) { 281 if (!success) {
296 SkDebugf("Failures for file %s\n", inputPath.c_str()); 282 SkDebugf("Failures for file %s\n", inputPath.c_str());
297 } 283 }
298 284
299 return success; 285 return success;
300 } 286 }
301 287
302 /** For each file in the directory or for the file passed in input, call 288 /** For each file in the directory or for the file passed in input, call
303 * parse_pdf. 289 * parse_pdf.
304 * @param input A directory or an pdf file. 290 * @param input A directory or an pdf file.
305 * @param outputDir Output dir. 291 * @param outputDir Output dir.
306 * @param renderer The object responsible to render the skp object into pdf.
307 */ 292 */
308 static int process_input(const char* input, const SkString& outputDir, 293 static int process_input(const char* input, const SkString& outputDir) {
309 SkPdfRenderer& renderer) {
310 int failures = 0; 294 int failures = 0;
311 if (sk_isdir(input)) { 295 if (sk_isdir(input)) {
312 SkOSFile::Iter iter(input, PDF_FILE_EXTENSION); 296 SkOSFile::Iter iter(input, PDF_FILE_EXTENSION);
313 SkString inputFilename; 297 SkString inputFilename;
314 while (iter.next(&inputFilename)) { 298 while (iter.next(&inputFilename)) {
315 SkString inputPath = SkOSPath::SkPathJoin(input, inputFilename.c_str ()); 299 SkString inputPath = SkOSPath::SkPathJoin(input, inputFilename.c_str ());
316 if (!process_pdf(inputPath, outputDir, renderer)) { 300 if (!process_pdf(inputPath, outputDir)) {
317 ++failures; 301 ++failures;
318 } 302 }
319 } 303 }
320 } else { 304 } else {
321 SkString inputPath(input); 305 SkString inputPath(input);
322 if (!process_pdf(inputPath, outputDir, renderer)) { 306 if (!process_pdf(inputPath, outputDir)) {
323 ++failures; 307 ++failures;
324 } 308 }
325 } 309 }
326 return failures; 310 return failures;
327 } 311 }
328 312
329 int tool_main(int argc, char** argv); 313 int tool_main(int argc, char** argv);
330 int tool_main(int argc, char** argv) { 314 int tool_main(int argc, char** argv) {
331 SkCommandLineFlags::SetUsage("Parse and Render .pdf files (pdf viewer)."); 315 SkCommandLineFlags::SetUsage("Parse and Render .pdf files (pdf viewer).");
332 SkCommandLineFlags::Parse(argc, argv); 316 SkCommandLineFlags::Parse(argc, argv);
333 317
334 if (FLAGS_readPath.isEmpty()) { 318 if (FLAGS_readPath.isEmpty()) {
335 SkDebugf(".pdf files or directories are required.\n"); 319 SkDebugf(".pdf files or directories are required.\n");
336 exit(-1); 320 exit(-1);
337 } 321 }
338 322
339 SkPdfRenderer renderer;
340
341 SkString outputDir; 323 SkString outputDir;
342 if (FLAGS_writePath.count() == 1) { 324 if (FLAGS_writePath.count() == 1) {
343 outputDir.set(FLAGS_writePath[0]); 325 outputDir.set(FLAGS_writePath[0]);
344 } 326 }
345 327
346 int failures = 0; 328 int failures = 0;
347 for (int i = 0; i < FLAGS_readPath.count(); i ++) { 329 for (int i = 0; i < FLAGS_readPath.count(); i ++) {
348 failures += process_input(FLAGS_readPath[i], outputDir, renderer); 330 failures += process_input(FLAGS_readPath[i], outputDir);
349 renderer.unload();
350 } 331 }
351 332
352 reportPdfRenderStats(); 333 reportPdfRenderStats();
353 334
354 if (failures != 0) { 335 if (failures != 0) {
355 SkDebugf("Failed to render %i PDFs.\n", failures); 336 SkDebugf("Failed to render %i PDFs.\n", failures);
356 return 1; 337 return 1;
357 } 338 }
358 339
359 return 0; 340 return 0;
360 } 341 }
361 342
362 #if !defined SK_BUILD_FOR_IOS 343 #if !defined SK_BUILD_FOR_IOS
363 int main(int argc, char * const argv[]) { 344 int main(int argc, char * const argv[]) {
364 return tool_main(argc, (char**) argv); 345 return tool_main(argc, (char**) argv);
365 } 346 }
366 #endif 347 #endif
OLDNEW
« no previous file with comments | « experimental/PdfViewer/inc/SkPdfRenderer.h ('k') | experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698