Usage of Toolkit firePulse
Dr. Michael Paus
mp at jugs.org
Thu Sep 24 18:44:57 UTC 2015
I have written a little test program to evaluate the various strategies
which have
been discussed here. You can download it via this link:
<https://www.dropbox.com/s/vmg9nyn7pdfk4b1/SmoothButterflies.java?dl=0>
The program creates a large canvas inside a scroll pane and fills it
with some
butterflies. When you scroll the pane the canvas is redrawn when a certain
threshold is exceeded. With some boolean flags at the top of the program
you can select the redraw strategy.
This was just a quick and dirty hack, so I hope I haven't made any mistakes
but the result so far is that only the AnimationTimer strategy leads to
a amazingly
smooth result. For all other strategies the scrolling performance is
terrible.
(I have not yet tried the proposal from Tomas.)
Give it a try yourself. The initial setting are for AnimationTimer.
Michael
Am 24.09.15 um 17:17 schrieb Kevin Rushforth:
> Yes, I think this might be a better approach.
>
> -- Kevin
>
>
> Scott Palmer wrote:
>> For some of these use cases I wonder if an AnimationTimer could be
>> used to handle spreading work out.
>> E.g in the case of rendering to a canvas across multiple pulses, do a
>> bit at a time in the AnimationTimer’s handle() method.
>>
>> Scott
>>
>>> On Sep 24, 2015, at 5:53 AM, Fisher, Robert
>>> <robert.fisher.ext at zeiss.com> wrote:
>>>
>>> I was naively thinking something like:
>>>
>>> 1. Make small change to canvas
>>> 2. Fire pulse
>>> 3. Make next small change to canvas
>>> 4. Fire pulse
>>> 5. Etc..
>>>
>>> But I was actually also unaware of this firePulse method until this
>>> morning (and I couldn't have used it anyway since it's not public API).
>>>
>>> -----Original Message-----
>>> From: openjfx-dev [mailto:openjfx-dev-bounces at openjdk.java.net] On
>>> Behalf Of Dr. Michael Paus
>>> Sent: Donnerstag, 24. September 2015 11:07
>>> To: openjfx-dev at openjdk.java.net
>>> Subject: Re: Usage of Toolkit firePulse
>>>
>>> Hi,
>>> I wasn't aware of this Toolkit method when I wrote the mail you are
>>> referring to. Can you or anybody else explain what this method
>>> exactly does. It sounds indeed as if I could solve some problems
>>> with it although I am not sure yet and of course only if Jonathan
>>> does not block it in the future :-) Michael
>>>
>>> Am 24.09.15 um 09:31 schrieb Fisher, Robert:
>>>> I think it would be great to have in the public API. It looks like
>>>> it would allow you to spread large UI updates out over several
>>>> pulses in a well-defined way.
>>>>
>>>> See also this post from a month or so ago:
>>>>
>>>>> Hi,
>>>>> I want to do some performance tuning of a JavaFX application of
>>>>> mine but before I can start with that I have to learn a little bit
>>>>> about the scene graph redraw handling.
>>>>> Maybe there is someone on this list who can help me there.
>>>>>
>>>>> What I want to achieve is a super smooth animation (movement) of
>>>>> my scene graph.
>>>>> Let's assume the scene graph itself can be redrawn fast enough in
>>>>> less than 1/60s.
>>>>> In addition let's assume the scene graph contains a canvas which
>>>>> only has to be updated from time to time but an update of the
>>>>> canvas takes substantially longer.
>>>>> Let's say it takes 1s.
>>>>>
>>>>> When an update of the canvas is in progress will this delay the
>>>>> next pulse until all internal drawing within the canvas is
>>>>> finished? From my observations I think so.
>>>>>
>>>>> If I submit my drawing calls to the canvas in smaller chunks via
>>>>> Platform.runLater calls will these also delay the next pulse or
>>>>> will the execution of these calls be delayed in favor of the scene
>>>>> graph update?
>>>>>
>>>>> I hope my goal has become clear. I would like to be able to spread
>>>>> the update of the canvas over several scene graph redraw cycles so
>>>>> that an animation of the canvas stays smooth although the content
>>>>> builds up more slowly.
>>>>>
>>>>> Michael
>>>> -----Original Message-----
>>>> From: openjfx-dev [mailto:openjfx-dev-bounces at openjdk.java.net] On
>>>> Behalf Of Jonathan Giles
>>>> Sent: Donnerstag, 24. September 2015 01:49
>>>> To: openjfx-dev at openjdk.java.net
>>>> Subject: Usage of Toolkit firePulse
>>>>
>>>> Hi all,
>>>>
>>>> Today I am keen to get your help on understanding use of the
>>>> Toolkit.getToolkit().firePulse() private API. If you could spare a
>>>> few minutes to grep your source directory for any usage of
>>>> 'firePulse', and email me your findings, that would be really
>>>> interesting.
>>>>
>>>> As a gentle motivational tool I'll conclude by saying that,
>>>> surprisingly, this private API is barely used inside the openjfx
>>>> production code. If you look at the openjfx unit tests, it is used
>>>> massively. The question is - how much is this being used by other
>>>> community members. If the answer is 'not much' or less, then this
>>>> private API may not be made public in JDK 9. Your feedback
>>>> therefore is critical!
>>>>
>>>> Thanks,
>>>> -- Jonathan
>>
More information about the openjfx-dev
mailing list