Re: Performance benchmarks

2013-08-26 Thread Scott Palmer
Might I suggest nodecount.PathBench

I bring it up because Path performance is costly for my app, when it represents 
a fraction of the number of pixels rendered.  I.e. it could use some attention 
and with a test app like these at least you will know when things are going in 
the right direction performance-wise.

I also use effects on the paths to highlight them on mouse over so users can 
easily see which path they will select.. That has the unfortunate side-effect 
of converting the path to a raster which could be very large.  I'm actually 
hitting resource problems just because I add a shadow to a path for UI feedback

Scott

On 2013-08-26, at 7:34 PM, Richard Bair richard.b...@oracle.com wrote:

 OK, benchmark is kind of a bad name for it, although I am kind of using them 
 in this way. Anyway, I added rt/apps/performance/GraphicsPerformance. This 
 project contains a set of apps within it, such as nodecount.RectBench, 
 nodecount.ImageBench, startup.StartupApp, preloader.SlowStartingApp, etc. 
 which can be used for gathering performance data in a variety of scenarios. 
 
 The startup package contains tests for testing startup speeds. The initial 
 app there StartupApp is probably poorly named and should be 
 SimplestAppEver. It has a Group for its root. This is the simplest app you 
 can create and we want to use it to measure startup time. As specified in the 
 class documentation:
 
 /**
 * A very basic application for testing startup. You must make sure to have:
 * -Dsun.perflog
 * -Dsun.perflog.fx.firstpaintflush
 *
 * both specified so that you get the startup metrics. You may also want:
 * -verbose:class
 *
 * to be able to see which classes are being loaded.
 */
 
 This package needs to be fleshed out with other variants -- such as one that 
 creates a bunch of invisible nodes, one that creates a Control, one that 
 creates a WebView, etc. This will give us some idea of the startup times for 
 typical use cases.
 
 The preloader package contains a sample PreloaderApp which is nothing but a 
 ProgressBar, and a SlowStartingApp which sleeps in its init() method. The 
 point of this one is to show that the preloader does work on iOS, and that 
 the preloader can startup faster than waiting for the whole app, and that the 
 preloader will continue to animate well even with all the background loading 
 going on. I just recently added preloader support for desktop  iOS (haven't 
 tried it on RoboVM yet but I would imagine it should work).
 
 The nodecount package contains tests which are designed so that they add 
 nodes without adding pixels. The tests will lay out the nodes in a grid, and 
 as you increase the number of nodes, I decrease the size of each node so that 
 the number of pixels we fill remains constant (or near enough). I want the 
 data from these tests to tell me what the incremental cost is of adding more 
 nodes, not the cost of filling lots of overlapping nodes.
 
 The number of nodes being handled will be insignificant on desktop, however 
 on embedded these numbers should be useful. Note that you ought to run with 
 -Djavafx.animation.fullspeed=true in order to not have an artificial cutoff 
 to your FPS numbers.
 
 Richard


Re: Performance benchmarks

2013-08-26 Thread Richard Bair
I agree. In fact, the Button cases which end up not being pixel snapped cause 
huge performance loss (run ButtonBench on desktop). If you whip up a quick file 
I'll add it in (I'm busy at the moment chasing down scrolling button 
performance issues…). 

The shadow issue I'm not sure about -- ideally we would do shadows directly in 
the shader without having to render to a texture first (at least for leaf 
nodes?) but I haven't thought about it enough to know if that is even feasible.

Richard

On Aug 26, 2013, at 5:17 PM, Scott Palmer swpal...@gmail.com wrote:

 Might I suggest nodecount.PathBench
 
 I bring it up because Path performance is costly for my app, when it 
 represents a fraction of the number of pixels rendered.  I.e. it could use 
 some attention and with a test app like these at least you will know when 
 things are going in the right direction performance-wise.
 
 I also use effects on the paths to highlight them on mouse over so users can 
 easily see which path they will select.. That has the unfortunate side-effect 
 of converting the path to a raster which could be very large.  I'm actually 
 hitting resource problems just because I add a shadow to a path for UI 
 feedback
 
 Scott
 
 On 2013-08-26, at 7:34 PM, Richard Bair richard.b...@oracle.com wrote:
 
 OK, benchmark is kind of a bad name for it, although I am kind of using them 
 in this way. Anyway, I added rt/apps/performance/GraphicsPerformance. This 
 project contains a set of apps within it, such as nodecount.RectBench, 
 nodecount.ImageBench, startup.StartupApp, preloader.SlowStartingApp, etc. 
 which can be used for gathering performance data in a variety of scenarios. 
 
 The startup package contains tests for testing startup speeds. The initial 
 app there StartupApp is probably poorly named and should be 
 SimplestAppEver. It has a Group for its root. This is the simplest app you 
 can create and we want to use it to measure startup time. As specified in 
 the class documentation:
 
 /**
 * A very basic application for testing startup. You must make sure to have:
 * -Dsun.perflog
 * -Dsun.perflog.fx.firstpaintflush
 *
 * both specified so that you get the startup metrics. You may also want:
 * -verbose:class
 *
 * to be able to see which classes are being loaded.
 */
 
 This package needs to be fleshed out with other variants -- such as one that 
 creates a bunch of invisible nodes, one that creates a Control, one that 
 creates a WebView, etc. This will give us some idea of the startup times for 
 typical use cases.
 
 The preloader package contains a sample PreloaderApp which is nothing but 
 a ProgressBar, and a SlowStartingApp which sleeps in its init() method. The 
 point of this one is to show that the preloader does work on iOS, and that 
 the preloader can startup faster than waiting for the whole app, and that 
 the preloader will continue to animate well even with all the background 
 loading going on. I just recently added preloader support for desktop  iOS 
 (haven't tried it on RoboVM yet but I would imagine it should work).
 
 The nodecount package contains tests which are designed so that they add 
 nodes without adding pixels. The tests will lay out the nodes in a grid, and 
 as you increase the number of nodes, I decrease the size of each node so 
 that the number of pixels we fill remains constant (or near enough). I want 
 the data from these tests to tell me what the incremental cost is of adding 
 more nodes, not the cost of filling lots of overlapping nodes.
 
 The number of nodes being handled will be insignificant on desktop, however 
 on embedded these numbers should be useful. Note that you ought to run with 
 -Djavafx.animation.fullspeed=true in order to not have an artificial cutoff 
 to your FPS numbers.
 
 Richard