[OpenJDK 2D-Dev] <Swing Dev> JDK-8178091 : Bug I will workin on

Prahalad Kumar Narayanan prahalad.kumar.narayanan at oracle.com
Fri Apr 21 01:57:37 UTC 2017


Hello Pat

I 'm not comfortable adding this check for os.name in a common code.
It breaks the very foundation of having os specific code organized in different folders.

>From the inference that 've got from this mail chain, I believe, the issue appears to be from rendering pipeline (linux).
So identifying the root cause and fixing it in respective pipeline would be better a better approach.

Thanks
Have a good day

Prahalad N.

----------------------------------------------------------------------

Message: 1
Date: Thu, 20 Apr 2017 14:40:40 +0200
From: Patrick Chen <chen.j.patrick at gmail.com>
To: Phil Race <philip.race at oracle.com>
Cc: 2d-dev <2d-dev at openjdk.java.net>, "swing-dev at openjdk.java.net"
	<swing-dev at openjdk.java.net>
Subject: Re: [OpenJDK 2D-Dev] <Swing Dev> JDK-8178091 : Bug I will
	workin on
Message-ID:
	<CANmuJ8vUdpVx00O7C39idMywQFc7AdaA=QRQiZQ9FUfDSS24Kw at mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

edit : So (sorry if I repeat myseft )

what I propose :

webrev :
http://cr.openjdk.java.net/~alexsch/chen.j.patrick/8178091/webrev.01/

bug :  JDK-8178091

2017-04-20 11:37 GMT+02:00 Patrick Chen <chen.j.patrick at gmail.com>:

