JavaFX graphics performance and suitability for advanced animations (BrickBreaker)

steve.x.northover at oracle.com steve.x.northover at oracle.com
Mon Jun 3 05:41:39 PDT 2013


Can you make the changes and verify the results?  BrickBreaker and the 
other samples are supposed to be "how to" examples for people to emulate.

Steve

On 03/06/2013 7:56 AM, Pavel Safrata wrote:
> Hello,
> I'm a bit behind with this thread but I want to make a few comments on 
> AnimationTimer as  there is a hidden message in the discussion that 
> AnimationTimer is the way to go.
>
> First, AnimationTimer is called in each pulse, which doesn't have much 
> in common with display refresh rate (if I understand the term 
> correctly). More importantly, AnimationTimer is kind of extreme 
> low-level animation API that should not be needed in vast majority of 
> cases. I think a better way to code BrickBraker would be to use a 
> single TranslateTransition for the entire straight part of the ball's 
> trajectory; it would automatically compute the interpolation and sync 
> the position on every pulse, which should have the same result as 
> doing everything manually with the AnimationTimer (but expressed in 
> simpler code).
>
> Regards,
> Pavel
>
> On 31.5.2013 22:45, Richard Bair wrote:
>> I pushed the fix to graphics. Thanks Scott for tracking that down! It 
>> looks 10x better.
>>
>> Richard
>>
>> On May 31, 2013, at 9:25 AM, Richard Bair <richard.bair at oracle.com> 
>> wrote:
>>
>>> Patch attached to https://javafx-jira.kenai.com/browse/RT-29801. I'm 
>>> not seeing any stutter on my Mac, interested to hear the experience 
>>> on Windows.
>>>
>>> Richard
>>>
>>> On May 31, 2013, at 8:44 AM, Richard Bair <richard.bair at oracle.com> 
>>> wrote:
>>>
>>>> Ya I did the same, am now adjusting it so the factor by which 
>>>> things move is better.
>>>>
>>>> Richard
>>>>
>>>> On May 31, 2013, at 8:32 AM, Scott Palmer <swpalmer at gmail.com> wrote:
>>>>
>>>>> Richard, I suspect you made a typo. I think you mean "*40*ms is a 
>>>>> really odd number..." (it was 25 FPS, not 25ms)
>>>>>
>>>>> I quickly hacked it to use AnimationTimer and the animation is 
>>>>> very smooth now.  Though I didn't make the required changes to 
>>>>> adjust the speeds based on the refresh rate.  The quick conversion 
>>>>> to AnimationTimer is trivial.. but going through and adjusting all 
>>>>> the translations and increments to be relative to the time between 
>>>>> consecutive frames is something I don't have time for.
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Scott
>>>>>
>>>>>
>>>>> Scott
>>>>>
>>>>>
>>>>> On Fri, May 31, 2013 at 11:21 AM, Kevin Rushforth 
>>>>> <kevin.rushforth at oracle.com> wrote:
>>>>> Btw, there is a JIRA issue filed against BrickBreaker 
>>>>> specifically: https://javafx-jira.kenai.com/browse/RT-29801
>>>>>
>>>>>
>>>>> Richard Bair wrote:
>>>>>> Have you tried to determine what the FPS is? My guess is that FPS 
>>>>>> is not anywhere near the limit and it is the occasional stutter 
>>>>>> that is the problem, but I'm not certain. Knowing that helps to 
>>>>>> point in which direction to go. The fact that it runs pretty well 
>>>>>> on a PI is indication that it isn't the framerate.
>>>>>>
>>>>>> Richard
>>>>>>
>>>>>> On May 31, 2013, at 4:26 AM, Scott Palmer <swpalmer at gmail.com> 
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>> Speaking of poor animation in Ensemble...
>>>>>>>
>>>>>>> Is anyone able to run Brick Breaker without choppy animation or 
>>>>>>> poor framerate performance on the ball?
>>>>>>>
>>>>>>> Now, I suspect the issue there is in the balls animation 
>>>>>>> implementation in the application rather than the JavaFX 
>>>>>>> framework, as the bat moves smoothly when I move the mouse, but 
>>>>>>> the overall perception of JavaFX performance for this demo app 
>>>>>>> is not good. I would go so far as to say that Brick Breaker has 
>>>>>>> had the opposite effect it was intended too - simply because the 
>>>>>>> animation of the ball is not smooth. That's something that would 
>>>>>>> run smoothly on a Commodore 64,yet the last time I tried it (5 
>>>>>>> minutes ago) with JavaFX 8.0-b91 on a quad-core 3GHz Windows 7 
>>>>>>> box with a decent NVIDIA card, it didn't run as smoothly as I 
>>>>>>> would expect.  Just a single ball with a shadow bouncing around 
>>>>>>> the screen seemed to have a low framerate and the occasional 
>>>>>>> skipped frame.  It just didn't look that great.
>>>>>>>
>>>>>>> The fact that Brick Breaker ships as a sample app from Oracle 
>>>>>>> and it's animation looks bad is harming JavaFX's reputation in 
>>>>>>> my opinion.  I think  it could run much better on the existing 
>>>>>>> JavaFX runtime.  The simple animations in the Ensemble app run 
>>>>>>> much smoother for example.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Scott
>>>>>>>
>>>>>>>
>>>>>>> On Thu, May 30, 2013 at 11:11 AM, Richard Bair 
>>>>>>> <richard.bair at oracle.com> wrote:
>>>>>>>
>>>>>>>
>>>>>>>> Then you mention Halo 5.  I have to say the subtext here 
>>>>>>>> troubles me
>>>>>>>> greatly.  If I read you correctly then you are saying that 
>>>>>>>> JavaFX is not
>>>>>>>> really suitable for games (at least anything beyond the demands 
>>>>>>>> of something
>>>>>>>> like Solitaire).  As someone else pointed out, what is point of 
>>>>>>>> developing
>>>>>>>> 3D support in JavaFX if it is not really suitable for games?  
>>>>>>>> To say it is
>>>>>>>> not suitable for games implies that it is not really suitable 
>>>>>>>> for *any*
>>>>>>>> application that requires performant animations and 
>>>>>>>> visualisations.  What
>>>>>>>> use then is the 3D API?
>>>>>>>>
>>>>>>> That's not fair at all. There are a *lot* of enterprise use 
>>>>>>> cases for 3D, and we get these requests all the time. Whether 
>>>>>>> we're taking about 3D visualizations for medical or engineering 
>>>>>>> applications or consumer applications (product display, etc), 
>>>>>>> there is a requirement for 3D that are broader than real time 
>>>>>>> first person shooters.
>>>>>>>
>>>>>>> Game engines often have very specialized scene graphs (sometimes 
>>>>>>> several of them) as well as very specialized tricks for getting 
>>>>>>> the most out of their graphics cards. When we expose API that 
>>>>>>> allows people to hammer the card directly, then it would be 
>>>>>>> possible for somebody to build some of the UI in FX and let 
>>>>>>> their game engine be hand written (in Unity or JOGL or whatever).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> However, I am not sure that having me preparing "reproducible" 
>>>>>>>> test cases
>>>>>>>> will actually help.  In my experience, the Ensemble app already 
>>>>>>>> serves this
>>>>>>>> purpose.  The choppiness I describe is *always* prevalent when 
>>>>>>>> I run the
>>>>>>>> animations and transitions in Ensemble (including Ensemble 8).  
>>>>>>>> The only
>>>>>>>> variation is in the degree of that choppiness.
>>>>>>>>
>>>>>>> Then start with that, something absolutely dead simple like a 
>>>>>>> path animation or rotate transition and lets figure out how to 
>>>>>>> measure the jitter and get it into our benchmark suite.
>>>>>>>
>>>>>>> Richard
>>>>>>>
>>>>>>>
>



More information about the openjfx-dev mailing list