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