<Swing Dev> [OpenJDK 2D-Dev] JDK-8178091 : Bug I will workin on
Patrick Chen
chen.j.patrick at gmail.com
Thu Apr 20 09:37:21 UTC 2017
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/swing-dev/attachments/20170420/c1c879af/attachment.html>
More information about the swing-dev
mailing list