<AWT Dev> [9] Review Request: 8071306 GUI perfomance are very slow compared java 1.6.0_45

Alexander Zvegintsev alexander.zvegintsev at oracle.com
Thu May 21 14:13:08 UTC 2015


Hi Sergey,

the fix looks good to me too.

--
Thanks,
Alexander.

On 05/21/2015 04:29 PM, Sergey Bylokhov wrote:
> Hello,
> Any volunteers to be a second reviewer?
>
> On 18.05.15 12:03, Anton V. Tarasov wrote:
>> On 15.05.2015 1:57, Sergey Bylokhov wrote:
>>> Hi, Anton.
>>>> +     * Determines the bounds of a visible part of the component relative to its
>>>> +     * parents.
>>>> Did you mean "to its parent"?
>>> Yep, new version:
>>> http://cr.openjdk.java.net/~serb/8071306/webrev.05/
>>
>> Looks good to me.
>>
>> Regards,
>> Anton.
>>
>>
>>>>
>>>>>>
>>>>>> 2.
>>>>>>
>>>>>>  100      * The components in this container.
>>>>>>  101      * @see #add
>>>>>>  102      * @see #getComponents
>>>>>>  103      */
>>>>>>  104     private java.util.List<Component> component = new 
>>>>>> ArrayList<>();
>>>>>>
>>>>>> May be it's worth to rename the field? The "component" name is odd...
>>>>> 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. 
>>>>
>>>> Ok, thanks. It's up to you.
>>>>
>>>> Regards,
>>>> Anton.
>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Anton.
>>>>>>
>>>>>> On 07.05.2015 3:39, Sergey Bylokhov wrote:
>>>>>>> Hello.
>>>>>>> Please review the fix for a jdk9. I plan to backport it to jdk8u60.
>>>>>>>
>>>>>>> Description.
>>>>>>> An UIworks really slowly, when an application has a lot of 
>>>>>>> components in one container, and these components should be 
>>>>>>> disabled one by one.
>>>>>>> The reason is the next sequence of methods calls:
>>>>>>> Component.setEnabled->updateCursorImmediately()-> some cursor 
>>>>>>> related 
>>>>>>> staff->GlobalCursorManager._updateCursor->Container.findComponentAt()-iteration 
>>>>>>> over all components in the container.....-> twice....
>>>>>>>
>>>>>>> You can imagine how it works in case of 10000 components in the 
>>>>>>> container.
>>>>>>>
>>>>>>> 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.
>>>>>>>
>>>>>>> To fix the problem I suggest two different approaches:
>>>>>>>  - Container.java: Fix a general case, by eliminating a second 
>>>>>>> iteration in the hot loop.
>>>>>>>  - Component.java: Totally eliminates cursor machinery, if 
>>>>>>> component cannot affect current cursor.
>>>>>>>
>>>>>>> Some speedup measurements on my local system:
>>>>>>>  - Simple removing of checkTreeLock() will partly solve a 
>>>>>>> regression reported by the user(12 sec -> 5 sec).
>>>>>>>  - Changes in the loop will speedup the code in the worse 
>>>>>>> case(5->2 sec)
>>>>>>>  - The changes in the Component.java will change the performance 
>>>>>>> from 2 sec to 100< ms
>>>>>>>
>>>>>>> Test case which was added was improved from 10 seconds to 80 ms.
>>>>>>>
>>>>>>> JMH test: 
>>>>>>> http://cr.openjdk.java.net/~serb/8071306/SetEnabledPerformanceTest.java
>>>>>>>
>>>>>>> Fixedversion:
>>>>>>>
>>>>>>> Benchmark Mode  Cnt       Score       Error   Units
>>>>>>> SetEnabledPerformanceTest.testContains thrpt    5  301300,813 ± 
>>>>>>> 17338,045  ops/ms
>>>>>>> SetEnabledPerformanceTest.testFindComponentAt thrpt    5      
>>>>>>> 20,521 ±     0,269  ops/ms
>>>>>>> SetEnabledPerformanceTest.testGetComponentAt thrpt    5      
>>>>>>> 22,297 ±     1,264  ops/ms
>>>>>>> SetEnabledPerformanceTest.testSetEnabled thrpt    5     711,120 
>>>>>>> ±    19,837  ops/ms
>>>>>>>
>>>>>>> Base version:
>>>>>>>
>>>>>>> Benchmark Mode  Cnt       Score      Error   Units
>>>>>>> SetEnabledPerformanceTest.testContains thrpt    5  299145,642 ± 
>>>>>>> 2120,183  ops/ms
>>>>>>> SetEnabledPerformanceTest.testFindComponentAt thrpt    5       
>>>>>>> 1,101 ±    0,012  ops/ms
>>>>>>> SetEnabledPerformanceTest.testGetComponentAt thrpt    5       
>>>>>>> 6,792 ±    0,097  ops/ms
>>>>>>> SetEnabledPerformanceTest.testSetEnabled thrpt    5       0,464 
>>>>>>> ±    0,020  ops/ms
>>>>>>>
>>>>>>>
>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8071306
>>>>>>> Webrev can be found at: 
>>>>>>> http://cr.openjdk.java.net/~serb/8071306/webrev.03
>>>>>>>
>>>>>>> --
>>>>>>> Best regards, Sergey. 
>>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Best regards, Sergey.
>>>>
>>>
>>>
>>> -- 
>>> Best regards, Sergey.
>>
>
>
> -- 
> Best regards, Sergey.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20150521/a8829678/attachment.html>


More information about the awt-dev mailing list