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