Agreed.

> On 28 Nov. 2016, at 19:08, Michael Paus <m...@jugs.org> wrote:
> 
>> Am 28.11.16 um 08:51 schrieb Felix Bembrick:
>> Great - good to see interest growing.
>> 
>> Especially given that you work for Oracle, right?
> Sorry, if I have to disappoint you on that but I do not work for Oracle.
> I run my own little company and are the head of the Java User Group Stuttgart.
> <http://www.jugs.de/>
>> 
>>> On 28 Nov. 2016, at 18:10, Michael Paus <m...@jugs.org> wrote:
>>> 
>>> I am interested too although I have only been listening quietly so far due 
>>> to lack of time.
>>> Cheers
>>> Michael
>>> 
>>>> Am 28.11.16 um 06:54 schrieb Felix Bembrick:
>>>> Sorry Gerrit - you did indeed.
>>>> 
>>>> Maybe you'd also like to participate in the offline discussion (especially 
>>>> now that you don't work for Oracle)?
>>>> 
>>>>> On 28 Nov. 2016, at 16:07, han.s...@icloud.com wrote:
>>>>> 
>>>>> Well I mentioned before that I'm interested too :)
>>>>> 
>>>>> Cheers,
>>>>> 
>>>>> Gerrit
>>>>> 
>>>>> 
>>>>> Am 27. Nov. 2016, 22:58 +0100 schrieb Felix Bembrick 
>>>>> <felix.bembr...@gmail.com>:
>>>>>> Well, given that you and Benjamin seem to be the only people interested 
>>>>>> in it, perhaps we should discuss it offline (so as not to bother Oracle 
>>>>>> or spam list this)...
>>>>>> 
>>>>>>> On 28 Nov. 2016, at 06:57, Tobias Bley <b...@jpro.io> wrote:
>>>>>>> 
>>>>>>> Where can we read more about your HPR renderer?
>> Am 28.11.16 um 08:51 schrieb Felix Bembrick:
>> 
>> Great - good to see interest growing.
>> 
>> Especially given that you work for Oracle, right?
> Sorry, if I have to disappoint you on that but I do not work for Oracle.
> I run my own little company and are the head of the Java User Group Stuttgart.
> <http://www.jugs.de/>
>> 
>>> On 28 Nov. 2016, at 18:10, Michael Paus <m...@jugs.org> wrote:
>>> 
>>> I am interested too although I have only been listening quietly so far due 
>>> to lack of time.
>>> Cheers
>>> Michael
>>> 
>>>> Am 28.11.16 um 06:54 schrieb Felix Bembrick:
>>>> Sorry Gerrit - you did indeed.
>>>> 
>>>> Maybe you'd also like to participate in the offline discussion (especially 
>>>> now that you don't work for Oracle)?
>>>> 
>>>>> On 28 Nov. 2016, at 16:07, han.s...@icloud.com wrote:
>>>>> 
>>>>> Well I mentioned before that I'm interested too :)
>>>>> 
>>>>> Cheers,
>>>>> 
>>>>> Gerrit
>>>>> 
>>>>> 
>>>>> Am 27. Nov. 2016, 22:58 +0100 schrieb Felix Bembrick 
>>>>> <felix.bembr...@gmail.com>:
>>>>>> Well, given that you and Benjamin seem to be the only people interested 
>>>>>> in it, perhaps we should discuss it offline (so as not to bother Oracle 
>>>>>> or spam list this)...
>>>>>> 
>>>>>>> On 28 Nov. 2016, at 06:57, Tobias Bley <b...@jpro.io> wrote:
>>>>>>> 
>>>>>>> Where can we read more about your HPR renderer?
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>> Am 25.11.2016 um 16:45 schrieb Felix Bembrick 
>>>>>>>> <felix.bembr...@gmail.com>:
>>>>>>>> 
>>>>>>>> Short answer? Maybe.
>>>>>>>> 
>>>>>>>> But exactly one more word than any from Oracle ;-)
>>>>>>>> 
>>>>>>>>> On 26 Nov. 2016, at 00:07, Tobias Bley <b...@jpro.io> wrote:
>>>>>>>>> 
>>>>>>>>> A very short answer ;) ….
>>>>>>>>> 
>>>>>>>>> Do you have any URL?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> Am 25.11.2016 um 12:19 schrieb Felix Bembrick 
>>>>>>>>>> <felix.bembr...@gmail.com>:
>>>>>>>>>> 
>>>>>>>>>> Yes.
>>>>>>>>>> 
>>>>>>>>>>> On 25 Nov. 2016, at 21:45, Tobias Bley <b...@jpro.io> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hi,
>>>>>>>>>>> 
>>>>>>>>>>> @Felix: Is there any Github project, demo video or trial to test 
>>>>>>>>>>> HPR with JavaFX?
>>>>>>>>>>> 
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Tobi
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> Am 11.11.2016 um 12:08 schrieb Felix Bembrick 
>>>>>>>>>>>> <felix.bembr...@gmail.com>:
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks Laurent,
>>>>>>>>>>>> 
>>>>>>>>>>>> That's another thing we discovered: using Java itself in the most 
>>>>>>>>>>>> performant way can help a lot.
>>>>>>>>>>>> 
>>>>>>>>>>>> It can be tricky, but profiling can often highlight various 
>>>>>>>>>>>> patterns of object instantiation that show-up red flags and can 
>>>>>>>>>>>> lead you directly to regions of the code that can be refactored to 
>>>>>>>>>>>> be significantly more efficient.
>>>>>>>>>>>> 
>>>>>>>>>>>> Also, the often overlooked GC log analysis can lead to similar 
>>>>>>>>>>>> discoveries and remedies.
>>>>>>>>>>>> 
>>>>>>>>>>>> Blessings,
>>>>>>>>>>>> 
>>>>>>>>>>>> Felix
>>>>>>>>>>>> 
>>>>>>>>>>>>> On 11 Nov. 2016, at 21:55, Laurent Bourgès 
>>>>>>>>>>>>> <bourges.laur...@gmail.com> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> To optimize Pisces that became the Marlin rasterizer, I carefully 
>>>>>>>>>>>>> avoided any both array allocation (byte/int/float pools) and also 
>>>>>>>>>>>>> reduced array copies or clean up ie only clear dirty parts.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> This approach is generic and could be applied in other critical 
>>>>>>>>>>>>> places of the rendering pipelines.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> FYI here are my fosdem 2016 slides on the Marlin renderer:
>>>>>>>>>>>>> https://bourgesl.github.io/fosdem-2016/slides/fosdem-2016-Marlin.pdf
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Of course I would be happy to share my experience and work with a 
>>>>>>>>>>>>> tiger team on optimizing JavaFX graphics.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> However I would like getting sort of sponsoring for my potential 
>>>>>>>>>>>>> contributions...
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>> Laurent
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Le 11 nov. 2016 11:29, "Tobi" <t...@ultramixer.com> a écrit :
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> thanks Felix, Laurent and Chris for sharing your stuff with the 
>>>>>>>>>>>>>> community!
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I am happy to see starting a discussion about boosting up the 
>>>>>>>>>>>>>> JavaFX rendering performance. I can confirm that the performance 
>>>>>>>>>>>>>> of JavaFX scene graph is not there where it should be. So 
>>>>>>>>>>>>>> multithreading would be an excellent, but difficult approach.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Felix, concerning your research of other toolkits: Do they all 
>>>>>>>>>>>>>> use multithreading or are there any toolkits which use single 
>>>>>>>>>>>>>> threading but are faster than JavaFX?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> So maybe there are other points than multithreading where we can 
>>>>>>>>>>>>>> boost the performance?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 2) your HPR sounds great. Did you already try DemoFX (part 3) 
>>>>>>>>>>>>>> benchmark with your HPR?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>> Tobi
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Am 10.11.2016 um 19:11 schrieb Felix Bembrick 
>>>>>>>>>>>>>>> <felix.bembr...@gmail.com>:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> (Thanks to Kevin for lifting my "awaiting moderation" impasse).
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> So, with all the recent discussions regarding the great 
>>>>>>>>>>>>>>> contribution by
>>>>>>>>>>>>>>> Laurent Bourgès of MarlinFX, it was suggested that a separate 
>>>>>>>>>>>>>>> thread be
>>>>>>>>>>>>>>> started to discuss parallelisation of the JavaFX rendering 
>>>>>>>>>>>>>>> pipeline in
>>>>>>>>>>>>>>> general.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> As has been correctly pointed-out, converting or modifying the 
>>>>>>>>>>>>>>> existing
>>>>>>>>>>>>>>> rendering pipeline into a fully multi-threaded and performant 
>>>>>>>>>>>>>>> beast is
>>>>>>>>>>>>>>> indeed quite a complex task.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> But, that's exactly what myself and my colleagues have been 
>>>>>>>>>>>>>>> working on for
>>>>>>>>>>>>>>> about 2 years.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The result is what we call the Hyper Rendering Pipeline (HPR).
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Work on HPR started when we developed FXMark and were (bitterly)
>>>>>>>>>>>>>>> disappointed with the performance of the JavaFX scene graph. 
>>>>>>>>>>>>>>> Many JavaFX
>>>>>>>>>>>>>>> developers have blogged about the need to dramatically minimise 
>>>>>>>>>>>>>>> the number
>>>>>>>>>>>>>>> of nodes (especially on embedded devices) in order to achieve 
>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>> "acceptable" performance. Often it is the case that most (if 
>>>>>>>>>>>>>>> not all
>>>>>>>>>>>>>>> rendering) is eventually done in a single Canvas node.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Now, as well already know, the JavaFX Canvas does perform very 
>>>>>>>>>>>>>>> well and the
>>>>>>>>>>>>>>> recent awesome work (DemoFX) by Chris Newland, just for 
>>>>>>>>>>>>>>> example, shows what
>>>>>>>>>>>>>>> can be done with this one node.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> But, the majority of the animation plumbing in JavaFX is 
>>>>>>>>>>>>>>> related to the
>>>>>>>>>>>>>>> scene graph itself and is designed to make use of multiple 
>>>>>>>>>>>>>>> nodes and node
>>>>>>>>>>>>>>> types. At the moment, the performance of this scene graph is 
>>>>>>>>>>>>>>> the Achilles
>>>>>>>>>>>>>>> Heel of JavaFX (or at least one of them).
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Enter HPR.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I personally have worked with a number of hardware-accelerated 
>>>>>>>>>>>>>>> toolkits
>>>>>>>>>>>>>>> over the years and am astounded by just how sluggish the 
>>>>>>>>>>>>>>> rendering pipeline
>>>>>>>>>>>>>>> for JavaFX is. When I am animating just a couple of hundred 
>>>>>>>>>>>>>>> nodes using
>>>>>>>>>>>>>>> JavaFX and transitions, I am lucky to get more than about 30 
>>>>>>>>>>>>>>> FPS, but on
>>>>>>>>>>>>>>> the same (very powerful) machine, I can use other toolkits to 
>>>>>>>>>>>>>>> render
>>>>>>>>>>>>>>> thousands of "objects" and achieve frame rates well over 1000 
>>>>>>>>>>>>>>> FPS.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> So, we refactored the entire scene graph rendering pipeline 
>>>>>>>>>>>>>>> with the
>>>>>>>>>>>>>>> following goals and principles:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 1. It is written using JavaFX 9 and Java 9 (but could 
>>>>>>>>>>>>>>> theoretically be
>>>>>>>>>>>>>>> back-ported to JavaFX 8 though I see no reason to).
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 2. We analysed how other toolkits had optimised their own 
>>>>>>>>>>>>>>> rendering
>>>>>>>>>>>>>>> pipelines (especially Qt which has made some significant 
>>>>>>>>>>>>>>> advances in this
>>>>>>>>>>>>>>> area in recent years). We also analysed recent examples of 
>>>>>>>>>>>>>>> multi-threaded
>>>>>>>>>>>>>>> rendering using the new Vulkan API.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 3. We carefully analysed and determined which parts of the 
>>>>>>>>>>>>>>> pipeline should
>>>>>>>>>>>>>>> best utilise the CPU and which parts should best utilise the 
>>>>>>>>>>>>>>> GPU.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 4. For those parts most suited to the CPU, we use the advanced 
>>>>>>>>>>>>>>> concurrency
>>>>>>>>>>>>>>> features of Java 8/9 to maximise parallelisation and throughput 
>>>>>>>>>>>>>>> by
>>>>>>>>>>>>>>> utilising multiple cores & threads in as an efficient manner as 
>>>>>>>>>>>>>>> possible.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 5. We devoted a large amount of time to optimising the 
>>>>>>>>>>>>>>> "communication"
>>>>>>>>>>>>>>> between the CPU and GPU to be far less "chatty" and this alone 
>>>>>>>>>>>>>>> led to some
>>>>>>>>>>>>>>> huge performance gains.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 6. We also looked at the structure of the scene graph itself 
>>>>>>>>>>>>>>> and after
>>>>>>>>>>>>>>> studying products such as OpenSceneGraph, we refactored the 
>>>>>>>>>>>>>>> JavaFX scene
>>>>>>>>>>>>>>> graph in such a way that it lends itself to optimised rendering 
>>>>>>>>>>>>>>> much more
>>>>>>>>>>>>>>> easily.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 7. This is clearly not a "small" patch. In fact to refer to it 
>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>> "patch" is probably rather inappropriate.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The end result is that we now have a fully-functional prototype 
>>>>>>>>>>>>>>> of HPR and,
>>>>>>>>>>>>>>> already, we are seeing very significant performance 
>>>>>>>>>>>>>>> improvements.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> At the minimum, scene graph rendering performance has improved 
>>>>>>>>>>>>>>> by 500% and,
>>>>>>>>>>>>>>> with judicious and sometimes "tricky" use of caching, we have 
>>>>>>>>>>>>>>> seen
>>>>>>>>>>>>>>> improvements in performance of 10x or more.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> And... we are only just *starting* with the performance 
>>>>>>>>>>>>>>> optimisation phase.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The potential for HPR is massive as it opens-up the possibility 
>>>>>>>>>>>>>>> for the
>>>>>>>>>>>>>>> JavaFX scene graph and the animation/transition infrastructure 
>>>>>>>>>>>>>>> to be used
>>>>>>>>>>>>>>> for a whole new class of applications including games, advanced
>>>>>>>>>>>>>>> visualisations etc., without having to rely on imperative 
>>>>>>>>>>>>>>> programming of a
>>>>>>>>>>>>>>> single Canvas node.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I believe that HPR, along with tremendous recent developments 
>>>>>>>>>>>>>>> like JPro and
>>>>>>>>>>>>>>> the outstanding work by Gluon on mobiles and embedded devices, 
>>>>>>>>>>>>>>> could
>>>>>>>>>>>>>>> position JavaFX to be the best graphics toolkit of any kind in 
>>>>>>>>>>>>>>> any language
>>>>>>>>>>>>>>> and, be the ONLY *truly* cross-platform graphics technology 
>>>>>>>>>>>>>>> available.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> WORA for graphics and UIs is finally within reach!
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Blessings,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Felix
>>> 
> 

Reply via email to