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