<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Hi, Anton.<br>
      On 08.05.15 12:23, Anton V. Tarasov wrote:<br>
    </div>
    <blockquote cite="mid:554C8093.50205@oracle.com" type="cite">
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      <div class="moz-cite-prefix"><br>
        1314     /**<br>
        1315      * Determines the bounds which will be displayed on the
        screen.<br>
        1316      *<br>
        1317      * @return the visible part of bounds in the coordinate
        space of this comp<br>
        1318      */<br>
        1319     private Rectangle getRecursivelyVisibleBounds() {<br>
        <br>
        Could you please clarify the comment, it's not quite clear from
        the first glance. Something like:<br>
        <br>
        "the bounds of a visible part of the component relative to..."<br>
      </div>
    </blockquote>
    The patch updated:<br>
    <a class="moz-txt-link-freetext" href="http://cr.openjdk.java.net/~serb/8071306/webrev.04">http://cr.openjdk.java.net/~serb/8071306/webrev.04</a><br>
    <blockquote cite="mid:554C8093.50205@oracle.com" type="cite">
      <div class="moz-cite-prefix"> <br>
        2.<br>
        <br>
         100      * The components in this container.<br>
         101      * @see #add<br>
         102      * @see #getComponents<br>
         103      */<br>
         104     private java.util.List<Component> component = new
        ArrayList<>();<br>
        <br>
        May be it's worth to rename the field? The "component" name is
        odd...<br>
      </div>
    </blockquote>
    I suppose it wasn't changed, because this name is used in the
    serialization for a long time. Plus there are a bunch of the similar
    vars like: tmpComponent etc. I can do it later for jdk9 only.
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <blockquote cite="mid:554C8093.50205@oracle.com" type="cite">
      <div class="moz-cite-prefix"> <br>
        Regards,<br>
        Anton.<br>
        <br>
        On 07.05.2015 3:39, Sergey Bylokhov wrote:<br>
      </div>
      <blockquote cite="mid:554AB431.1040707@oracle.com" type="cite">
        <meta http-equiv="content-type" content="text/html;
          charset=utf-8">
        <tt>Hello.</tt><br>
        <tt>Please review the fix for a jdk9. I plan to backport it to
          jdk8u60.</tt><br>
        <br>
        <tt>Description.</tt><br>
        <tt>An </tt><tt>UI</tt><tt> works really slowly, when an
          application has a lot of components in one container, and
          these components should be disabled one by one.</tt><br>
        <tt>The reason is the next sequence of methods calls:</tt><br>
        <tt>Component.setEnabled->updateCursorImmediately()-> some
          cursor related
          staff->GlobalCursorManager._updateCursor->Container.findComponentAt()-iteration


          over all components in the container.....-> twice....<br>
          <br>
        </tt><tt>You can imagine how it works in case of 10000
          components in the container.</tt><br>
        <br>
        <tt>Note that in the bug report described difference jdk6 vs
          jdk8 -> 1sec vs 6 sec. This was caused by the two fixes,
          one of which adds checkTreeLock() and in another one a simple
          array of components was replaced by the ArrayList. Since code
          was added to the really hot method we got so big slowdown.</tt><br>
        <br>
        <tt>To fix the problem I suggest two different approaches:</tt><br>
        <tt> - </tt><tt> </tt>
        <meta name="qrichtext" content="1">
        <tt>Container.java: </tt>
        <meta http-equiv="Content-Type" content="text/html;
          charset=utf-8">
        <style type="text/css">
p, li { white-space: pre-wrap; }
</style><tt>Fix a general case, by eliminating a second iteration in the
          hot loop.</tt><br>
        <tt> - </tt><tt> </tt>
        <meta name="qrichtext" content="1">
        <tt>Component.java: </tt>
        <meta http-equiv="Content-Type" content="text/html;
          charset=utf-8">
        <style type="text/css">
p, li { white-space: pre-wrap; }
</style><tt>Totally eliminates cursor machinery, if component cannot
          affect current cursor. </tt><br>
        <br>
        <tt>Some speedup measurements on my local system:</tt><br>
        <tt> - Simple removing of checkTreeLock() will partly solve a
          regression reported by the user(12 sec -> 5 sec).</tt><br>
        <tt> - Changes in the loop will speedup the code in the worse
          case(5->2 sec)</tt><br>
        <tt> - The changes in the Component.java will change the
          performance from 2 sec to 100< ms</tt><br>
        <br>
        <tt>Test case which was added was improved from 10 seconds to 80
          ms.</tt><br>
        <br>
        <tt>JMH test: </tt><tt><a moz-do-not-send="true"
            class="moz-txt-link-freetext"
            href="http://cr.openjdk.java.net/%7Eserb/8071306/">http://cr.openjdk.java.net/~serb/8071306/</a></tt><tt>SetEnabledPerformanceTest.java</tt><br>
        <br>
        <tt>Fixed</tt><tt> version:</tt><br>
        <br>
        <tt>Benchmark                                       Mode 
          Cnt       Score       Error   Units</tt><br>
        <tt>SetEnabledPerformanceTest.testContains         thrpt    5 
          301300,813 ± 17338,045  ops/ms</tt><br>
        <tt>SetEnabledPerformanceTest.testFindComponentAt  thrpt   
          5      20,521 ±     0,269  ops/ms</tt><br>
        <tt>SetEnabledPerformanceTest.testGetComponentAt   thrpt   
          5      22,297 ±     1,264  ops/ms</tt><br>
        <tt>SetEnabledPerformanceTest.testSetEnabled       thrpt   
          5     711,120 ±    19,837  ops/ms</tt><br>
        <br>
        <tt>Base version:</tt><br>
        <br>
        <tt>Benchmark                                       Mode 
          Cnt       Score      Error   Units</tt><br>
        <tt>SetEnabledPerformanceTest.testContains         thrpt    5 
          299145,642 ± 2120,183  ops/ms</tt><br>
        <tt>SetEnabledPerformanceTest.testFindComponentAt  thrpt   
          5       1,101 ±    0,012  ops/ms</tt><br>
        <tt>SetEnabledPerformanceTest.testGetComponentAt   thrpt   
          5       6,792 ±    0,097  ops/ms</tt><br>
        <tt>SetEnabledPerformanceTest.testSetEnabled       thrpt   
          5       0,464 ±    0,020  ops/ms</tt><br>
        <br>
        <br>
        <tt>Bug: <a moz-do-not-send="true"
            class="moz-txt-link-freetext"
            href="https://bugs.openjdk.java.net/browse/JDK-8071306">https://bugs.openjdk.java.net/browse/JDK-8071306</a></tt><br>
        <tt>Webrev can be found at: <a moz-do-not-send="true"
            class="moz-txt-link-freetext"
            href="http://cr.openjdk.java.net/%7Eserb/8071306/webrev.03">http://cr.openjdk.java.net/~serb/8071306/webrev.03</a></tt><br>
        <br>
        --<br>
        Best regards, Sergey. </blockquote>
      <br>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Best regards, Sergey. </pre>
  </body>
</html>