<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    They really do that ? So we can't fix that in OpenJDK.<br>
    <br>
    Options include<br>
    1)  contribute a big and complex MT enhancement to LittleCMS.<br>
    2) Tweak PDFBox to be more MT itself.<br>
    3) Buy a faster computer :-)<br>
    4) Maybe (?) see if there is a way to sub-divide the work we hand to
    LCMS<br>
    but that is on the scale of (1) and is not something likely to
    happen unless<br>
    it is a community contribution.<br>
    <br>
    But I must add the caveat that I am not sure how well KCMS actually
    did<br>
    what it was asked anyway .. very old ... and unmaintained .. no
    support for<br>
    modern ICC profiles .. and insecure (too trusting) .. and not open
    source.<br>
    So many reasons to ditch it. And maybe the performance came at the<br>
    cost of correctness ...<br>
    <br>
    And again, I still didn't see the same degradation myself.<br>
    <br>
    -phil.<br>
    <br>
    On 10/4/18, 9:53 PM, Laurent Bourgès wrote:
    <blockquote
cite="mid:CAKjRUT68rT=RaMqCau3O1d86eFDkgg1KZLMXhyXowubXcdt9uw@mail.gmail.com"
      type="cite">
      <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 moz-do-not-send="true"
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
            moz-do-not-send="true" 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 moz-do-not-send="true"
                      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 moz-do-not-send="true"
                              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 moz-do-not-send="true"
                                    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
                                  moz-do-not-send="true"
                                  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
                                      moz-do-not-send="true"
                                      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
                                              moz-do-not-send="true"
                                              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
                                                          moz-do-not-send="true"
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
                                                          moz-do-not-send="true"
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>
    </blockquote>
  </body>
</html>