From 8ef7783b1991349c559196b6566bb9f67bb2b392 Mon Sep 17 00:00:00 2001 From: danfickle Date: Sun, 20 Oct 2019 13:25:16 +1100 Subject: [PATCH] #396 Profiling performance case for border radius being very slow. [ci skip] --- .../performance/PerformanceCaseGenerator.java | 20 +++++++++++++++++++ .../performance/ProfilingCaseRunner.java | 9 ++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/PerformanceCaseGenerator.java b/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/PerformanceCaseGenerator.java index cee774778..ecf4bf237 100644 --- a/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/PerformanceCaseGenerator.java +++ b/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/PerformanceCaseGenerator.java @@ -32,5 +32,25 @@ public static String tableRows(int howMany) { .mapToObj(i -> tr) .collect(Collectors.joining("\n", hdr, ftr)); } + + /** + * Performace case for: + * Issue 396 - CSS border-radius makes pdf rendering very slow. + * Caused by Area constructor being very slow (according to VisualVM). + * + */ + public static String borderRadius(int howMany) { + final String hdr = ""; + final String div = "
"; + final String ftr = ""; + + return IntStream.range(0, howMany) + .mapToObj(i -> div) + .collect(Collectors.joining("\n", hdr, ftr)); + } } diff --git a/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/ProfilingCaseRunner.java b/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/ProfilingCaseRunner.java index 34a5af7f0..60f0b0dda 100644 --- a/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/ProfilingCaseRunner.java +++ b/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/performance/ProfilingCaseRunner.java @@ -14,16 +14,18 @@ private static void run(String name, String html) throws Exception { Thread.sleep(20_000); + System.out.println("Beginning actual case now..."); + long start = System.currentTimeMillis(); ByteArrayOutputStream baos = new ByteArrayOutputStream(0xffff); PdfRendererBuilder builder = new PdfRendererBuilder(); - builder.withHtmlContent(html, null); + builder.withHtmlContent(html, PerformanceCaseGenerator.class.getResource("/").toExternalForm()); builder.toStream(baos); builder.useFastMode(); builder.run(); long end = System.currentTimeMillis(); - System.out.println("Profiling case took " + (end - start) + "milliseconds."); + System.out.println("Profiling case took " + (end - start) + " milliseconds."); Files.createDirectories(Paths.get("target/test/profiling/")); Files.write(Paths.get("target/test/profiling/" + name + ".pdf"), baos.toByteArray()); @@ -33,7 +35,8 @@ public static void main(String... args) throws Exception { // Just uncomment the one you want to profile... //run("paragraphs", PerformanceCaseGenerator.paragraphs(80_000)); - run("table-rows", PerformanceCaseGenerator.tableRows(50_000)); + //run("table-rows", PerformanceCaseGenerator.tableRows(50_000)); + run("border-radius", PerformanceCaseGenerator.borderRadius(30_000)); } }