1 Reply Latest reply on Feb 4, 2013 8:58 PM by jsmith

    Which perfomance improvements will JavaFX 8 deliver to us?

      Hi there,

      my whole company consists already of fans of JavaFX 2 - it's fun to work with it and slowly but steady, the team seems solves on the most annoying bugs. But one thing in the 2.x versions seems to be a problem for us. Even on recommended combinations of hard- and software, performance isn't really predicable yet. Sometimes, our applications perform well on 2-year old hardware while we have issues using high-end desktop components. Generally, i think that there is some potential to improve the performance of JavaFX.

      For example, i read in Jira that the developers where thinking of pre-rendering nodes as bitmaps and cache those to gain some performance wins. I didn't find this discussion again, but i think that this hasn't been implemented yet.

      So what i really would like to know is if there are upcoming performance improvements in JavaFX 8 and if the answer is yes, what will they look like?

      Best regards,


      Edited by: TheJeed on 04.02.2013 02:49
        • 1. Re: Which perfomance improvements will JavaFX 8 deliver to us?
          There are some preliminary performance numbers for JavaFX 8:

          The fxexperience post also includes descriptions of some of the work to improve performance in JavaFX8.

          Also there is a note on memory consumption:
          I would have to check our performance numbers to be certain, but I believe actually we have also reduced
          the memory usage over the same period, primarily due to making Control a Region and removing one extra
          node for most Controls (for example, a Button is now a Button -> Text, instead of Button -> StackPane -> Text).
          I think some of the major work involves allowing the JavaFX rendering thread and JavaFX application thread to execute concurrently.
          i read in Jira that the developers where thinking of pre-rendering nodes as bitmaps and cache those
          to gain some performance wins.
          I didn't find this discussion again, but i think that this hasn't been implemented yet.
          Perhaps it has. Have you tried out the Node setCache and setCacheHint APIs?

          Additionally, you can manually do this by using node.snapshot and then rendering the resulting image in an ImageView rather than the original node.

          Depending on the usage situation, the caching APIs can make a huge difference to application performance.
          Running a grep for the word performance on the JavaFX 8 issue tracker gave =>
          RT-5130     Mechanism to report FPS of an arbitrary app (app doesn't call PerformanceTracker) in Prism
          RT-5475     RT-5474 Optimize picking performance
          RT-6475     Need new hints to control how Text node is rendered
          RT-8037     Need to complete a temporarily performance fix on filter effects (DropShadow, InnerShadow and SepiaTone)
          RT-8243     Memory Leak (sun.awt.geom.CurveLink)
          RT-10753     prism-sw: ColorfulCircle bm performance drop in case circle radius is equal 2 or 4 for Inner & Outer Stroke positions
          RT-13324     Text needs to support letter spacing
          RT-13365     poor performance running "colorful circles"
          RT-14065     DirtyRegions: different performance results for equivalent dirty regions
          RT-14122     Camera Style Transform
          RT-14867     b35: 20% (-2.47 fps) performance regression in TextBox-text100k run with hw pipeline comparing to b34
          RT-15566     too big area repainted if the test updates more than 12 checkboxes
          RT-15687     TreeItem expand/collapse performance in hardware pipeline is almost 20 fps worse than in j2d pipeline
          RT-16725     API to manipulate scrollbar on TableView
          RT-16853     TextArea: performance issue
          RT-16924     WebNode reload test can't work in sandbox mode
          RT-17510     Improve performance of rendering a TRANSPARENT stage on Windows 7
          RT-17551     MacOS: Optimize using of lockFocusIfCanDraw
          RT-17960     Transparent stage resize flickers on Mac
          RT-18067     fx2.1-15 (b01): up to 90% regression in Controls.TextArea-select_all-255x1000 in j2d pipeline
          RT-18354     Animation perform down observably when i add the dropdown effect to root
          RT-18612     Glass Mac: ClipboardAssistance.actionPerformed()
          RT-19106     LCD text blending isn't accounting for over-lapping glyphs.
          RT-19271     J2D pipeline does not implement proper handling of the subimage "isolate mask" control
          RT-19305     Animation performance may be very unstable on Mac
          RT-19605     The fix for RT-19532 results in 65% (317 fps) performance regression in Controls.Buttons-adhoc-mouse-nodes1008-skipAll in fx2.1-controls-scrum-b345 build
          RT-20356     PresentingPainter and UploadingPainter disregarding dirty clip rect
          RT-20405     Improve Path rendering performance
          RT-20475     Allow to select videocard (or choose the best one automatically)
          RT-20616     TreeView creates new cells every time root is changed
          RT-20978     fx2.2-graphics-scrum-h175: performance regression on Mac (initially 50% but now unknown)
          RT-21672     Implement Occlusion Culling
          RT-22076     CSS: Treat style class as a bit mask in Selector for better performance on selector matching.
          RT-22244     Pisces Renderer shows huge performance win when coded in C
          RT-22422     Cannot sign JAR files
          RT-22567     Minor tweaks to FX/Swing painting
          RT-22913     Implement and enable accelerated compositing to improve WebView rendering performance
          RT-23413     FXMLLoader should be able to cache imports and properties between to load() calls
          RT-23450     Improve performance of Prism rendering and clipping
          RT-23458     Improve ellipses performance
          RT-23459     Reduce node count in Controls by allowing a Skin to manipulate the Control's children and layout directly
          RT-23463     Implement Region image based caching
          RT-23467     Evaluate Native Text Engines
          RT-23469     Analyze Layout Performance
          RT-23562     Optimize Region by using immutable State, caching on CSS level
          RT-23574     Add support for tiled rendering of textures (both for performance and functional reasons)
          RT-23582     Update Caspian CSS to use better performing selectors
          RT-23588     Investigate using less precise but faster min, pref, max size computations for controls
          RT-23616     Avoid processing CSS for VirtualFlow cells that are CSS clean
          RT-23621     Check use of HIGHP with es shaders.
          RT-23704     Use DirectX 9Ex mechanism to avoid calling cv.save()
          RT-23725     Beagleboard: Execute fragment shader on the GPU causes significant drop in performance
          RT-23738     fx3.0-graphics-scrum-h45: Webkit synchronization for 3.0 caused -55% performance regression in WebNode.ColorfulShapes-Blur2Circle
          RT-23743     Evaluate the performance of computing and uploading individual glyphs one at a time versus in a batch
          RT-23746     Consider optimizing libjepg for performance rather than quality (using already existing build flags)
          RT-23773     Improve caspian.css to use child selectors where possible, rather than require css engine to perform needless busy-work
          RT-23839     Lists,Trees and Tables do not work with wrapped text
          RT-23873     Investigate (and improve) ListView / TreeView / TableView performance
          RT-23879     Mac: Clicking in a Popup/ContextMenu/ComboBox steals the focus from the primary stage in applet
          RT-23905     SQE: Provide JavaFX CSS3 support
          RT-23913     SQE: Optional FX Packages
          RT-24010     WebNode.GUIMark2-Vector fails with NullPointerException in multithreaded mode
          RT-24012     Text performance of the hardware pipeline must be equal or better than the software pipeline
          RT-24013     Multi-Core scalability
          RT-24017     3.0-controls-scrum-58: 100% regression in NodeMemory.TreeItem and 96% in Controls.TreeView-Expand
          RT-24018     3.0-controls-scrum-60: Controls.ListView-Keyboard and Controls.TableView-Keyboard benchmarks are broken
          RT-24143     Ant task fx:deploy expectes all JARs to have a MANIFEST.MF and fails with NPE if at least one doesn't
          RT-24148     Private controls Weak* classes should clean up in more situations
          RT-24298     3.0-graphics-scrum-h142: memory usage of ColorfulShapes.Blur2Circle-Transparent has been increased by 625% (246,890.67 kb)
          RT-24320     WebView draws entire back buffer on screen upon every repaint
          RT-24437     X11Pixels and LensPixels are ill-implemented wrt managing the native object
          RT-24480     Use FilteredList for Parent.unmodifiableManagedChildren
          RT-24557     ImagePattern is slow on embedded systems
          RT-24582     High frequency refresh and Heavy but low priority updates in the same app (multithreading render, multiinstance...)
          RT-24587     Changing a single child of FlowLayout is slower than changing all children
          RT-24624     prism-sw pipeline is up to 90% worse than j2d pipeline
          RT-24741     WebView is not using accelerated compositing for http://javaweb.sfbay.sun.com/~epavlova/Performance/JavaFX2/mexsantos opacity transitions
          RT-24965     8.0-graphics-scrum-h82: Controls.TableView-XmasTree and DirtyArea performance regressions caused by RT-23725 fix.
          RT-24966     8.0-graphics-scrum-h99: up to 30% regression in Guimark2.Bitmap
          RT-24992     8.0-controls-scrum-h51: Controls.CheckBox and Controls.RadioButton benchmarks are broken
          RT-24997     8.0-controls-scrum-h44: up to 35% regression in Controls.TableView and Controls.Buttons benchmarks
          RT-25036     8.0-h26-b56: Controls.TableView-XmasTree benchmark crashes with SIGSEGV on MacOS in sw pipeline
          RT-25078     Mac: dirChooser.showDialog() returns immediately "null" but somehow remains open and appears to work (...when being executed from a Button onAction Eventhandler in new Stage)
          RT-25118     8.0-controls-scrum-h51: -23% performance regression in Controls.TreeView-Expand.adhoc-items1000-wide benchmark
          RT-25120     8.0-graphics-scrum-h99: up to -24% performance regression in Controls.ListView and Controls.TableView
          RT-25166     Path updates in a ScrollPane where content has a Scale transform are 100 times slower
          RT-25233     Javafx applet with preloader crashes under Windows / Java7u7 / Chrome
          RT-25350     poor animation performance on PathTransition when part of the Stage sits outside of desktop screen
          RT-25382     8.0-h38-b58: up to 30% performance regression in Image rendering in sw pipeline
          RT-25403     8.0-h38-b58: 67% (-21.7 fps) performance regression in Charts.Bubble in hw pipeline on MacOS-Low end machines
          RT-25486     Debian policy requirement for 'Installed-Size' not set -- users get warning when installing: NetBeans built JavaFX .deb package for Ubuntu
          RT-25684     GridPane.layoutChildren() hangs when wrapText is true
          RT-25685     GridPane.layoutChildren() hangs when wrapText is setup in CSS style class
          RT-25801     8.0-controls-scrum-h81: 25% performance regression in Controls.RadioButton on mac-low end machine
          RT-25864     New "shared textures" do not share pixel update flags as well as they should
          RT-25919     8.0-graphics-scrum-h242: 48% (16.70 fps) performance regression in GUIMark2.Bitmap on MacOS
          RT-26024     Scene Builder hangs when adding column
          RT-26113     8.0-graphics-scrum-h278: disabled accessibility feature triggers dependency on uiautomationcore.dll
          RT-26140     Node Orientation - API issue: Should effective orientation be a property?
          RT-26221     8.0-graphics-scrum-h276: 33% regression in NodeMemory.TableColumn-rendering-on benchmark
          RT-26438     8.0-graphics-scrum-h342: up to 30% of memory usage increase in bunch of performance benchmarks
          RT-26537     8.0-graphics-scrum-349: deadloack in WebNode.GUIMark2-Bitmap benchmark
          RT-26702     Poor DisplacementMap effect performance on Mac
          RT-26716     Performance of scrolling TreeView tail is much more slowly when scrolling TreeView head
          RT-26894     String rendering is less performant than java2D one
          RT-26909     Regions are being cached even when extremely tall
          RT-26999     8.0-controls-scrum-h122: up to 20% regression in some Controls.TableView benchmarks
          RT-27073     8.0-graphics-scrum-h458: more than 50% regression in Controls.TextField benchmark
          RT-27079     8.0-graphics-scrum-h449: RT-25055 caused up to 80% regression in Charts.Bubble benchmark
          RT-27111     8.0-controls-scrum-h138: up to 30% regression in Controls.TreeViewExpand benchmarks
          RT-27143     8.0-graphics-scrum-h471: TableView-Keyboard fails with NullPointerException
          RT-27508     8.0-h96-b68: 68% regression in SpiralText in hw pipeline caused by enabling DirectX 9Ex
          RT-27667     [TreeTableView] Multiple cell selection issue.
          RT-27982     Mac: 8.0-graphics-scrum-h595: JavaFX crashes on MacOS
          RT-27985     8.0-graphics-scrum-h595: 42% performance regression in Guimark2.BitmapCanvas on Windows-Mid-Range machine
          RT-28064     A new Scene accumulates all PointLight's from previous Scene's