<AWT Dev> [9] Review Request: 8071306 GUI perfomance are very slow compared java 1.6.0_45
Anton V. Tarasov
anton.tarasov at oracle.com
Mon May 18 09:03:07 UTC 2015
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20150518/12d4d4d4/attachment.html>
More information about the awt-dev
mailing list