> Hi ,
> thank you  Alexandr !
>
> You are right Phil , but for the moment I did a lot of tests , and it 
> seems that there is no problems with this method ...
> so as the bug is only on Linux I check on the method if we are on 
> linux or not , then only I sync() , like this , on other system ,it 
> will use the asynchrone repaint() method ,
>
> I think for the moment it is a possible way to correct the JDK-8178091 
> bug , of course , it is maybe not final , but it works well.
>
> -Pat
>
> 2017-04-19 18:27 GMT+02:00 Phil Race <philip.race at oracle.com>:
>
>>
>>
>> On 04/19/2017 12:51 AM, Patrick Chen wrote:
>>
>> Ok so can you take the source from the git ?
>>
>>
>> Sounds the same to me as reviewing it there ..
>>
>> You probably have an account in  cr.openjdk.java.net ,
>>
>>
>> but Another solution to fix the bug 8178091 is to write a repaint() 
>> method from Component.java (as we all know :  JPanel.java 
>> -->(extends) >Jcomponent.java
>> -->(extends)-> Composent.java)
>>
>> and the repaint() method is on Component.java
>>
>>
>> So in JPanel.java we add a method repaint() ;
>>
>> public void repaint(){
>> super.repaint() ; //this call repaint() from Component.java to 
>> reproduce a simple repaint(); Toolkit.getDefaultToolkit().sync();
>> }
>>
>>
>> sync sounds to me more like adding a performance problem rather than 
>> fixing one.
>> I'd be very reluctant to accept such a change in core JDK without 
>> appropriate performance testing across all affected pipelines and 
>> platforms.
>>
>> And I don't think it is correct anyway. repaint is asynchronous and 
>> trying to make it synchronous is redefining it 20 years too late.
>>
>> But if you do it yourself in your own code that is up to you ...
>>
>> -phil.
>>
>>
>>
>> so with this each time we call repaint() ; it call our new repaint() 
>> method with the sync(); and then it works well
>>
>>
>>
>> 2017-04-17 16:24 GMT+02:00 Philip Race <philip.race at oracle.com>:
>>
>>> Per openjdk rules, we cannot review or accept webrevs hosted 
>>> anywhere other than cr.openjdk.java.net [1]
>>>
>>> Generally you ask someone who has a login there to do it for you
>>>
>>> Or you may try submitting the patch in-line to this email if it is short.
>>>
>>> Not an attachment. It will get stripped.
>>>
>>> -phil.
>>>
>>> [1] http://openjdk.java.net/guide/changePlanning.html
>>>
>>>
>>> On 4/17/17, 3:42 AM, Patrick Chen wrote:
>>>
>>> https://github.com/cloudStrif/webrev
>>>
>>>
>>> 2017-04-17 12:33 GMT+02:00 Patrick Chen <chen.j.patrick at gmail.com>:
>>>
>>>> so here a webrev :
>>>>
>>>> 2017-04-12 23:41 GMT+02:00 Sergey Bylokhov 
>>>> <sergey.bylokhov at oracle.com>
>>>> :
>>>>
>>>>> (CC) 2d-dev
>>>>> If some of these options helps then most probably the bug is in 
>>>>> the Java2D pipeline(XRender?) and looks like this is duplicate of:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8068529
>>>>>
>>>>>
>>>>>
>>>>> OK ,
>>>>> So I did severals tests with theses options with programms using 
>>>>> full
>>>>> repaint() method
>>>>> ,and it still work well,
>>>>> but occasionnaly ,the lag is here again ,particularly when there 
>>>>> are a lot component on the screen (Jpanel screen)
>>>>>
>>>>> indeed , I think it is not normal that we need theses options to 
>>>>> work well , but it seem the problem does not come from Swing 
>>>>> package , but
>>>>> repaint() method in AWT package ,
>>>>>
>>>>> 2017-04-12 21:26 GMT+02:00 Patrick Chen <chen.j.patrick at gmail.com>:
>>>>>
>>>>>> OK ,
>>>>>> So I did severals tests with theses options with programms using 
>>>>>> full
>>>>>> repaint() method
>>>>>> ,and it still work well,
>>>>>> but occasionnaly ,the lag is here again ,particularly when there 
>>>>>> are a lot component on the screen (Jpanel screen)
>>>>>>
>>>>>> indeed , I think it is not normal that we need theses options to 
>>>>>> work well , but it seem the problem does not come from Swing 
>>>>>> package , but
>>>>>> repaint() method in AWT package ,
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2017-04-11 19:18 GMT+02:00 Sergey Bylokhov <
>>>>>> sergey.bylokhov at oracle.com>:
>>>>>>
>>>>>>>
>>>>>>> Hi ,
>>>>>>> yes ;
>>>>>>> with theses options it works !
>>>>>>> but what that means ?
>>>>>>>
>>>>>>>
>>>>>>> Is it works in case of any options or in some cases it does not 
>>>>>>> work? Please double check.
>>>>>>>
>>>>>>>
>>>>>>> so it not a bug ?
>>>>>>>
>>>>>>> 2017-04-11 18:46 GMT+02:00 Sergey Bylokhov <
>>>>>>> sergey.bylokhov at oracle.com>:
>>>>>>>
>>>>>>>> Hi, Patrick.
>>>>>>>> Can you please run the code using these options:
>>>>>>>> -Dsun.java2d.xrender=true
>>>>>>>> -Dsun.java2d.xrender=false
>>>>>>>> -Dsun.java2d.opengl=true
>>>>>>>> -Dsun.java2d.opengl=false
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> After tests it seems that the problem doesn't come from Timer , 
>>>>>>>> but the repaint() method ,
>>>>>>>>
>>>>>>>>
>>>>>>>> even with this code the bug is here.
>>>>>>>> the bug is on Linux.
>>>>>>>>
>>>>>>>> 2017-04-11 11:07 GMT+02:00 Walter Laan <WLaan at costengineering.eu>:
>>>>>>>>
>>>>>>>>> Note that the example code in JDK-8178091 sleeps on the EDT, 
>>>>>>>>> so you?re lucky it paints at all instead of hanging the UI.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> It looks like you adapted the code from 
>>>>>>>>> http://codereview.stackexchange.com/questions/29630/simple-j
>>>>>>>>> ava-animation-with-swing where no-one experienced with Swing 
>>>>>>>>> pointed out this error L.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Using a javax.swing.Timer (not the java.util.Timer!) and it 
>>>>>>>>> runs okay (using Win10, Java 8u101):
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     *private* *void* go() {
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>         *new* Timer(10, *new* ActionListener() {
>>>>>>>>>
>>>>>>>>>             // *Les* *coordonn?es* *de* *d?part* *de* *notre*
>>>>>>>>> *rond*
>>>>>>>>>
>>>>>>>>>             *private* *int* x = pan.getPosX(), y = 
>>>>>>>>> pan.getPosY();
>>>>>>>>>
>>>>>>>>>             // *Le* *bool?en* pour *savoir* *si* l'on *recule*
>>>>>>>>> *ou* non *sur* l'axe x
>>>>>>>>>
>>>>>>>>>             *private* *boolean* backX = *false*;
>>>>>>>>>
>>>>>>>>>             // *Le* *bool?en* pour *savoir* *si* l'on *recule*
>>>>>>>>> *ou* non *sur* l'axe y
>>>>>>>>>
>>>>>>>>>             *private* *boolean* backY = *false*;
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>             @Override
>>>>>>>>>
>>>>>>>>>             *public* *void* actionPerformed(ActionEvent e) {
>>>>>>>>>
>>>>>>>>>                 // *Si* *la* *coordonn?e* x est *inf?rieure* ? 
>>>>>>>>> 1, on *avance*
>>>>>>>>>
>>>>>>>>>                 *if*(x < 1) {
>>>>>>>>>
>>>>>>>>>                     backX = *false*;
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>                 // *Si* *la* *coordonn?e* x est *sup?rieure* ?
>>>>>>>>> *la* *taille* *du* *Panneau* *moins* *la* *taille* *du* 
>>>>>>>>> *rond*, on *recule*
>>>>>>>>>
>>>>>>>>>                 *if*(x > pan.getWidth() - 50) {
>>>>>>>>>
>>>>>>>>>                     backX = *true*;
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>                 // *Idem* pour l'axe y
>>>>>>>>>
>>>>>>>>>                 *if*(y < 1) {
>>>>>>>>>
>>>>>>>>>                     backY = *false*;
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>                 *if*(y > pan.getHeight() - 50) {
>>>>>>>>>
>>>>>>>>>                     backY = *true*;
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>                 // *Si* on *avance*, on *incr?mente* *la*
>>>>>>>>> *coordonn?e*
>>>>>>>>>
>>>>>>>>>                 // backX est *un* *bool?en*, *donc* !backX
>>>>>>>>> *revient* ? *?crire*
>>>>>>>>>
>>>>>>>>>                 // if (backX == false)
>>>>>>>>>
>>>>>>>>>                 *if*(!backX) {
>>>>>>>>>
>>>>>>>>>                     pan.setPosX(++x);
>>>>>>>>>
>>>>>>>>>                 // *Sinon*, on *d?cr?mente*
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>                 *else* {
>>>>>>>>>
>>>>>>>>>                     pan.setPosX(--x);
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>                 // *Idem* pour l'axe Y
>>>>>>>>>
>>>>>>>>>                 *if*(!backY) {
>>>>>>>>>
>>>>>>>>>                     pan.setPosY(++y);
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>                 *else* {
>>>>>>>>>
>>>>>>>>>                     pan.setPosY(--y);
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>                 // On *redessine* *notre* *Panneau*
>>>>>>>>>
>>>>>>>>>                 pan.repaint();
>>>>>>>>>
>>>>>>>>>             }
>>>>>>>>>
>>>>>>>>>         }).start();
>>>>>>>>>
>>>>>>>>>     }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hope that helps,
>>>>>>>>>
>>>>>>>>> Walter.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *From:* swing-dev [mailto:swing-dev-bounces at openjdk.java.net] 
>>>>>>>>> *On Behalf Of *Patrick Chen
>>>>>>>>> *Sent:* maandag 10 april 2017 12:23
>>>>>>>>> *To:* swing-dev at openjdk.java.net
>>>>>>>>> *Subject:* Re: <Swing Dev> JDK-8178091 : Bug I will workin on
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> (edit : for example this game coded in java :
>>>>>>>>> https://github.com/cloudStrif/GoldenSunD will work with java 7
>>>>>>>>>
>>>>>>>>> but clearly not with java8 (linux 64 bits) because of lags)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2017-04-10 12:19 GMT+02:00 Patrick Chen 
>>>>>>>>> <chen.j.patrick at gmail.com
>>>>>>>>> >:
>>>>>>>>>
>>>>>>>>> Hi every one ,
>>>>>>>>>
>>>>>>>>> just wanted to inform that I am working to fix this bug.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> it is when we devellop animations thanks to repaint() method ,
>>>>>>>>>
>>>>>>>>> for java 7 it works well
>>>>>>>>>
>>>>>>>>> but with java8 not ,
>>>>>>>>>
>>>>>>>>> (linux 64 bits it doesn't really work )
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> so after watching the source code it seem that it is not a 
>>>>>>>>> swing problem
>>>>>>>>>
>>>>>>>>> but AWT : Component.java .
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> thank you
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20170420/7ff24d9c/attachment.html>

End of 2d-dev Digest, Vol 119, Issue 11
***************************************



More information about the 2d-dev mailing list