<div dir="auto">Phil,<div dir="auto">I just gg a bit and got the PDFImage source:</div><div dir="auto"><br></div><div dir="auto"><div dir="auto">public static void main( String[] args ) throws IOException</div><div dir="auto">79 <span style="white-space:pre">     </span>    {</div><div dir="auto">80 <span style="white-space:pre">       </span>        try</div><div dir="auto">81 <span style="white-space:pre">       </span>        {</div><div dir="auto">82 <span style="white-space:pre"> </span>            // force KCMS (faster than LCMS) if available</div><div dir="auto">83 <span style="white-space:pre">       </span>            Class.forName("sun.java2d.cmm.kcms.KcmsServiceProvider");</div><div dir="auto">84 <span style="white-space:pre"> </span>            System.setProperty("sun.java2d.cmm", "sun.java2d.cmm.kcms.KcmsServiceProvider");</div><div dir="auto">85 <span style="white-space:pre">        </span>        }</div><div dir="auto">86 <span style="white-space:pre"> </span>        catch (ClassNotFoundException e)</div><div dir="auto">87 <span style="white-space:pre">  </span>        {</div><div dir="auto">88 <span style="white-space:pre"> </span>            LOG.debug("KCMS service not found - using LCMS", e);</div><div dir="auto">89 <span style="white-space:pre">      </span>        }</div><div dir="auto">90 <span style="white-space:pre"> </span></div></div><div dir="auto"><br></div><div dir="auto"><a href="https://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java?revision=1829374&view=markup" target="_blank" rel="noreferrer">https://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java?revision=1829374&view=markup</a><br></div><div dir="auto"><br></div><div dir="auto">That's all folks !</div></div><br><div class="gmail_quote"><div dir="ltr">Le ven. 5 oct. 2018 à 01:00, Philip Race <<a href="mailto:philip.race@oracle.com" target="_blank" rel="noreferrer">philip.race@oracle.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Yep. LCMS is the default in 8u.<br>
    <br>
    And although KCMS is a lot faster  on my CConv test ...<br>
    <br>
    ~/jdk8u181/bin/java CConv<br>
    13289<br>
    <br>
     ~/jdk8u181/bin/java
    -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider CConv<br>
    5131<br>
    <br>
    <br>
    It makes no difference on the pdf conversion :<br>
    <br>
    ~/jdk8u181/bin/java -jar pdfbox-app-2.0.11.jar PDFToImage  -time
    test.pdf Rendered 1 page in 4985ms<br>
    <br>
    ~/jdk8u181/bin/java
    -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -jar
    pdfbox-app-2.0.11.jar PDFToImage  -time test.pdf <br>
    Rendered 1 page in 4723ms<br>
    <br>
    <br>
    Note: KCMS maybe faster on CConv but it has no support for modern
    ICC profiles<br>
    and I haven't checked if it is even applying the pdfbox one
    properly.<br>
    But it does have support to split a job into concurrent tasks for
    sub-images<br>
    which can help on the larger images like the one I am using in
    CConv.<br>
    <br>
    -phil.<br>
    <br>
    On 10/4/18, 2:24 PM, Philip Race wrote:
    <blockquote type="cite">
      
      I might be losing it, but I am 99% sure that LCMS is the color
      conversion engine in 8.<br>
      KCMS was there only for backup. You'd have to know the magic flag
      to get it and<br>
      no one has said anything to the effect that they are using it.<br>
      <br>
      -phil.<br>
      <br>
      On 10/4/18, 11:33 AM, Laurent Bourgès wrote:
      <blockquote type="cite">
        <div dir="auto">Phil,
          <div dir="auto">I wondered if ang RenderingHint defaults
            changed since 8...</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">Moreover I started playing with linux perf +
            jit agent and it is easy than before wigh oprofile +
            jvmtiagent.</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">I noticed that OracleJDK8 uses KCMS and
            OpenJDK11 uses LCMS for color conversion as does OpenJDK8,
            that could explain the performance gap.</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">Finally PDFImage test is run only once so the
            overhead may come from warmup (jit, g1)...</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">More later,</div>
          <div dir="auto">Laurent</div>
        </div>
        <br>
        <div class="gmail_quote">
          <div dir="ltr">Le jeu. 4 oct. 2018 à 20:03, Phil Race <<a href="mailto:philip.race@oracle.com" rel="noreferrer noreferrer" target="_blank">philip.race@oracle.com</a>>

            a écrit :<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF"> <br>
              <br>
              <div class="m_-1809761035282817744m_-4382802829285680414m_8353807606653352915moz-cite-prefix">On
                10/03/2018 11:58 PM, Laurent Bourgès wrote:<br>
              </div>
              <blockquote type="cite">
                <div dir="auto">Hi,
                  <div dir="auto">I will get the code and add debugging
                    logs: env & system properties and java2d
                    RenderingHints.</div>
                </div>
              </blockquote>
              <br>
              The code in pdfbox passes null for the hints. So there
              should be no difference attributable to that.<br>
              <br>
              -phil.<br>
              <blockquote type="cite">
                <div dir="auto">
                  <div dir="auto"><br>
                  </div>
                  <div dir="auto">I suspect these hints are different or
                    have a noticiable impact: color interpolation &
                    rendering quality.</div>
                  <div dir="auto"><br>
                  </div>
                  <div dir="auto">I suppose the backend corresponds to
                    software loops but some 2d operations can be
                    accelerated ?</div>
                  <div dir="auto"><br>
                  </div>
                  <div dir="auto">Anyway I will push any change in the
                    code.</div>
                  <div dir="auto"><br>
                  </div>
                  <div dir="auto">PS: I can run linux perf to profile
                    both java & native code....</div>
                  <div dir="auto"><br>
                  </div>
                  <div dir="auto">Cheers,</div>
                  <div dir="auto">Laurent</div>
                </div>
                <br>
                <div class="gmail_quote">
                  <div dir="ltr">Le jeu. 4 oct. 2018 à 07:50, Daniel
                    Persson <<a href="mailto:mailto.woden@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">mailto.woden@gmail.com</a>>
                    a écrit :<br>
                  </div>
                  <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                    <div dir="ltr">
                      <div dir="ltr">Hi Philip and Laurent.
                        <div><br>
                        </div>
                        <div>I've talked with Tilman and Andreas from
                          the PDFBox team and they see similar
                          connections to the ColorConvertOp filter but
                          wanted to try with one of the images of the
                          PDF as a raster.</div>
                        <div><br>
                        </div>
                        <div>As we try different things I thought it
                          good for collaboration to create a repository
                          with the code so all can contribute.</div>
                        <div><br>
                        </div>
                        <div><a href="https://github.com/kalaspuffar/ColorConvTest" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">https://github.com/kalaspuffar/ColorConvTest</a><br>
                        </div>
                        <div><br>
                        </div>
                        <div>I've run the 3 different tests on my
                          Machine (Thinkpad P51s) with custom Gentoo
                          installed, if important to the conversation.</div>
                        <div><br>
                        </div>
                        <div>I tried to invite you all as collaborators
                          to this repository if you think this is a bad
                          Idea let me know.</div>
                        <div><br>
                        </div>
                        <div>Best regards</div>
                        <div>Daniel</div>
                      </div>
                    </div>
                    <br>
                    <div class="gmail_quote">
                      <div dir="ltr">On Wed, Oct 3, 2018 at 7:51 PM
                        Laurent Bourgès <<a href="mailto:bourges.laurent@gmail.com" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">bourges.laurent@gmail.com</a>>


                        wrote:<br>
                      </div>
                      <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                        <div dir="auto">Very good job, phil.
                          <div dir="auto"><br>
                          </div>
                          <div dir="auto">I will try your CCONV test on
                            my linux machine to see if it is platform
                            dependent ... or hw ?</div>
                          <div dir="auto"><br>
                          </div>
                          <div dir="auto">Laurent</div>
                        </div>
                        <br>
                        <div class="gmail_quote">
                          <div dir="ltr">Le mer. 3 oct. 2018 à 19:19,
                            Philip Race <<a href="mailto:philip.race@oracle.com" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">philip.race@oracle.com</a>>


                            a écrit :<br>
                          </div>
                          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                            <div text="#000000" bgcolor="#FFFFFF"> <br>
                              <br>
                              On 10/3/18, 1:15 AM, Laurent Bourgès
                              wrote:
                              <blockquote type="cite">
                                <div dir="auto">Phil,
                                  <div dir="auto"><br>
                                    <div dir="auto">If you look at the
                                      given pdf file, it has large
                                      images that exceed 2k so such ones
                                      may be more costly to convert.</div>
                                  </div>
                                </div>
                              </blockquote>
                              <br>
                              FWIW the one I profiled was by far the
                              largest at 2577x1540.<br>
                              The rest are more like 100x100, 200x200 or
                              500x500 - all approximations.<br>
                              <blockquote type="cite">
                                <div dir="auto">
                                  <div dir="auto">
                                    <div dir="auto"><br>
                                    </div>
                                    <div dir="auto">As jpeg decoder in
                                      openjdk11 is different than
                                      oraclejdk8, it may cause more
                                      ColorConvertOp filter operations
                                      ... if color profiles are
                                      different.</div>
                                  </div>
                                </div>
                              </blockquote>
                              <br>
                              That doesn't seem likely and in fact since
                              I  instrumented ColorConvertOp in 8 &
                              11,  I know exactly how many times it was
                              invoked<br>
                              by pdfbox, (11 times in both cases) and
                              that all the image data is the same. SRC
                              and DEST are the same types etc.<br>
                              <br>
                              Also the version of LCMS is the same in 8
                              and 11 (v2.9).<br>
                              <br>
                              -phil<br>
                              <blockquote type="cite">
                                <div dir="auto">
                                  <div dir="auto">
                                    <div dir="auto"><br>
                                    </div>
                                    <div dir="auto">Anyway this
                                      performance is not related to
                                      Marlin renderer, so I can not help
                                      much except in its diagnostic.</div>
                                    <div dir="auto"><br>
                                    </div>
                                    <div dir="auto">Cheers,</div>
                                    <div dir="auto">Laurent</div>
                                  </div>
                                </div>
                                <br>
                                <div class="gmail_quote">
                                  <div dir="ltr">Le mar. 2 oct. 2018 à
                                    23:35, Philip Race <<a href="mailto:philip.race@oracle.com" rel="noreferrer noreferrer
                                      noreferrer noreferrer noreferrer" target="_blank">philip.race@oracle.com</a>>


                                    a écrit :<br>
                                  </div>
                                  <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                                    <div text="#000000" bgcolor="#FFFFFF"> I've spent some
                                      time examining what pdfbox is
                                      passing to ColorConvertOp<br>
                                      It is called about 10 or 11 times
                                      in this test with images typically
                                      1-2K in each dimension.<br>
                                      The input image is a Custom
                                      BufferedImage which uses an
                                      ICC_ColorSpace constructed<br>
                                      from a color profile file that is
                                      embedded in pdfbox which is an
                                      open source equivalent<br>
                                      of what Acrobat uses. It has a 4
                                      component raster and is opaque<br>
                                      <br>
                                      This is filtered into a 3
                                      component standard INT_RGB
                                      ColorModel.<br>
                                      <br>
                                      I've distilled this down into a
                                      small program which has an copy of
                                      the method<br>
                                      that is defined in pdfbox and is
                                      invoking the supposedly slow
                                      ColorConvertOp.<br>
                                      <br>
                                      So I believe this is all exactly
                                      what is happening in pdfbox.<br>
                                      <br>
                                      What I find is that it is actually
                                      much faster on JDK11 than JDK 8.<br>
                                      <br>
                                      prrubuntu:~$ ~/jdk-11/bin/java
                                      CConv <br>
                                      4881<br>
                                      prrubuntu:~$ ~/jdk8u181/bin/java
                                      CConv<br>
                                      12529<br>
                                      <br>
                                      <br>
                                      I can't say why that would be but
                                      the results are clear.<br>
                                      So I am left to suppose that
                                      pdfbox really is doing something
                                      different in 8 vs 11.<br>
                                      Or that this not the real problem.
                                      What do others see ?<br>
                                      <br>
                                      I've attached the program. The 1Mb
                                      color profile file can be got from
                                      the pdfbox sources.<br>
                                      <br>
                                      -phil.<br>
                                      <br>
                                      <br>
                                      On 10/2/18, 9:35 AM, Laurent
                                      Bourgès wrote:
                                      <blockquote type="cite">
                                        <div dir="auto">
                                          <div>Hi Daniel,</div>
                                          <div dir="auto">
                                            <div class="gmail_quote">
                                              <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                                                <div dir="ltr">
                                                  <div dir="ltr">
                                                    <div dir="ltr">
                                                      <div><br>
                                                      </div>
                                                      <div>Let's not
                                                        compare apples
                                                        and oranges.
                                                        What I can see
                                                        it takes the
                                                        same route and
                                                        behave similarly.</div>
                                                    </div>
                                                  </div>
                                                </div>
                                              </blockquote>
                                            </div>
                                          </div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto"> I agree, I
                                            did not take enough time to
                                            get accurate profiles,
                                            sorry.<br>
                                          </div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto">
                                            <div class="gmail_quote">
                                              <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                                                <div dir="ltr">
                                                  <div dir="ltr">
                                                    <div dir="ltr">
                                                      <div><br>
                                                      </div>
                                                      <div>If you look
                                                        at</div>
                                                      <div><a href="http://uhash.com/java_reg/Call_Tree_java_8.html" rel="noreferrer
                                                          noreferrer
                                                          noreferrer
                                                          noreferrer
                                                          noreferrer noreferrer noreferrer" target="_blank">http://uhash.com/java_reg/Call_Tree_java_8.html</a><br>
                                                      </div>
                                                      <div><a href="http://uhash.com/java_reg/Call_Tree_java_11.html" rel="noreferrer
                                                          noreferrer
                                                          noreferrer
                                                          noreferrer
                                                          noreferrer noreferrer noreferrer" target="_blank">http://uhash.com/java_reg/Call_Tree_java_11.html</a><br>
                                                      </div>
                                                      <div><br>
                                                      </div>
                                                      <div>You can see
                                                        that
                                                        ConvertOp.filter
                                                        takes 1.5s
                                                        longer on Java
                                                        11.</div>
                                                    </div>
                                                  </div>
                                                </div>
                                              </blockquote>
                                            </div>
                                          </div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto">I confirm:
                                            1.8s vs 300ms.</div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto">Philip, do you
                                            know what could have change
                                            in this 2d area ?</div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto">I imagine
                                            ColorConvertOp delegates to
                                            native code so color profile
                                            (ICC) or hidpi support may
                                            have an impact here (or just
                                            compiler options may be
                                            different) ...</div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto">If needed, I
                                            could profile native code
                                            using oprofile / perf.</div>
                                          <div dir="auto"><br>
                                          </div>
                                          <div dir="auto">Laurent</div>
                                        </div>
                                      </blockquote>
                                    </div>
                                  </blockquote>
                                </div>
                              </blockquote>
                            </div>
                          </blockquote>
                        </div>
                      </blockquote>
                    </div>
                  </blockquote>
                </div>
              </blockquote>
              <br>
            </div>
          </blockquote>
        </div>
      </blockquote>
    </blockquote>
  </div>

</blockquote></div>