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 >>>>>>> >>>> >>