diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | pdfium.gni | 3 | ||||
-rw-r--r-- | samples/BUILD.gn | 5 | ||||
-rw-r--r-- | samples/pdfium_test.cc | 32 |
4 files changed, 40 insertions, 2 deletions
@@ -163,7 +163,7 @@ For contributing code, we will follow as much as possible. The main exceptions are: 1. Code has to conform to the existing style and not Chromium/Google style. -2. PDFium uses a different tool for code reviews, and credentials for +2. PDFium uses a different tool for code reviews, and credentials for the tool need to be generated before uploading a CL. diff --git a/pdfium.gni b/pdfium.gni index d9bdfb6687..530301a5d9 100644 --- a/pdfium.gni +++ b/pdfium.gni @@ -50,6 +50,9 @@ declare_args() { # Build a complete static library pdf_is_complete_lib = false + # Enable callgrind for performance profiling + enable_callgrind = false + # Enable coverage information use_coverage = false diff --git a/samples/BUILD.gn b/samples/BUILD.gn index 59ab4b4a11..8fbf5d552f 100644 --- a/samples/BUILD.gn +++ b/samples/BUILD.gn @@ -32,6 +32,11 @@ config("pdfium_samples_config") { if (is_asan) { defines += [ "PDF_ENABLE_ASAN" ] } + + if (enable_callgrind) { + defines += [ "ENABLE_CALLGRIND" ] + } + if (use_coverage && is_clang) { cflags += [ "--coverage", diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc index 85cc0d3526..93821d963a 100644 --- a/samples/pdfium_test.cc +++ b/samples/pdfium_test.cc @@ -37,6 +37,10 @@ #include <unistd.h> #endif +#ifdef ENABLE_CALLGRIND +#include <valgrind/callgrind.h> +#endif // ENABLE_CALLGRIND + #ifdef PDF_ENABLE_V8 #include "v8/include/libplatform/libplatform.h" #include "v8/include/v8.h" @@ -76,13 +80,20 @@ struct Options { : show_config(false), show_metadata(false), send_events(false), +#ifdef ENABLE_CALLGRIND + callgrind_delimiters(false), +#endif // ENABLE_CALLGRIND pages(false), md5(false), - output_format(OUTPUT_NONE) {} + output_format(OUTPUT_NONE) { + } bool show_config; bool show_metadata; bool send_events; +#ifdef ENABLE_CALLGRIND + bool callgrind_delimiters; +#endif // ENABLE_CALLGRIND bool pages; bool md5; OutputFormat output_format; @@ -624,6 +635,10 @@ bool ParseCommandLine(const std::vector<std::string>& args, options->show_metadata = true; } else if (cur_arg == "--send-events") { options->send_events = true; +#ifdef ENABLE_CALLGRIND + } else if (cur_arg == "--callgrind-delim") { + options->callgrind_delimiters = true; +#endif // ENABLE_CALLGRIND } else if (cur_arg == "--ppm") { if (options->output_format != OUTPUT_NONE) { fprintf(stderr, "Duplicate or conflicting --ppm argument\n"); @@ -1201,8 +1216,12 @@ static void ShowConfig() { static const char kUsageString[] = "Usage: pdfium_test [OPTION] [FILE]...\n" " --show-config - print build options and exit\n" + " --show-metadata - print the file metadata\n" " --show-structure - print the structure elements from the document\n" " --send-events - send input described by .evt file\n" +#ifdef ENABLE_CALLGRIND + " --callgrind-delim - delimit interesting section when using callgrind\n" +#endif // ENABLE_CALLGRIND " --bin-dir=<path> - override path to v8 external data\n" " --font-dir=<path> - override path to external fonts\n" " --scale=<number> - scale output size by number (e.g. 0.5)\n" @@ -1281,6 +1300,12 @@ int main(int argc, const char* argv[]) { if (!file_contents) continue; fprintf(stderr, "Rendering PDF file %s.\n", filename.c_str()); + +#ifdef ENABLE_CALLGRIND + if (options.callgrind_delimiters) + CALLGRIND_START_INSTRUMENTATION; +#endif // ENABLE_CALLGRIND + std::string events; if (options.send_events) { std::string event_filename = filename; @@ -1301,6 +1326,11 @@ int main(int argc, const char* argv[]) { } } RenderPdf(filename, file_contents.get(), file_length, options, events); + +#ifdef ENABLE_CALLGRIND + if (options.callgrind_delimiters) + CALLGRIND_STOP_INSTRUMENTATION; +#endif // ENABLE_CALLGRIND } FPDF_DestroyLibrary(); |