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

Philip Race philip.race at oracle.com
Thu Apr 20 23:30:08 UTC 2017


If appropriate conceptually (and I am not sure it is), then this
is better addressed in a more localised way in code specific to
the xrender pipeline which is the only pipeline that has this
problem .. correct ? And if it is only in this pipeline an investigation
into the specifics of what is different would be the place to start.

-phil.

On 4/20/17, 5:40 AM, Patrick Chen wrote:
> edit : So (sorry if I repeat myseft )
>
> what I propose :
>
> webrev : 
> http://cr.openjdk.java.net/~alexsch/chen.j.patrick/8178091/webrev.01/ 
> <http://cr.openjdk.java.net/%7Ealexsch/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 
> <mailto: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
>     <mailto: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
>>         <http://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 <mailto:philip.race at oracle.com>>:
>>
>>             Per openjdk rules, we cannot review or accept webrevs
>>             hosted anywhere
>>             other than cr.openjdk.java.net
>>             <http://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
>>             <http://openjdk.java.net/guide/changePlanning.html>
>>
>>
>>             On 4/17/17, 3:42 AM, Patrick Chen wrote:
>>>             https://github.com/cloudStrif/webrev
>>>             <https://github.com/cloudStrif/webrev>
>>>
>>>
>>>             2017-04-17 12:33 GMT+02:00 Patrick Chen
>>>             <chen.j.patrick at gmail.com
>>>             <mailto: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
>>>                 <mailto: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
>>>                     <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
>>>>                     <mailto: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
>>>>                         <mailto: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
>>>>>                             <mailto: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
>>>>>>                                 <mailto: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-java-animation-with-swing
>>>>>>                                     <http://codereview.stackexchange.com/questions/29630/simple-java-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
>>>>>>                                     <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
>>>>>>                                     <mailto: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
>>>>>>                                     <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
>>>>>>                                     <mailto: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/eb2434dd/attachment.html>


More information about the 2d-dev mailing list