hg: openjfx/8/controls/rt: 6 new changesets

2013-07-25 Thread hang . vo
Changeset: bfafc21f18d2
Author:jgiles
Date:  2013-07-25 15:40 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/bfafc21f18d2

RT-31509: -fx-indent badly applied in TreeTableView

! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableCellSkin.java

Changeset: 3bc3e99f3e3e
Author:jgiles
Date:  2013-07-25 15:43 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/3bc3e99f3e3e

RT-31834: PopupControl.CSSBridge not properly documented

! modules/controls/src/main/java/javafx/scene/control/PopupControl.java

Changeset: 84108e7351f3
Author:jgiles
Date:  2013-07-25 16:38 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/84108e7351f3

RT-31252: Extra TableCells created when scrolling with MouseWheel
RT-31286: TableCells display Spurious Values when Scrolling with Mousewheel

! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/VirtualFlow.java

Changeset: cd582dc16ee4
Author:jgiles
Date:  2013-07-25 17:05 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/cd582dc16ee4

RT-30850: Missing documentation in controls

! modules/controls/src/main/java/javafx/scene/control/Tab.java
! modules/controls/src/main/java/javafx/scene/control/TableColumn.java

Changeset: 8cdd7bd93393
Author:jgiles
Date:  2013-07-25 17:06 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/8cdd7bd93393

Fix javadoc error in TableColumn

! modules/controls/src/main/java/javafx/scene/control/TableColumn.java

Changeset: 4b2f8100c18f
Author:jgiles
Date:  2013-07-25 17:10 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/4b2f8100c18f

Automated merge with 
ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/controls/jfx/rt




Pushing OpenJFX to Maven - licensing and other stuff (forked from Re: jfxrt.jar - is it platform specific?)

2013-07-25 Thread Daniel Zwolenski
Including the list.

Thanks Tom, good to double check the licensing issues.

As I understand it all of the OpenJDK and OpenJFX is released under GPLv2
http://openjdk.java.net/legal/gplv2+ce.html

I interpret this to mean that it can be redistributed, modified and
generally used however we want so long as we distribute it with the same
licence. I interpret that to mean we can both deploy any and all openjfx
classes and libraries into OSS Maven and also modify the code (as done with
the 78-backport) and distribute that via Maven too.

If anyone from Oracle has a problem with that, let me know asap. In the
absence of any objections I am pushing ahead with the deployment to Maven.

On the same topic, my plan is to push only the iOS builds of the
78-backport at this stage.

I intend to deploy the iOS jfxrt.jar using the following details:

  groupId: net.java.openjfx
  artifactId: openjfx-78-backport
  version: 1.8.0-ea-b96.1
  classifier: ios

Where the version is the OpenJFX version the backport was last merged with,
plus an extra number for whatever release the backport is up to relative to
that build (e.g. we might do several releases of the backport per build of
OpenJFX).

I also intend to zip up all the native files for the backport and deploy
this zip as:

  groupId: net.java.openjfx
  artifactId: openjfx-78-backport-native
  version: 1.8.0-ea-b96.1
  classifier: ios

Note that both of the above assume that the jfxrt.jar is not architecture
specific (the same jar is used on i386 and armv7) and the zip file will
contain the native libs for both architectures.

If anyone has any objections to any of that or better suggestions, shout
out quickly. With some luck this will start to happen in the next day or
two and once it's up it's up. You cannot remove or change a file once it is
in Maven Central except in extreme cases like licence violation, in which
case it is a pretty involved and messy procedure.

For builds of OpenJFX other than the backport (including the jfx packaging
tools) I have a very strong preference for the JavaFX team to provide me
(or anyone willing to get involved with this) all the various built
binaries for all the various OS's and architectures and then I will push
these into Maven.

I prefer this as I really don't like the idea of us out in the community
building these in bits and pieces (you do Linux, I'll do windows, etc) with
all the ways that can go wrong (accidental mistakes, viruses, malicious
people doing bad stuff just for kicks, etc). It would obviously be ideal if
Oracle just added a simple push to Maven at the end of their automated
build system but they are not that way inclined. Getting the binaries from
them would be at least half way there and reduce the scope for problems.

From what I've been told, I wouldn't expect these binaries to be provided
in a way that makes them easy to get at and upload anytime soon due to
internal red tape, so if you are holding out for this stuff to end up in
Maven, best to raise that issue with the JFX guys.


On Thu, Jul 25, 2013 at 5:09 PM, Tom Schindl tom.schi...@bestsolution.atwrote:

 Hi,

 Before you push your stuff to maven-central make sure you are not
 running into license problems. I [line removed] was pointed then to the
 license agreement that apply
 to JSRs (not sure this also applies to javafx because it is NOT JSRed).

 In the agreement it reads:

  2. Distribute implementations of the Specification to third parties for
 their testing and
  evaluation use, provided that any such implementation:
  (i) does not modify, subset, superset or otherwise extend the Licensor
 Name Space, or
  include any public or protected packages, classes, Java interfaces,
 fields or methods within
  the Licensor Name Space other than those required/authorized by the
 Specification or
  Specifications being implemented;
  (ii) is clearly and prominently marked with the word UNTESTED or
 EARLY ACCESS
  or INCOMPATIBLE or UNSTABLE or BETA in any list of available
 builds and in
  proximity to every link initiating its download, where the list or link
 is under Licensee's
  control; and
  (iii) includes the following notice: This is an implementation of an
 early-draft specification
  developed under the Java Community Process (JCP) and is made available
 for testing and
  evaluation purposes only. The code is not compatible with any
 specification of the JCP.
  The grant set forth above concerning your distribution of
 implementations of the
  specification is contingent upon your agreement to terminate development
 and distribution
  of your early draft implementation as soon as feasible following final
 completion of the
  specification. If you fail to do so, the foregoing grant shall be
 considered null and void.

 Like I said this is from a JSRed spec but I wanted to make sure you
 double check the license of JavaFX because once you pushed to maven
 central it might be hard to remove it once JavaFX8 is released (iii)!

 Thanks for pushing 

AW: FBX Importer for OpenJFX

2013-07-25 Thread Robert Fisher
Hi August,

We've done a few tests with Autodesk's FBX converter. Unfortunately we've found 
no conversion process where our sample model survives 100% intact.

Here are some examples (using Autodesk's FBX converter *and* viewer, and one of 
the sample files provided with it, Bird_Leg.fbx):

FBX binary - FBX ASCII:part of the mesh is rotated, part of the 
animation is lost
FBX binary - OBJ:  part of the mesh is rotated ( animation is of 
course lost)
FBX binary - DAE / Collada:the whole mesh disappears   

Since even FBX binary - ASCII conversion can break things, we are considering 
using Autodesk's FBX SDK (in C++) to import the binary file, then loading it 
into our Java code via the JNI.

Cheers,
Rob


-Ursprüngliche Nachricht-
Von: openjfx-dev-boun...@openjdk.java.net 
[mailto:openjfx-dev-boun...@openjdk.java.net] Im Auftrag von August 
Lammersdorf, InteractiveMesh
Gesendet: Donnerstag, 25. Juli 2013 10:41
An: openjfx-dev@openjdk.java.net
Betreff: FBX Importer for OpenJFX

 Hi Rob,

 I suppose rather COLLADA importers will be available than importers  
supporting Autodesk's FBX. Do you have any experiences with Autodesk's  FBX 
Converter and the quality of its COLLADA exports?

 August


 Am Mittwoch, den 24.07.2013, 09:38 +0200 schrieb Robert Fisher
 rfis...@tesis.de:
 Hi all,

 We would like to be able to load FBX files into the 3DViewer app. Are 
 there any plans to develop an FBX importer, or is this something we 
 should implement ourselves?

 Thanks in advance.

 Rob




Re: WebView capabilities review

2013-07-25 Thread Felix Bembrick
I have noticed something curious.

When I run the impact.js demo that Klaus posted a link to I see a very
smooth animation.  The curious part is that on this same machine I see
noticeable flicker and jittering when I run even the most simple JavaFX
animation and have never seen one that performs as smoothly as the
impact.js demo within WebView.  Also, the impact.js demo runs very smoothly
even when I run the WebView maximised.

OK, so now I know that it can't be the actual graphics hardware or driver
that cause JavaFX animations to flicker and clearly JavaFX *can* render
animated content without jittering so why then do simple animations (such
as those from Ensemble) perform so poorly?


On 25 July 2013 02:02, Artem Ananiev artem.anan...@oracle.com wrote:


 On 7/24/2013 2:55 AM, Felix Bembrick wrote:

 Windows 7 64-bit here.


 On this platform, JavaFX web component is compiled without JIT support for
 JavaScript:

 https://javafx-jira.kenai.com/**browse/RT-24998https://javafx-jira.kenai.com/browse/RT-24998

 It explains why it is slow, but it doesn't explain rendering artifacts.

 Thanks,

 Artem


  On 24 July 2013 08:53, Richard Bair richard.b...@oracle.com wrote:

  I've filed 
 https://javafx-jira.kenai.com/**browse/RT-31885https://javafx-jira.kenai.com/browse/RT-31885,
 lets see how
 that turns out.

 Richard

 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com
 wrote:

  Doh, that's just what you said :-)

 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com

 wrote:


  I'm not seeing anything at all, beyond a fuzzy background image

 (similar app to yours):


 import javafx.application.**Application;
 import javafx.scene.Scene;
 import javafx.scene.web.WebView;
 import javafx.stage.Stage;

 public class HelloWebView extends Application {
@Override public void start(Stage stage) throws Exception {
WebView web = new WebView();
web.getEngine().load(http://**famo.us/ http://famo.us/);
Scene scene = new Scene(web);
stage.setScene(scene);
stage.setTitle(HelloWebView)**;
stage.show();
}

public static void main(String[] args) {
launch(args);
}
 }

 I'm on Mac. What OS are you running on?







Java 8 release plan

2013-07-25 Thread Peter Penzov
Hi,
   I started to develop Java 8 application using JVM 8. I saw that many new
bugs related to JavaFX are fixed and added to OpenJDK 8.
   Do you include these new fixes into the latest Java 8 beta releases
which are published every week? It's very important for me to know because
my application depends on JVM 8.

Regards


Re: WebView capabilities review

2013-07-25 Thread Felix Bembrick
Artem, I don't think you can blame the slowness of WebView and
famo.usentirely on the lack of JIT as the 64-bit Qt WebView is also
based on
WebKit and that site peforms extremely well with it.


On 25 July 2013 20:21, Felix Bembrick felix.bembr...@gmail.com wrote:

 I have noticed something curious.

 When I run the impact.js demo that Klaus posted a link to I see a very
 smooth animation.  The curious part is that on this same machine I see
 noticeable flicker and jittering when I run even the most simple JavaFX
 animation and have never seen one that performs as smoothly as the
 impact.js demo within WebView.  Also, the impact.js demo runs very smoothly
 even when I run the WebView maximised.

 OK, so now I know that it can't be the actual graphics hardware or driver
 that cause JavaFX animations to flicker and clearly JavaFX *can* render
 animated content without jittering so why then do simple animations (such
 as those from Ensemble) perform so poorly?


 On 25 July 2013 02:02, Artem Ananiev artem.anan...@oracle.com wrote:


 On 7/24/2013 2:55 AM, Felix Bembrick wrote:

 Windows 7 64-bit here.


 On this platform, JavaFX web component is compiled without JIT support
 for JavaScript:

 https://javafx-jira.kenai.com/**browse/RT-24998https://javafx-jira.kenai.com/browse/RT-24998

 It explains why it is slow, but it doesn't explain rendering artifacts.

 Thanks,

 Artem


  On 24 July 2013 08:53, Richard Bair richard.b...@oracle.com wrote:

  I've filed 
 https://javafx-jira.kenai.com/**browse/RT-31885https://javafx-jira.kenai.com/browse/RT-31885,
 lets see how
 that turns out.

 Richard

 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com
 wrote:

  Doh, that's just what you said :-)

 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com

 wrote:


  I'm not seeing anything at all, beyond a fuzzy background image

 (similar app to yours):


 import javafx.application.**Application;
 import javafx.scene.Scene;
 import javafx.scene.web.WebView;
 import javafx.stage.Stage;

 public class HelloWebView extends Application {
@Override public void start(Stage stage) throws Exception {
WebView web = new WebView();
web.getEngine().load(http://**famo.us/ http://famo.us/);
Scene scene = new Scene(web);
stage.setScene(scene);
stage.setTitle(HelloWebView)**;
stage.show();
}

public static void main(String[] args) {
launch(args);
}
 }

 I'm on Mac. What OS are you running on?








Re: Can JavaFX do CAD?

2013-07-25 Thread Tom Schindl
On 25.07.13 13:44, Pavel Safrata wrote:
 Hi Richard,
 I have a comment to one of your questions:
 
 On 24.7.2013 21:06, Richard Bair wrote:
 - Would we benefit from a full lazy model for properties where
 we only instantiate them if somebody adds a listener

 
 We've done that in javafx.scene.transform.Affine. This is a class
 representing a general Affine transformation matrix, so it has twelve
 double properties. I'm probably not able to find the actual numbers we
 measured back then, but here is what I can remember. We used the 3D
 music chart JavaOne demo which operated with the matrices incredibly
 heavily. In this case the properties made a big difference in
 performance; with all the properties instantiated, even
 DoubleProperty.get() shone brightly in profiler results. So we
 introduced the full lazy properties which helped. Then we looked into
 it a bit more but were not able to create similar condition with any
 other use-case; the property getter is just a null check and a couple of
 calls in addition. It seemed that the transform matrices were a special
 case where some 3D algorithms call the matrix element getters too much,
 so we've left it at that.
 
 Regarding memory requirements of the full lazy properties, let me
 state the obvious:
 - if the property is not used at all, we have a reference and a double
 instead of just a reference (worse unless in bucket)
 - if getters/setters are called, we still have a reference and a double
 instead of full instantiated property (better)
 - if a listener is added, we have instantiated property and a double
 instead of just the property (slightly worse)
 So it looks like it would make best sense to introduce this for
 properties that are often get/set but usually don't have listeners on
 them. I'm not sure if such set exists and can be identified.
 

If there are really a lot of properties of the same (primitive) type
would it make sense to store their primitive values inside arrays
instead of single fields? Not sure how arrays preform memory and access.
If there are many booleans they could be store inside an short/int/long.

Tom


Re: Can JavaFX do CAD?

2013-07-25 Thread Pavel Safrata

Hi Richard,
I have a comment to one of your questions:

On 24.7.2013 21:06, Richard Bair wrote:

- Would we benefit from a full lazy model for properties where we 
only instantiate them if somebody adds a listener



We've done that in javafx.scene.transform.Affine. This is a class 
representing a general Affine transformation matrix, so it has twelve 
double properties. I'm probably not able to find the actual numbers we 
measured back then, but here is what I can remember. We used the 3D 
music chart JavaOne demo which operated with the matrices incredibly 
heavily. In this case the properties made a big difference in 
performance; with all the properties instantiated, even 
DoubleProperty.get() shone brightly in profiler results. So we 
introduced the full lazy properties which helped. Then we looked into 
it a bit more but were not able to create similar condition with any 
other use-case; the property getter is just a null check and a couple of 
calls in addition. It seemed that the transform matrices were a special 
case where some 3D algorithms call the matrix element getters too much, 
so we've left it at that.


Regarding memory requirements of the full lazy properties, let me 
state the obvious:
- if the property is not used at all, we have a reference and a double 
instead of just a reference (worse unless in bucket)
- if getters/setters are called, we still have a reference and a double 
instead of full instantiated property (better)
- if a listener is added, we have instantiated property and a double 
instead of just the property (slightly worse)
So it looks like it would make best sense to introduce this for 
properties that are often get/set but usually don't have listeners on 
them. I'm not sure if such set exists and can be identified.


It's still a good idea to investigate, I just thought this was worth 
mentioning.


Cheers,
Pavel


Re: WebView capabilities review

2013-07-25 Thread Artem Ananiev


On 7/25/2013 3:06 PM, Felix Bembrick wrote:

Artem, I don't think you can blame the slowness of WebView and famo.us
http://famo.us entirely on the lack of JIT as the 64-bit Qt WebView is
also based on WebKit and that site peforms extremely well with it.


Sure, there may be other reasons of slowness than the lack of JIT 
compilation on 64-bit Windows.


Thanks,

Artem


On 25 July 2013 20:21, Felix Bembrick felix.bembr...@gmail.com
mailto:felix.bembr...@gmail.com wrote:

I have noticed something curious.

When I run the impact.js demo that Klaus posted a link to I see a
very smooth animation.  The curious part is that on this same
machine I see noticeable flicker and jittering when I run even the
most simple JavaFX animation and have never seen one that performs
as smoothly as the impact.js demo within WebView.  Also, the
impact.js demo runs very smoothly even when I run the WebView maximised.

OK, so now I know that it can't be the actual graphics hardware or
driver that cause JavaFX animations to flicker and clearly JavaFX
*can* render animated content without jittering so why then do
simple animations (such as those from Ensemble) perform so poorly?


On 25 July 2013 02:02, Artem Ananiev artem.anan...@oracle.com
mailto:artem.anan...@oracle.com wrote:


On 7/24/2013 2:55 AM, Felix Bembrick wrote:

Windows 7 64-bit here.


On this platform, JavaFX web component is compiled without JIT
support for JavaScript:

https://javafx-jira.kenai.com/__browse/RT-24998
https://javafx-jira.kenai.com/browse/RT-24998

It explains why it is slow, but it doesn't explain rendering
artifacts.

Thanks,

Artem


On 24 July 2013 08:53, Richard Bair richard.b...@oracle.com
mailto:richard.b...@oracle.com wrote:

I've filed
https://javafx-jira.kenai.com/__browse/RT-31885
https://javafx-jira.kenai.com/browse/RT-31885, lets
see how
that turns out.

Richard

On Jul 23, 2013, at 3:49 PM, Richard Bair
richard.b...@oracle.com
mailto:richard.b...@oracle.com wrote:

Doh, that's just what you said :-)

On Jul 23, 2013, at 3:49 PM, Richard Bair
richard.b...@oracle.com
mailto:richard.b...@oracle.com

wrote:


I'm not seeing anything at all, beyond a fuzzy
background image

(similar app to yours):


import javafx.application.__Application;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class HelloWebView extends Application {
@Override public void start(Stage stage)
throws Exception {
WebView web = new WebView();
web.getEngine().load(http://__famo.us/
http://famo.us/);
Scene scene = new Scene(web);
stage.setScene(scene);
stage.setTitle(HelloWebView)__;
stage.show();
}

public static void main(String[] args) {
launch(args);
}
}

I'm on Mac. What OS are you running on?








Re: Nodes partial Mouse transparency

2013-07-25 Thread Pavel Safrata

Hello Hervé,
no, it's not possible to have a visible parent which is mouse 
transparent but its children are not. It is not really a common request. 
What about this:
- Have the container invisible and not pickable. In the specific case of 
Pane it is enough to set pickOnBounds to false and fill to null, you 
don't have to use the collapsed size. Or just use Group which behaves 
like that by default.
- Represent the visuals you want to have there by a child node (such as 
Rectangle or another Pane) which is visible, and has mouseTransparent 
set to true.


This is reasonably clean but creates some extra nodes so its usefulness 
depends on the number of such instances in your app. Would it be usable 
in your case?

Pavel

On 25.7.2013 0:34, Herve Girod wrote:

Hello,

We have a Use Case when we want to have one container Node (for example
basically a Pane, but it can be others containers) transparent to Mouse
events, but not its children. We use it mainly to group children and
control their positions, but we want to receive events on the children but
not the parent Node.

When using a Pane for example, there is a way to do it, by setting the
pickOnBounds property to false, and one of the dimensions of the Pane to 0.
That way the Pane is transparent to Mouse events, but not its children.

However this is not straightforward, and it is not possible to do it while
still having a non transparent Pane.

Is there another (better) way to do this in JavaFX 8? Or did we miss
something which allowed to do this in a more straightforward way even in
JavaFX 2.2? If this is definitely the only way do do this (which work),
wouldit be possible to add this kind of partial Mouse transparency in 8?

Regards,

Hervé




hg: openjfx/8/graphics/rt: RT-31449: Mac: Drag and drop works differently on MacOS

2013-07-25 Thread hang . vo
Changeset: 88aa49b29342
Author:Petr Pchelko petr.pche...@oracle.com
Date:  2013-07-25 16:30 +0400
URL:   http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/88aa49b29342

RT-31449: Mac: Drag and drop works differently on MacOS
Reviewed-by: anthony, art

! modules/graphics/src/main/native-glass/mac/GlassDragSource.h
! modules/graphics/src/main/native-glass/mac/GlassDragSource.m
! modules/graphics/src/main/native-glass/mac/GlassPasteboard.m
! modules/graphics/src/main/native-glass/mac/GlassViewDelegate.m



Re: Can JavaFX do CAD?

2013-07-25 Thread Richard Bair

 If there are really a lot of properties of the same (primitive) type
 would it make sense to store their primitive values inside arrays
 instead of single fields? Not sure how arrays preform memory and access.
 If there are many booleans they could be store inside an short/int/long.

My understanding is that JavaC does that for you to the extent that it can 
safely determine (compact booleans in to a single integer, etc). But I don't 
know for certain, it would be a worth experiment to just try it out.

I would recommend trying to use jmh (http://impactjs.com/demos/physics/) to 
write a few micro benchmarks just to see what the differences are.

Richard

Re: WebView capabilities review

2013-07-25 Thread Richard Bair
I don't see his link to impact.js, can you send it again?

Usually the stutters that we see are the result of threading problems between 
Glass  Prism rather than a performance (fps) problem. You probably saw the 
issue come by yesterday that smoothed this out on the mac. In order to get rid 
of these, what we need to do is have a way to measure when they happen, and 
have a reproducible example. I've seen them forever on the mac (but now that 
*should* be fixed), but on windows I've never seen them (windows was always 
exceptionally smooth for me), and that has been the primary challenge in 
nailing it down.

It may be related to drift -- 1/60th of a second is 16.66… ms long, and the 
timer used to get pulses may be running at 16ms for example, in which case 
there is drift where eventually it takes 2 frames worth of time to draw a 
single frame because we're waiting on the card.

I'm not sure how WebView's interaction with prism would be avoiding this, but 
that's what it sounds like.

We also recently changed the way the FX thread and render thread interact so as 
not to drop frames. I would expect that to have an impact in smoothing things 
out as well.

Are you building locally or are you using one of the promoted builds? Do you 
see the hiccups right now in Ensemble?

Richard

On Jul 25, 2013, at 3:21 AM, Felix Bembrick felix.bembr...@gmail.com wrote:

 I have noticed something curious.
 
 When I run the impact.js demo that Klaus posted a link to I see a very smooth 
 animation.  The curious part is that on this same machine I see noticeable 
 flicker and jittering when I run even the most simple JavaFX animation and 
 have never seen one that performs as smoothly as the impact.js demo within 
 WebView.  Also, the impact.js demo runs very smoothly even when I run the 
 WebView maximised.
 
 OK, so now I know that it can't be the actual graphics hardware or driver 
 that cause JavaFX animations to flicker and clearly JavaFX *can* render 
 animated content without jittering so why then do simple animations (such as 
 those from Ensemble) perform so poorly?
 
 
 On 25 July 2013 02:02, Artem Ananiev artem.anan...@oracle.com wrote:
 
 On 7/24/2013 2:55 AM, Felix Bembrick wrote:
 Windows 7 64-bit here.
 
 On this platform, JavaFX web component is compiled without JIT support for 
 JavaScript:
 
 https://javafx-jira.kenai.com/browse/RT-24998
 
 It explains why it is slow, but it doesn't explain rendering artifacts.
 
 Thanks,
 
 Artem
 
 
 On 24 July 2013 08:53, Richard Bair richard.b...@oracle.com wrote:
 
 I've filed https://javafx-jira.kenai.com/browse/RT-31885, lets see how
 that turns out.
 
 Richard
 
 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com wrote:
 
 Doh, that's just what you said :-)
 
 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com
 wrote:
 
 I'm not seeing anything at all, beyond a fuzzy background image
 (similar app to yours):
 
 import javafx.application.Application;
 import javafx.scene.Scene;
 import javafx.scene.web.WebView;
 import javafx.stage.Stage;
 
 public class HelloWebView extends Application {
@Override public void start(Stage stage) throws Exception {
WebView web = new WebView();
web.getEngine().load(http://famo.us/;);
Scene scene = new Scene(web);
stage.setScene(scene);
stage.setTitle(HelloWebView);
stage.show();
}
 
public static void main(String[] args) {
launch(args);
}
 }
 
 I'm on Mac. What OS are you running on?
 
 
 
 



Re: Can JavaFX do CAD?

2013-07-25 Thread Richard Bair
 Regarding memory requirements of the full lazy properties, let me state the 
 obvious:
 - if the property is not used at all, we have a reference and a double 
 instead of just a reference (worse unless in bucket)
 - if getters/setters are called, we still have a reference and a double 
 instead of full instantiated property (better)
 - if a listener is added, we have instantiated property and a double instead 
 of just the property (slightly worse)
 So it looks like it would make best sense to introduce this for properties 
 that are often get/set but usually don't have listeners on them. I'm not sure 
 if such set exists and can be identified.

Thanks Pavel, this is a good summary. Alex K. and I were looking at a pattern 
for this once and he had another way to do it which was different than what I 
had done in the past. The pattern I used to use was something like this:

private double _x;
private DoubleProperty x;

public final void setX(double value) {
if (x == null) {
_x = value;
} else {
x.set(value);
}

public final double getX() {
return x == null ? _x : x.get();
}

public final DoubleProperty xProperty() {
if (x == null) x = new DoubleProperty(this, x, _x);
return x;
}

instead it could be done like this which results in faster getters (because you 
never have to delegate to another method), an almost immeasurably slower 
setter, and slightly little less code:

private double _x;
private DoubleProperty x;

public final void setX(double value) {
_x = value;
if (x != null) x.set(value);
}

public final double getX() {
return x;
}

public final DoubleProperty xProperty() {
if (x == null) x = new DoubleProperty(this, x, _x);
return x;
}


The idea here is to always set the local field, so that we can always just 
return the value immediately in the getter. Where I think this may make a 
difference is on the smaller end systems (mobile / embedded) because from 
previous analysis we saw that none of our getters were getting inlined -- we 
actually paid the price of each method call overhead, because since we were 
reading from the property objects and the property objects were a couple 
methods worth of work for each getter call, the VM wouldn't inline the 
generated code into the call sites. By using this pattern in places that are 
commonly read, we would probably get these getters all inlined again and avoid 
all the method call overhead entirely.

Richard

Re: WebView capabilities review

2013-07-25 Thread Richard Bair
I just ran Ensemble on mac with the latest, with pulse logger turned on. Ran 
the SequentialTransition demo and I agree it didn't look smooth, even though 
the pulse logger reports that of over 3,000 pulses, not a single one crossed 
the 16ms threshold. Is the grid background causing an optical illusion? (as the 
shape passes a boundary it may temporarily looked wider and then shorter making 
it look like it is changing size / speed??)

Richard

On Jul 25, 2013, at 9:28 AM, Richard Bair richard.b...@oracle.com wrote:

 I don't see his link to impact.js, can you send it again?
 
 Usually the stutters that we see are the result of threading problems between 
 Glass  Prism rather than a performance (fps) problem. You probably saw the 
 issue come by yesterday that smoothed this out on the mac. In order to get 
 rid of these, what we need to do is have a way to measure when they happen, 
 and have a reproducible example. I've seen them forever on the mac (but now 
 that *should* be fixed), but on windows I've never seen them (windows was 
 always exceptionally smooth for me), and that has been the primary challenge 
 in nailing it down.
 
 It may be related to drift -- 1/60th of a second is 16.66… ms long, and 
 the timer used to get pulses may be running at 16ms for example, in which 
 case there is drift where eventually it takes 2 frames worth of time to draw 
 a single frame because we're waiting on the card.
 
 I'm not sure how WebView's interaction with prism would be avoiding this, but 
 that's what it sounds like.
 
 We also recently changed the way the FX thread and render thread interact so 
 as not to drop frames. I would expect that to have an impact in smoothing 
 things out as well.
 
 Are you building locally or are you using one of the promoted builds? Do you 
 see the hiccups right now in Ensemble?
 
 Richard
 
 On Jul 25, 2013, at 3:21 AM, Felix Bembrick felix.bembr...@gmail.com wrote:
 
 I have noticed something curious.
 
 When I run the impact.js demo that Klaus posted a link to I see a very 
 smooth animation.  The curious part is that on this same machine I see 
 noticeable flicker and jittering when I run even the most simple JavaFX 
 animation and have never seen one that performs as smoothly as the impact.js 
 demo within WebView.  Also, the impact.js demo runs very smoothly even when 
 I run the WebView maximised.
 
 OK, so now I know that it can't be the actual graphics hardware or driver 
 that cause JavaFX animations to flicker and clearly JavaFX *can* render 
 animated content without jittering so why then do simple animations (such as 
 those from Ensemble) perform so poorly?
 
 
 On 25 July 2013 02:02, Artem Ananiev artem.anan...@oracle.com wrote:
 
 On 7/24/2013 2:55 AM, Felix Bembrick wrote:
 Windows 7 64-bit here.
 
 On this platform, JavaFX web component is compiled without JIT support for 
 JavaScript:
 
 https://javafx-jira.kenai.com/browse/RT-24998
 
 It explains why it is slow, but it doesn't explain rendering artifacts.
 
 Thanks,
 
 Artem
 
 
 On 24 July 2013 08:53, Richard Bair richard.b...@oracle.com wrote:
 
 I've filed https://javafx-jira.kenai.com/browse/RT-31885, lets see how
 that turns out.
 
 Richard
 
 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com wrote:
 
 Doh, that's just what you said :-)
 
 On Jul 23, 2013, at 3:49 PM, Richard Bair richard.b...@oracle.com
 wrote:
 
 I'm not seeing anything at all, beyond a fuzzy background image
 (similar app to yours):
 
 import javafx.application.Application;
 import javafx.scene.Scene;
 import javafx.scene.web.WebView;
 import javafx.stage.Stage;
 
 public class HelloWebView extends Application {
   @Override public void start(Stage stage) throws Exception {
   WebView web = new WebView();
   web.getEngine().load(http://famo.us/;);
   Scene scene = new Scene(web);
   stage.setScene(scene);
   stage.setTitle(HelloWebView);
   stage.show();
   }
 
   public static void main(String[] args) {
   launch(args);
   }
 }
 
 I'm on Mac. What OS are you running on?
 
 
 
 
 



Re: WebView capabilities review

2013-07-25 Thread Richard Bair
Try this:

public class HelloAnimatedRectangle extends Application {
@Override public void start(Stage stage) throws Exception {
final double sceneWidth = 1024;
final double sceneHeight = 768;
final double squareSize = 200;
final double halfStroke = 0;

Rectangle rect = new Rectangle(squareSize, squareSize, Color.ORANGE);
rect.setStroke(Color.WHITE);
rect.setStrokeWidth(halfStroke * 2);

Group root = new Group(rect);
Scene scene = new Scene(root, sceneWidth, sceneHeight);
scene.setFill(Color.BLACK);
stage.setScene(scene);
stage.setTitle(Animated Rectangle);
stage.show();

TranslateTransition translation = new 
TranslateTransition(Duration.seconds(20), rect);
translation.setFromX(halfStroke);
translation.setFromY(halfStroke);
translation.setToX((sceneWidth - squareSize) / 2);
translation.setToY((sceneHeight - squareSize) / 2);

RotateTransition rotation = new RotateTransition(Duration.seconds(10), 
rect);
rotation.setAutoReverse(true);
rotation.setCycleCount(2);
rotation.setToAngle(720);

TranslateTransition translation2 = new 
TranslateTransition(Duration.seconds(20), rect);
translation2.setFromX((sceneWidth - squareSize) / 2);
translation2.setFromY((sceneHeight - squareSize) / 2);
translation2.setToX(sceneWidth - squareSize - halfStroke);
translation2.setToY(sceneHeight - squareSize - halfStroke);

SequentialTransition tx = new SequentialTransition(translation, 
rotation, translation2);
tx.play();
}

public static void main(String[] args) {
launch(args);
}
}

You can mess with the halfStroke variable to stroke it white to get greater 
contrast between the background and the shape. The translations looks smooth to 
me, I don't see any dropped frames. The rotation looks alternately smooth and 
chunky depending on the position of the rotation. I believe this is due to 
anti-aliasing and pixel refresh speeds (as opposed to an actual performance 
problem or timing problem).

What do you see?

Richard

On Jul 25, 2013, at 9:49 AM, Richard Bair richard.b...@oracle.com wrote:

 I just ran Ensemble on mac with the latest, with pulse logger turned on. Ran 
 the SequentialTransition demo and I agree it didn't look smooth, even though 
 the pulse logger reports that of over 3,000 pulses, not a single one crossed 
 the 16ms threshold. Is the grid background causing an optical illusion? (as 
 the shape passes a boundary it may temporarily looked wider and then shorter 
 making it look like it is changing size / speed??)
 
 Richard
 
 On Jul 25, 2013, at 9:28 AM, Richard Bair richard.b...@oracle.com wrote:
 
 I don't see his link to impact.js, can you send it again?
 
 Usually the stutters that we see are the result of threading problems 
 between Glass  Prism rather than a performance (fps) problem. You probably 
 saw the issue come by yesterday that smoothed this out on the mac. In order 
 to get rid of these, what we need to do is have a way to measure when they 
 happen, and have a reproducible example. I've seen them forever on the mac 
 (but now that *should* be fixed), but on windows I've never seen them 
 (windows was always exceptionally smooth for me), and that has been the 
 primary challenge in nailing it down.
 
 It may be related to drift -- 1/60th of a second is 16.66… ms long, and 
 the timer used to get pulses may be running at 16ms for example, in which 
 case there is drift where eventually it takes 2 frames worth of time to draw 
 a single frame because we're waiting on the card.
 
 I'm not sure how WebView's interaction with prism would be avoiding this, 
 but that's what it sounds like.
 
 We also recently changed the way the FX thread and render thread interact so 
 as not to drop frames. I would expect that to have an impact in smoothing 
 things out as well.
 
 Are you building locally or are you using one of the promoted builds? Do you 
 see the hiccups right now in Ensemble?
 
 Richard
 
 On Jul 25, 2013, at 3:21 AM, Felix Bembrick felix.bembr...@gmail.com wrote:
 
 I have noticed something curious.
 
 When I run the impact.js demo that Klaus posted a link to I see a very 
 smooth animation.  The curious part is that on this same machine I see 
 noticeable flicker and jittering when I run even the most simple JavaFX 
 animation and have never seen one that performs as smoothly as the 
 impact.js demo within WebView.  Also, the impact.js demo runs very smoothly 
 even when I run the WebView maximised.
 
 OK, so now I know that it can't be the actual graphics hardware or driver 
 that cause JavaFX animations to flicker and clearly JavaFX *can* render 
 animated content without jittering so why then do simple animations (such 
 as those from Ensemble) perform so poorly?
 
 
 On 25 July 2013 02:02, Artem Ananiev artem.anan...@oracle.com 

Result: New OpenJFX Committer: Danno Ferrin

2013-07-25 Thread Richard Bair
Voting for Danno Ferrin to OpenJFX Committer [1] is now closed.

Yes: 4
Veto: 0
Abstain: 0

According to the Bylaws definition of Lazy Consensus, this is sufficient to 
approve the nomination.

Richard

[1] http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-July/008695.html

Result: New OpenJFX Committer: Oleg Mazurov

2013-07-25 Thread Richard Bair
Voting for Oleg Mazurov to OpenJFX Committer [1] is now closed.

Yes: 6
Veto: 0
Abstain: 0

According to the Bylaws definition of Lazy Consensus, this is sufficient to 
approve the nomination.

Artem

[1] http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-July/008699.html

Result: New OpenJFX Committer: Alexander Kouznetsov

2013-07-25 Thread Richard Bair
Voting for Alexander Kouznetsov to OpenJFX Committer [1] is now closed.

Yes: 3
Veto: 0
Abstain: 0

According to the Bylaws definition of Lazy Consensus, this is sufficient to 
approve the nomination.

Artem

[1] http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-July/008698.html

Result: New OpenJFX Committer: Debbie Masada

2013-07-25 Thread Richard Bair
Voting for Debbie Masada to OpenJFX Committer [1] is now closed.

Yes: 3
Veto: 0
Abstain: 0

According to the Bylaws definition of Lazy Consensus, this is sufficient to 
approve the nomination.

Artem

[1] http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-July/008696.html

Re: Mixing 2D and 3D

2013-07-25 Thread Richard Bair
Hi August,

 I think we already do multiple active cameras?
 
 More precisely: simultaneous viewing from different points of view into a 
 single 3D scene graph was meant, i.e. several cameras are attached to one 
 scene graph.
 A SubScene has exactly one camera attached which renders the associated scene 
 graph into the corresponding SubScene's rectangle. Implementing simultaneous 
 viewing requires a cloned 3D scene graph for the second, third, and so on 
 SubScene/Camera. Material, Mesh, and Image objects can be re-used because 
 they are shareable. Animations of Nodes' Transforms seem to be shareable as 
 well. But Transitions (Rotate, Scale, Translate) have to be cloned because 
 they operate on a Node's methods directly. So, simultaneous viewing seems 
 practicable.

Jasper or Kevin will have to comment, but I know this scenario was talked about 
extensively in the design for the renderToImage and cameras, and I thought this 
was possible today.

 Key/ mouse / touch / etc should be there already?
 Scene navigation and model interaction are often the first stumbling blocks 
 for developers with less 3D experience. A ready to go rotate, zoom, and drag 
 support including setting of arbitrary pivot points and adjustment of the 
 camera's clipping planes would overcome one's inhibitions.

I see

 Node's properties and methods
 
 Before I agree with all of your appraisals I would like to gain more 
 experiences with their 3D related implementations. For instance I wasn't 
 successful so far assigning a cursor to a Shape3D or receiving response from 
 any 'setOnMouseXXX' method.

Yes, please do try it out, it should be working and if not please do file a 
bug. We use a pick-ray for determining which nodes to pick, and then deliver 
mouse events to 3D and 2D nodes the same way.

Thanks!
Richard

Code style guide lines

2013-07-25 Thread Tom Schindl
Hi,

I'm once more doing a clean up pass to get out of the way warnings in
the control codebase - RT-31907.

Do you guys follow any coding guide lines? Wouldn't it be good if the
JavaFX codebase would follow
http://openjdk.java.net/guide/codeConventions.html

Tom


Re: Antialiasing in 3D

2013-07-25 Thread Richard Bair
John, did you feel this got answered by Chien's last comments?

Richard

On Jul 20, 2013, at 1:05 PM, John C. Turnbull ozem...@ozemail.com.au wrote:

 There has been recent discussion here regarding the 3D antialiasing options
 in JavaFX 8.
 
 
 
 For mine, there needs to be a way to specify both the *type* of AA (MSAA,
 FSAA etc.) and also the *magnitude* (2x, 4x etc.).  There also needs to be a
 way for the application to determine the range of settings available on the
 GPU so that it can select the particular options it wants (perhaps via user
 input).
 
 
 
 Given this, I have some additional comments.
 
 
 
 First, there seems to be 2 main approaches to applying AA to 3D scenes.  The
 first is what I am personally accustomed to in work I have done with OpenGL.
 With this approach you pretty much write directly to the primary buffer and
 thus allow the AA settings to be overridden by the driver configuration.
 For example, on my Windows 7 machine which sports a high-end NVIDIA GPU, I
 can go into the NVIDIA Control Panel and then fiddle with all manner of AA
 and other 3D settings.  I can choose anything from 2x to 32x with various
 combinations of MS, SS and CS.  The results of this tinkering are
 immediately obvious and range from high-performance chunky graphics to
 super-smooth graphics with very low frame rates.  The point is that I the
 user have full control over how the graphics are rendered and I get to
 choose between performance and quality or a bit of both.
 
 
 
 The other approach is where the scene or sub-scene is rendered into an
 off-screen buffer.  When the buffer is created, the AA settings (such as the
 number of samples) are specified and this/these buffer(s) can then be
 blasted onto the screen later.  Here it is the developer who has full
 control over the AA settings as with this approach the end user is unable to
 override these settings in their GPU driver's control panel.
 
 
 
 Which of these approaches will be taken with JavaFX 8 3D?  I am guessing
 it's the second approach or a combination of both approaches.
 
 
 
 I am especially curious because I have noticed some unusual things about 3D
 on some platforms.
 
 
 
 For example, on my iPhone I can play 3D games and they seem to perform very
 well.  What's really interesting to me is that the quality of the 3D
 graphics is absolutely outstanding with barely a jaggie to be seen.  I think
 someone mentioned in the previous thread on JavaFX 3D and AA that only
 levels of 2X MSAA were possible on most phones but if this is the case then
 how do they get the graphics to be rendered with such high quality?  I doubt
 it's all about the retina display as I have seen equally smooth graphics on
 some Android phones which do not have such high resolution screens.
 
 
 
 Similarly, I find that the 3D graphics rendered via WebGL (on all platforms)
 are also of a very high quality with seemingly no negative impact on
 performance.  In fact, on my Windows 7 machine I am unable to achieve the
 same level of quality in my own OpenGL applications even when the highest
 quality settings are configured in the NVIDIA Control Panel as is achieved
 in many WebGL games on the same machine.
 
 
 
 With both the iPhone and WebGL I find that tuning the settings in the
 Control Panel has absolutely no effect on the quality of the rendered
 graphics so I am very curious to know just how they can achieve the high
 quality rendering and also if JavaFX can somehow tap into these techniques
 as well.
 
 
 
 Could someone from the JavaFX 3D team please comment on these observations?
 
 
 
 Thanks,
 
 
 
 -jct
 



hg: openjfx/8/graphics/rt: fix for RT-31660

2013-07-25 Thread hang . vo
Changeset: 1362976b7edb
Author:Felipe Heidrich felipe.heidr...@oracle.com
Date:  2013-07-25 10:29 -0700
URL:   http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1362976b7edb

fix for RT-31660

! modules/graphics/src/main/native-font/directwrite.cpp



Re: Run JavaFX application on IBM JVM

2013-07-25 Thread Richard Bair
Hi Peter,

 Hi,
   I would like to ask you is it possible to run JavaFX application on IBM
 J9 JVM or other JVM? I suppose that I will need to copy some libraries from
 Oracle JVM. Can you give me some more information?

I would imagine it might work. We use sun.misc.Unsafe and maybe a couple other 
APIs which I don't know if IBM's J9 also implement (probably). We've only ever 
tested with HotSpot so I can't say for certain.

Richard

Re: Code style guide lines

2013-07-25 Thread Richard Bair
I started a guide on our wiki a while ago: 
https://wiki.openjdk.java.net/display/OpenJFX/Policies+and+Processes

But I only started it I never actually finished it or even asked anybody else 
what they thought of it :-). 

In general we follow the standard sun guidelines. We use spaces, not tabs. 4 
spaces per indent, 8 for line continuation (usually). Comments should be the 
standard /* */ or //.

We did go non-standard in our use of @Override by putting it on the same line 
as the method, although it is not consistent. I always do my for loops like:

for (int i=0; i10; i++)

(Notice the lack of spaces around = and ). This drives Kevin nuts who likes to 
have spaces around the = and .

Probably the best way to go is, as you find things that are suspicious or look 
wrong, lets bring it up and add it to the wiki and grow the wiki to have all 
the standards (rather than build up a list ahead of time). The Java code 
conventions should be seen as the rule book, unless we've explicitly modified 
it and documented it.

Richard

On Jul 25, 2013, at 10:39 AM, Tom Schindl tom.schi...@bestsolution.at wrote:

 Hi,
 
 I'm once more doing a clean up pass to get out of the way warnings in
 the control codebase - RT-31907.
 
 Do you guys follow any coding guide lines? Wouldn't it be good if the
 JavaFX codebase would follow
 http://openjdk.java.net/guide/codeConventions.html
 
 Tom



Re: Mixing 2D and 3D

2013-07-25 Thread Joseph Andresen

err... two identical groups of nodes**

On 7/25/2013 11:04 AM, Joseph Andresen wrote:


On 7/25/2013 10:37 AM, Richard Bair wrote:

Hi August,


I think we already do multiple active cameras?

More precisely: simultaneous viewing from different points of view 
into a single 3D scene graph was meant, i.e. several cameras are 
attached to one scene graph.
A SubScene has exactly one camera attached which renders the 
associated scene graph into the corresponding SubScene's rectangle. 
Implementing simultaneous viewing requires a cloned 3D scene graph 
for the second, third, and so on SubScene/Camera. Material, Mesh, 
and Image objects can be re-used because they are shareable. 
Animations of Nodes' Transforms seem to be shareable as well. But 
Transitions (Rotate, Scale, Translate) have to be cloned because 
they operate on a Node's methods directly. So, simultaneous viewing 
seems practicable.
Jasper or Kevin will have to comment, but I know this scenario was 
talked about extensively in the design for the renderToImage and 
cameras, and I thought this was possible today.
I know that one way to do this is by rendering the same group of nodes 
twice, using two different cameras each time, and using render to 
image or whatever to get your RTT. I haven't tried it but i suspect 
it goes something like calling render to image on a group with one 
camera and then render to image on the same group with a different 
camera.






Re: Code style guide lines

2013-07-25 Thread Tom Schindl
Hi,

Well what I'm interested more is things like:

* Should a switch always have a default-case? - According to the Java
guidelines this should be!

* Why are so many things not generified but use the raw types? - It
looks like you are all running with raw-type warnings off, which has the
effect that you don't even spot APIs who are not generified (and can't
even be fixed because it would be an API breakage).

* What should be done with fields declared but never used?

I think you should also write down the policy when a Simple*Property
used? - we discussed that same months ago already

Tom

On 25.07.13 20:10, Richard Bair wrote:
 I started a guide on our wiki a while ago: 
 https://wiki.openjdk.java.net/display/OpenJFX/Policies+and+Processes
 
 But I only started it I never actually finished it or even asked anybody else 
 what they thought of it :-). 
 
 In general we follow the standard sun guidelines. We use spaces, not tabs. 4 
 spaces per indent, 8 for line continuation (usually). Comments should be the 
 standard /* */ or //.
 
 We did go non-standard in our use of @Override by putting it on the same line 
 as the method, although it is not consistent. I always do my for loops like:
 
 for (int i=0; i10; i++)
 
 (Notice the lack of spaces around = and ). This drives Kevin nuts who likes 
 to have spaces around the = and .
 
 Probably the best way to go is, as you find things that are suspicious or 
 look wrong, lets bring it up and add it to the wiki and grow the wiki to have 
 all the standards (rather than build up a list ahead of time). The Java code 
 conventions should be seen as the rule book, unless we've explicitly modified 
 it and documented it.
 
 Richard
 
 On Jul 25, 2013, at 10:39 AM, Tom Schindl tom.schi...@bestsolution.at wrote:
 
 Hi,

 I'm once more doing a clean up pass to get out of the way warnings in
 the control codebase - RT-31907.

 Do you guys follow any coding guide lines? Wouldn't it be good if the
 JavaFX codebase would follow
 http://openjdk.java.net/guide/codeConventions.html

 Tom
 



Re: hg: openjfx/8/graphics/rt: RT-26702 Poor DisplacementMap effect performance on Mac

2013-07-25 Thread Petr Pchelko
Hello, Richard.

 Where did you instrument to measure which frames were actually rendered?
Actually, I've made a bit of hacking to get this and my solution is not 
cross-platform.

On Mac each time the [CALayer drawInGLContext] is called we are rendering a 
frame to the screen. And this is reliable - if we've exited this method the 
frame must be on the screen. So I've added a counter into this method which 
calculates the average number of method calls per second and logs it. In 
production this counter was removed. Of course external tools could be used, 
like OpenGL profiler, but I suppose that's not what you want.

Also, on Mac we have a flag in native which represents if the frame was 
delivered or not. So, using that flag, it is quite easy to add a logger which 
would warn you that a frame was dropped. Nothing could be done in Java for 
this, because we have a complex processing in native code and frame drops 
happen there. 

I have no idea how it could be done on other platforms, because I am familiar 
with this area only on the Mac. 

With best regards. Petr.

On Jul 25, 2013, at 9:24 PM, Richard Bair richard.b...@oracle.com wrote:

 Hi Petr,
 
 We are in a separate thread discussing jitter where being able to measure 
 dropped frames is crucial. We have the PulseLogger class which keeps track of 
 this kind of information (at least, it measures the amount of time spent in a 
 particular pulse). There is a message that sometimes displays about dropping 
 a frame, but I don't know if it captures the same cases as what you have 
 captured here. Where did you instrument to measure which frames were actually 
 rendered?
 
 I need a reliable mechanism for measuring jitter. We're not running full 
 speed, so if I'm handling frames at less than 16ms per frame, then I should 
 never see any jitter, unless we have a loss of synchronization between our 
 pulse timer and the display. How can I measure this reliably? Right now we 
 have to just stare at our monitors and see if something looks suspicious. I'd 
 rather have a fool-proof method of determining whether we're hitting each 
 frame right on target.
 
 Any ideas?
 
 Richard
 
 On Jul 24, 2013, at 11:31 AM, Petr Pchelko petr.pche...@oracle.com wrote:
 
 Hello, Richard.
 
 These changes fix the problem with dropping frames on Mac because of locking 
 between the render thread and UI thread.
 
 I have made some measurements with Controls benchmark and GUIMark2. The 
 numbers without braces is the FPS rendered by Prism and the braced numbers 
 represent how many frames we are actually rendering on the screen.
  
  Test Fix No Fix
 bitmap-1000  76.1 (76.0)  75.3 (44.1) 
 bitmap-3000  38.3 (38.1)  36.9 (31.2) 
 bitmap-5000  23.4 (23.2)  22.6 (18.4) 
 vector   31.6 (31.3)  31.8 (29.0) 
 CheckBox 79(79)67(47) 
 
 As you could see, with the fix we almost never drop frames, all of them are 
 actually delivered to the screen. Prism performance is improved in some 
 cases too. These are not all the results, just examples to feel the 
 difference. 
 
 With best regards. Petr.
 
 On Jul 24, 2013, at 8:23 PM, Richard Bair richard.b...@oracle.com wrote:
 
 The name of the issue is pretty ho-hum, but actually this was a huge amount 
 of work to get finished. Petr, Artem, or Steve, can you give us a run-down 
 of the performance impact of this change on Mac?
 
 Thanks
 Richard
 
 On Jul 24, 2013, at 12:32 AM, hang...@oracle.com wrote:
 
 Changeset: dd30604ab7d0
 Author:Petr Pchelko petr.pche...@oracle.com
 Date:  2013-07-24 11:24 +0400
 URL:   
 http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/dd30604ab7d0
 
 RT-26702 Poor DisplacementMap effect performance on Mac
 Reviewed-by: anthony, art, snorthov
 
 ! 
 modules/graphics/src/main/native-glass/mac/GlassEmbeddedWindow+Overrides.m
 ! modules/graphics/src/main/native-glass/mac/GlassFrameBufferObject.h
 ! modules/graphics/src/main/native-glass/mac/GlassFrameBufferObject.m
 ! modules/graphics/src/main/native-glass/mac/GlassLayer3D.h
 ! modules/graphics/src/main/native-glass/mac/GlassLayer3D.m
 ! modules/graphics/src/main/native-glass/mac/GlassOffscreen.h
 ! modules/graphics/src/main/native-glass/mac/GlassOffscreen.m
 ! modules/graphics/src/main/native-glass/mac/GlassView3D.m
 
 
 
 



Re: Code style guide lines

2013-07-25 Thread Richard Bair
 * Should a switch always have a default-case? - According to the Java
 guidelines this should be!

I would say definitely yes. The default clause should throw an AssertionError 
if it really is unexpected. This will catch cases where we add an enum type and 
don't add the right clause to a switch statement.

 * Why are so many things not generified but use the raw types? - It
 looks like you are all running with raw-type warnings off, which has the
 effect that you don't even spot APIs who are not generified (and can't
 even be fixed because it would be an API breakage).

Could be!

 * What should be done with fields declared but never used?

We ought to remove anything not being used. The only trick is making sure it 
isn't be used evilly through reflection (most of the time this is not the case).

 I think you should also write down the policy when a Simple*Property
 used? - we discussed that same months ago already

I'd be happy to put it in the wiki if you give me some words. I'm overloaded 
and drowning :)

Richard

Re: hg: openjfx/8/graphics/rt: RT-26702 Poor DisplacementMap effect performance on Mac

2013-07-25 Thread Richard Bair
Can you point me at the code? I'm in graphics, and I've done a search in the 
whole of rt and I don't see CALayer drawInGLContext anywhere in the code. (I 
did both an IDEA case insensitive recursive search and also a grep -r on the 
command line)

Thanks
Richard

On Jul 25, 2013, at 11:26 AM, Petr Pchelko petr.pche...@oracle.com wrote:

 Hello, Richard.
 
 Where did you instrument to measure which frames were actually rendered?
 Actually, I've made a bit of hacking to get this and my solution is not 
 cross-platform.
 
 On Mac each time the [CALayer drawInGLContext] is called we are rendering a 
 frame to the screen. And this is reliable - if we've exited this method the 
 frame must be on the screen. So I've added a counter into this method which 
 calculates the average number of method calls per second and logs it. In 
 production this counter was removed. Of course external tools could be used, 
 like OpenGL profiler, but I suppose that's not what you want.
 
 Also, on Mac we have a flag in native which represents if the frame was 
 delivered or not. So, using that flag, it is quite easy to add a logger which 
 would warn you that a frame was dropped. Nothing could be done in Java for 
 this, because we have a complex processing in native code and frame drops 
 happen there. 
 
 I have no idea how it could be done on other platforms, because I am familiar 
 with this area only on the Mac. 
 
 With best regards. Petr.
 
 On Jul 25, 2013, at 9:24 PM, Richard Bair richard.b...@oracle.com wrote:
 
 Hi Petr,
 
 We are in a separate thread discussing jitter where being able to measure 
 dropped frames is crucial. We have the PulseLogger class which keeps track 
 of this kind of information (at least, it measures the amount of time spent 
 in a particular pulse). There is a message that sometimes displays about 
 dropping a frame, but I don't know if it captures the same cases as what you 
 have captured here. Where did you instrument to measure which frames were 
 actually rendered?
 
 I need a reliable mechanism for measuring jitter. We're not running full 
 speed, so if I'm handling frames at less than 16ms per frame, then I should 
 never see any jitter, unless we have a loss of synchronization between our 
 pulse timer and the display. How can I measure this reliably? Right now we 
 have to just stare at our monitors and see if something looks suspicious. 
 I'd rather have a fool-proof method of determining whether we're hitting 
 each frame right on target.
 
 Any ideas?
 
 Richard
 
 On Jul 24, 2013, at 11:31 AM, Petr Pchelko petr.pche...@oracle.com wrote:
 
 Hello, Richard.
 
 These changes fix the problem with dropping frames on Mac because of 
 locking between the render thread and UI thread.
 
 I have made some measurements with Controls benchmark and GUIMark2. The 
 numbers without braces is the FPS rendered by Prism and the braced numbers 
 represent how many frames we are actually rendering on the screen.
  
  Test Fix No Fix
 bitmap-1000  76.1 (76.0)  75.3 (44.1) 
 bitmap-3000  38.3 (38.1)  36.9 (31.2) 
 bitmap-5000  23.4 (23.2)  22.6 (18.4) 
 vector   31.6 (31.3)  31.8 (29.0) 
 CheckBox 79(79)67(47) 
 
 As you could see, with the fix we almost never drop frames, all of them are 
 actually delivered to the screen. Prism performance is improved in some 
 cases too. These are not all the results, just examples to feel the 
 difference. 
 
 With best regards. Petr.
 
 On Jul 24, 2013, at 8:23 PM, Richard Bair richard.b...@oracle.com wrote:
 
 The name of the issue is pretty ho-hum, but actually this was a huge 
 amount of work to get finished. Petr, Artem, or Steve, can you give us a 
 run-down of the performance impact of this change on Mac?
 
 Thanks
 Richard
 
 On Jul 24, 2013, at 12:32 AM, hang...@oracle.com wrote:
 
 Changeset: dd30604ab7d0
 Author:Petr Pchelko petr.pche...@oracle.com
 Date:  2013-07-24 11:24 +0400
 URL:   
 http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/dd30604ab7d0
 
 RT-26702 Poor DisplacementMap effect performance on Mac
 Reviewed-by: anthony, art, snorthov
 
 ! 
 modules/graphics/src/main/native-glass/mac/GlassEmbeddedWindow+Overrides.m
 ! modules/graphics/src/main/native-glass/mac/GlassFrameBufferObject.h
 ! modules/graphics/src/main/native-glass/mac/GlassFrameBufferObject.m
 ! modules/graphics/src/main/native-glass/mac/GlassLayer3D.h
 ! modules/graphics/src/main/native-glass/mac/GlassLayer3D.m
 ! modules/graphics/src/main/native-glass/mac/GlassOffscreen.h
 ! modules/graphics/src/main/native-glass/mac/GlassOffscreen.m
 ! modules/graphics/src/main/native-glass/mac/GlassView3D.m
 
 
 
 
 



hg: openjfx/8/graphics/rt: Added manual region tests

2013-07-25 Thread hang . vo
Changeset: 6a87954a02d3
Author:rbair
Date:  2013-07-25 11:48 -0700
URL:   http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/6a87954a02d3

Added manual region tests

+ .idea/RegionTests.iml
! .idea/modules.xml
+ tests/manual/RegionTests/src/main/java/region/RegionBackgroundFillUITest.java
+ tests/manual/RegionTests/src/main/java/region/RegionBackgroundImageUITest.java
+ tests/manual/RegionTests/src/main/java/region/RegionBorderImageUITest.java
+ tests/manual/RegionTests/src/main/java/region/RegionBorderStrokeUITest.java
+ tests/manual/RegionTests/src/main/java/region/RegionShapeUITest.java
+ tests/manual/RegionTests/src/main/java/region/RegionUITestBase.java
+ tests/manual/RegionTests/src/main/resources/region/BlackButton.png
+ tests/manual/RegionTests/src/main/resources/region/WindowsButton.png
+ tests/manual/RegionTests/src/main/resources/region/border.png
+ tests/manual/RegionTests/src/main/resources/region/bor...@2x.png
+ tests/manual/RegionTests/src/main/resources/region/checker.png
+ tests/manual/RegionTests/src/main/resources/region/popover-no-arrow-empty.png
+ 
tests/manual/RegionTests/src/main/resources/region/popover-no-arrow-em...@2x.png
+ tests/manual/RegionTests/src/main/resources/region/test20x20.png
+ tests/manual/RegionTests/src/main/resources/region/test20...@2x.png
+ tests/manual/RegionTests/src/main/resources/region/test48x48.png
+ tests/manual/RegionTests/src/main/resources/region/test48...@2x.png



Re: hg: openjfx/8/graphics/rt: RT-26702 Poor DisplacementMap effect performance on Mac

2013-07-25 Thread Petr Pchelko
Sorry, I have misspelled the method name. It's drawInCGLContext. 

It's in native Glass: GlassLayer3D.m line 153.

With best regards. Petr.

On Jul 25, 2013, at 11:02 PM, Richard Bair richard.b...@oracle.com wrote:

 Can you point me at the code? I'm in graphics, and I've done a search in the 
 whole of rt and I don't see CALayer drawInGLContext anywhere in the code. (I 
 did both an IDEA case insensitive recursive search and also a grep -r on the 
 command line)
 
 Thanks
 Richard
 
 On Jul 25, 2013, at 11:26 AM, Petr Pchelko petr.pche...@oracle.com wrote:
 
 Hello, Richard.
 
 Where did you instrument to measure which frames were actually rendered?
 Actually, I've made a bit of hacking to get this and my solution is not 
 cross-platform.
 
 On Mac each time the [CALayer drawInGLContext] is called we are rendering a 
 frame to the screen. And this is reliable - if we've exited this method the 
 frame must be on the screen. So I've added a counter into this method which 
 calculates the average number of method calls per second and logs it. In 
 production this counter was removed. Of course external tools could be used, 
 like OpenGL profiler, but I suppose that's not what you want.
 
 Also, on Mac we have a flag in native which represents if the frame was 
 delivered or not. So, using that flag, it is quite easy to add a logger 
 which would warn you that a frame was dropped. Nothing could be done in Java 
 for this, because we have a complex processing in native code and frame 
 drops happen there. 
 
 I have no idea how it could be done on other platforms, because I am 
 familiar with this area only on the Mac. 
 
 With best regards. Petr.
 
 On Jul 25, 2013, at 9:24 PM, Richard Bair richard.b...@oracle.com wrote:
 
 Hi Petr,
 
 We are in a separate thread discussing jitter where being able to measure 
 dropped frames is crucial. We have the PulseLogger class which keeps track 
 of this kind of information (at least, it measures the amount of time spent 
 in a particular pulse). There is a message that sometimes displays about 
 dropping a frame, but I don't know if it captures the same cases as what 
 you have captured here. Where did you instrument to measure which frames 
 were actually rendered?
 
 I need a reliable mechanism for measuring jitter. We're not running full 
 speed, so if I'm handling frames at less than 16ms per frame, then I should 
 never see any jitter, unless we have a loss of synchronization between our 
 pulse timer and the display. How can I measure this reliably? Right now we 
 have to just stare at our monitors and see if something looks suspicious. 
 I'd rather have a fool-proof method of determining whether we're hitting 
 each frame right on target.
 
 Any ideas?
 
 Richard
 
 On Jul 24, 2013, at 11:31 AM, Petr Pchelko petr.pche...@oracle.com wrote:
 
 Hello, Richard.
 
 These changes fix the problem with dropping frames on Mac because of 
 locking between the render thread and UI thread.
 
 I have made some measurements with Controls benchmark and GUIMark2. The 
 numbers without braces is the FPS rendered by Prism and the braced numbers 
 represent how many frames we are actually rendering on the screen.
  
  Test Fix No Fix
 bitmap-1000  76.1 (76.0)  75.3 (44.1) 
 bitmap-3000  38.3 (38.1)  36.9 (31.2) 
 bitmap-5000  23.4 (23.2)  22.6 (18.4) 
 vector   31.6 (31.3)  31.8 (29.0) 
 CheckBox 79(79)67(47) 
 
 As you could see, with the fix we almost never drop frames, all of them 
 are actually delivered to the screen. Prism performance is improved in 
 some cases too. These are not all the results, just examples to feel the 
 difference. 
 
 With best regards. Petr.
 
 On Jul 24, 2013, at 8:23 PM, Richard Bair richard.b...@oracle.com wrote:
 
 The name of the issue is pretty ho-hum, but actually this was a huge 
 amount of work to get finished. Petr, Artem, or Steve, can you give us a 
 run-down of the performance impact of this change on Mac?
 
 Thanks
 Richard
 
 On Jul 24, 2013, at 12:32 AM, hang...@oracle.com wrote:
 
 Changeset: dd30604ab7d0
 Author:Petr Pchelko petr.pche...@oracle.com
 Date:  2013-07-24 11:24 +0400
 URL:   
 http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/dd30604ab7d0
 
 RT-26702 Poor DisplacementMap effect performance on Mac
 Reviewed-by: anthony, art, snorthov
 
 ! 
 modules/graphics/src/main/native-glass/mac/GlassEmbeddedWindow+Overrides.m
 ! modules/graphics/src/main/native-glass/mac/GlassFrameBufferObject.h
 ! modules/graphics/src/main/native-glass/mac/GlassFrameBufferObject.m
 ! modules/graphics/src/main/native-glass/mac/GlassLayer3D.h
 ! modules/graphics/src/main/native-glass/mac/GlassLayer3D.m
 ! modules/graphics/src/main/native-glass/mac/GlassOffscreen.h
 ! modules/graphics/src/main/native-glass/mac/GlassOffscreen.m
 ! modules/graphics/src/main/native-glass/mac/GlassView3D.m
 
 
 
 
 
 



hg: openjfx/8/graphics/rt: Ensemble8: DisplayShelf misses pagination bar

2013-07-25 Thread hang . vo
Changeset: 2cf8414df80b
Author:dmasada
Date:  2013-07-25 12:47 -0700
URL:   http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/2cf8414df80b

Ensemble8: DisplayShelf misses pagination bar

! 
apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/displayshelf/DisplayShelf.java
! 
apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java
+ 
apps/samples/Ensemble8/src/samples/resources/ensemble/samples/graphics/displayshelf/DisplayShelf.css



Re: Code style guide lines

2013-07-25 Thread Tom Schindl
On 25.07.13 20:59, Richard Bair wrote:
 * Should a switch always have a default-case? - According to the Java
 guidelines this should be!
 
 I would say definitely yes. The default clause should throw an AssertionError 
 if it really is unexpected. This will catch cases where we add an enum type 
 and don't add the right clause to a switch statement.
 

ok

 * Why are so many things not generified but use the raw types? - It
 looks like you are all running with raw-type warnings off, which has the
 effect that you don't even spot APIs who are not generified (and can't
 even be fixed because it would be an API breakage).
 
 Could be!
 
 * What should be done with fields declared but never used?
 
 We ought to remove anything not being used. The only trick is making sure it 
 isn't be used evilly through reflection (most of the time this is not the 
 case).
 

Understood but if that is the case it should be marked and commented.

 I think you should also write down the policy when a Simple*Property
 used? - we discussed that same months ago already
 
 I'd be happy to put it in the wiki if you give me some words. I'm overloaded 
 and drowning :)
 

Ok. Let me see if I can come up with some words on this. Wouldn't it
make sense to turn on things like static code analysis and compiler
warnings in the grade build?

I know that there was some effort in OpenJDK to compile -Xlint:all
-Werror by default instead of suppressing them? At least I think this
should be a target, not?

Tom


Re: Code style guide lines

2013-07-25 Thread Richard Bair
 I think you should also write down the policy when a Simple*Property
 used? - we discussed that same months ago already
 
 I'd be happy to put it in the wiki if you give me some words. I'm overloaded 
 and drowning :)
 
 
 Ok. Let me see if I can come up with some words on this. Wouldn't it
 make sense to turn on things like static code analysis and compiler
 warnings in the grade build?
 
 I know that there was some effort in OpenJDK to compile -Xlint:all
 -Werror by default instead of suppressing them? At least I think this
 should be a target, not?


Yes definitely the goal. We need to get rid of all the impl_ guys first though, 
the amount of deprecation warnings we get is swamping any useful warning output.

Richard

Re: Mixing 2D and 3D

2013-07-25 Thread Chien Yang

Hi August,

  We did talk through some use cases such as PIP and rear view 
mirror. You can do simultaneous viewing from different points of view 
into a single 3D scene via the use of SubScenes. The key point, as you 
have clearly stated, is the need to clone the scene graph nodes per 
SubScene.


- Chien

On 7/25/2013 10:37 AM, Richard Bair wrote:

Hi August,


I think we already do multiple active cameras?

More precisely: simultaneous viewing from different points of view into a 
single 3D scene graph was meant, i.e. several cameras are attached to one scene 
graph.
A SubScene has exactly one camera attached which renders the associated scene 
graph into the corresponding SubScene's rectangle. Implementing simultaneous 
viewing requires a cloned 3D scene graph for the second, third, and so on 
SubScene/Camera. Material, Mesh, and Image objects can be re-used because they are 
shareable. Animations of Nodes' Transforms seem to be shareable as well. But 
Transitions (Rotate, Scale, Translate) have to be cloned because they operate on a 
Node's methods directly. So, simultaneous viewing seems practicable.

Jasper or Kevin will have to comment, but I know this scenario was talked about 
extensively in the design for the renderToImage and cameras, and I thought this 
was possible today.





Re: Mixing 2D and 3D

2013-07-25 Thread Richard Bair
Having to clone the nodes hardly seems like simultaneous viewing from different 
points of view?

On Jul 25, 2013, at 5:17 PM, Chien Yang chien.y...@oracle.com wrote:

 Hi August,
 
  We did talk through some use cases such as PIP and rear view mirror. You 
 can do simultaneous viewing from different points of view into a single 3D 
 scene via the use of SubScenes. The key point, as you have clearly stated, is 
 the need to clone the scene graph nodes per SubScene.
 
 - Chien
 
 On 7/25/2013 10:37 AM, Richard Bair wrote:
 Hi August,
 
 I think we already do multiple active cameras?
 
 More precisely: simultaneous viewing from different points of view into a 
 single 3D scene graph was meant, i.e. several cameras are attached to one 
 scene graph.
 A SubScene has exactly one camera attached which renders the associated 
 scene graph into the corresponding SubScene's rectangle. Implementing 
 simultaneous viewing requires a cloned 3D scene graph for the second, 
 third, and so on SubScene/Camera. Material, Mesh, and Image objects can be 
 re-used because they are shareable. Animations of Nodes' Transforms seem 
 to be shareable as well. But Transitions (Rotate, Scale, Translate) have 
 to be cloned because they operate on a Node's methods directly. So, 
 simultaneous viewing seems practicable.
 Jasper or Kevin will have to comment, but I know this scenario was talked 
 about extensively in the design for the renderToImage and cameras, and I 
 thought this was possible today.
 
 



Re: Mixing 2D and 3D

2013-07-25 Thread Chien Yang
We don't support sharable Node. Some one will have to do the cloning of 
the scenegraph, either the application or JavaFX. Now I may have opened 
a can of worms. ;-)


- Chien

On 7/25/2013 5:20 PM, Richard Bair wrote:

Having to clone the nodes hardly seems like simultaneous viewing from different 
points of view?

On Jul 25, 2013, at 5:17 PM, Chien Yang chien.y...@oracle.com wrote:


Hi August,

  We did talk through some use cases such as PIP and rear view mirror. You 
can do simultaneous viewing from different points of view into a single 3D 
scene via the use of SubScenes. The key point, as you have clearly stated, is 
the need to clone the scene graph nodes per SubScene.

- Chien

On 7/25/2013 10:37 AM, Richard Bair wrote:

Hi August,


I think we already do multiple active cameras?

More precisely: simultaneous viewing from different points of view into a 
single 3D scene graph was meant, i.e. several cameras are attached to one scene 
graph.
A SubScene has exactly one camera attached which renders the associated scene 
graph into the corresponding SubScene's rectangle. Implementing simultaneous 
viewing requires a cloned 3D scene graph for the second, third, and so on 
SubScene/Camera. Material, Mesh, and Image objects can be re-used because they 
are shareable. Animations of Nodes' Transforms seem to be shareable as well. 
But Transitions (Rotate, Scale, Translate) have to be cloned because they 
operate on a Node's methods directly. So, simultaneous viewing seems 
practicable.

Jasper or Kevin will have to comment, but I know this scenario was talked about 
extensively in the design for the renderToImage and cameras, and I thought this 
was possible today.





hg: openjfx/8/graphics/rt: RT-31945: Flatten Painter hierarchy

2013-07-25 Thread hang . vo
Changeset: 281a9fdae8bb
Author:rbair
Date:  2013-07-25 17:44 -0700
URL:   http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/281a9fdae8bb

RT-31945: Flatten Painter hierarchy

- modules/graphics/src/main/java/com/sun/javafx/tk/quantum/AbstractPainter.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/EmbeddedScene.java
! 
modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassAppletWindow.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassScene.java
! 
modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassViewEventHandler.java
! 
modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassWindowEventHandler.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/OverlayWarning.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/PaintCollector.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/QuantumRenderer.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/QuantumToolkit.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/UploadingPainter.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/ViewPainter.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/ViewScene.java
! modules/graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java



Re: Mixing 2D and 3D

2013-07-25 Thread Richard Bair
I thought the approach was not to have multiple parents, but to render into an 
image.

On Jul 25, 2013, at 5:26 PM, Chien Yang chien.y...@oracle.com wrote:

 We don't support sharable Node. Some one will have to do the cloning of the 
 scenegraph, either the application or JavaFX. Now I may have opened a can of 
 worms. ;-)
 
 - Chien
 
 On 7/25/2013 5:20 PM, Richard Bair wrote:
 Having to clone the nodes hardly seems like simultaneous viewing from 
 different points of view?
 
 On Jul 25, 2013, at 5:17 PM, Chien Yang chien.y...@oracle.com wrote:
 
 Hi August,
 
  We did talk through some use cases such as PIP and rear view mirror. 
 You can do simultaneous viewing from different points of view into a single 
 3D scene via the use of SubScenes. The key point, as you have clearly 
 stated, is the need to clone the scene graph nodes per SubScene.
 
 - Chien
 
 On 7/25/2013 10:37 AM, Richard Bair wrote:
 Hi August,
 
 I think we already do multiple active cameras?
 
 More precisely: simultaneous viewing from different points of view into 
 a single 3D scene graph was meant, i.e. several cameras are attached to 
 one scene graph.
 A SubScene has exactly one camera attached which renders the associated 
 scene graph into the corresponding SubScene's rectangle. Implementing 
 simultaneous viewing requires a cloned 3D scene graph for the second, 
 third, and so on SubScene/Camera. Material, Mesh, and Image objects can 
 be re-used because they are shareable. Animations of Nodes' Transforms 
 seem to be shareable as well. But Transitions (Rotate, Scale, Translate) 
 have to be cloned because they operate on a Node's methods directly. So, 
 simultaneous viewing seems practicable.
 Jasper or Kevin will have to comment, but I know this scenario was talked 
 about extensively in the design for the renderToImage and cameras, and I 
 thought this was possible today.
 
 



hg: openjfx/8/controls/rt: 5 new changesets

2013-07-25 Thread hang . vo
Changeset: ff97242a4815
Author:jgiles
Date:  2013-07-26 11:29 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/ff97242a4815

RT-31907: Cleanup control code (part four: generic fixes for TableView)
Contributed-by: Tom Schindl tom.schi...@bestsolution.at
Reviewed-by: jgiles

! modules/controls/src/main/java/javafx/scene/control/TableView.java

Changeset: f5760de6984f
Author:jgiles
Date:  2013-07-26 11:36 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/f5760de6984f

RT-31907: Cleanup control code (part five: Yet more generic fixes)
Contributed-by: Tom Schindl tom.schi...@bestsolution.at
Reviewed-by: jgiles

! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/BehaviorSkinBase.java
! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/CellSkinBase.java
! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/DatePickerHijrahContent.java
! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/LabeledImpl.java
! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/LabeledText.java
! modules/controls/src/main/java/javafx/scene/control/TableCell.java
! modules/controls/src/main/java/javafx/scene/control/TreeTableView.java
! modules/controls/src/main/java/javafx/scene/control/TreeView.java

Changeset: f70737a74988
Author:jgiles
Date:  2013-07-26 11:38 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/f70737a74988

RT-31907: Cleanup control code (part six: Yet more generic fixes and cleanups)
Contributed-by: Tom Schindl tom.schi...@bestsolution.at
Reviewed-by: jgiles

! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/SliderSkin.java
! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TabPaneSkin.java
! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableRowSkin.java

Changeset: d575789123cc
Author:jgiles
Date:  2013-07-26 12:04 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/d575789123cc

Fix build failure.

! modules/controls/src/main/java/javafx/scene/control/TableCell.java

Changeset: d2e66eac7422
Author:jgiles
Date:  2013-07-26 15:14 +1200
URL:   http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/d2e66eac7422

RT-31692: VirtualFlow : GetAvailableCell protected
RT-31570: Make some VirtualFlow method protected

! 
modules/controls/src/main/java/com/sun/javafx/scene/control/skin/VirtualFlow.java
! 
modules/controls/src/test/java/com/sun/javafx/scene/control/skin/VirtualFlowTest.java



Re: Building JavaDoc and Sources JARs

2013-07-25 Thread Richard Bair
You gotta set the BUILD_JAVADOC flag. Look in gradle.properties.template -- all 
the different flags are pretty well documented there.

For sources, somebody else posted a message about wanting to do that, and I 
think that's great. Just need to get a patch to the gradle build to create a 
source zip (per platform, or just one big zip with everything in it?)

Richard

On Jul 25, 2013, at 8:24 PM, Daniel Zwolenski zon...@gmail.com wrote:

 For the Maven deploy I need a JAR of the JavaDoc and another containing the
 sources. That's the rules.
 
 How do I build these with the Gradle build? I tried:
 
 gradle javadoc
 
 and can't see any JavaDoc anywhere in the build directory?
 
 Admittedly I am running this on the 78 backport code, not the JFX code, but
 I believe this part of the build should be the same?
 
 Full log:
 
 Daniels-MacBook-Pro:jfx78 zonski$ /usr/local/gradle-1.6/bin/gradle javadoc
 The ConfigurationContainer.add() method has been deprecated and is
 scheduled to be removed in Gradle 2.0. Please use the create() method
 instead.
 :buildSrc:clean UP-TO-DATE
 :buildSrc:generateGrammarSource
 error(10):  internal error: Can't get property indirectDelegates using
 method get/isIndirectDelegates from org.antlr.tool.Grammar instance :
 java.lang.NullPointerException
 java.util.Objects.requireNonNull(Objects.java:203)
 java.util.ArrayList.removeAll(ArrayList.java:674)
 org.antlr.tool.CompositeGrammar.getIndirectDelegates(CompositeGrammar.java:222)
 org.antlr.tool.Grammar.getIndirectDelegates(Grammar.java:2620)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 java.lang.reflect.Method.invoke(Method.java:491)
 org.antlr.stringtemplate.language.ASTExpr.invokeMethod(ASTExpr.java:563)
 org.antlr.stringtemplate.language.ASTExpr.rawGetObjectProperty(ASTExpr.java:514)
 org.antlr.stringtemplate.language.ASTExpr.getObjectProperty(ASTExpr.java:416)
 org.antlr.stringtemplate.language.ActionEvaluator.attribute(ActionEvaluator.java:351)
 org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:136)
 org.antlr.stringtemplate.language.ActionEvaluator.templateApplication(ActionEvaluator.java:216)
 org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:126)
 org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:84)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
 org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
 org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
 org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
 org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
 org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
 org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
 org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
 org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
 org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
 org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
 org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
 org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1278)
 org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
 org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:463)
 org.antlr.Tool.generateRecognizer(Tool.java:607)
 org.antlr.Tool.process(Tool.java:429)
 org.antlr.Tool.main(Tool.java:91)
 :buildSrc:compileJava
 :buildSrc:compileGroovy
 :buildSrc:processResources
 :buildSrc:classes
 :buildSrc:jar
 :buildSrc:assemble
 :buildSrc:compileTestJava
 Note:
 /Users/zonski/Development/openjdk/jfx78/jfx78-zonski/jfx78/buildSrc/src/test/java/com/sun/scenario/effect/compiler/parser/FieldSelectTest.java
 uses or overrides a deprecated API.
 Note: Recompile with -Xlint:deprecation for details.
 :buildSrc:compileTestGroovy UP-TO-DATE
 :buildSrc:processTestResources UP-TO-DATE
 :buildSrc:testClasses
 :buildSrc:test
 :buildSrc:check
 :buildSrc:build
 Missing or incorrect path to 'jfxrt.jar':
 '/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/ext/jfxrt.jar'.
 Perhaps bad JDK_HOME?
 /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
 Unsupported gradle version 1.6 in use. Only 1.4 is supported
 OS_NAME: mac os x
 OS_ARCH: x86_64
 JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre
 JDK_HOME: 

Re: Can JavaFX do CAD?

2013-07-25 Thread Richard Bair
Actually Jasper and Scott just pointed out some problems here. I mistyped 
(should have been return _x; from the getter). But also I didn't handle the 
case of binding, or setting via the property correctly here. So this modified 
pattern doesn't work. I may be remembering it wrong and Alex can correct me.

Richard

On Jul 25, 2013, at 9:21 AM, Richard Bair richard.b...@oracle.com wrote:

 Regarding memory requirements of the full lazy properties, let me state 
 the obvious:
 - if the property is not used at all, we have a reference and a double 
 instead of just a reference (worse unless in bucket)
 - if getters/setters are called, we still have a reference and a double 
 instead of full instantiated property (better)
 - if a listener is added, we have instantiated property and a double instead 
 of just the property (slightly worse)
 So it looks like it would make best sense to introduce this for properties 
 that are often get/set but usually don't have listeners on them. I'm not 
 sure if such set exists and can be identified.
 
 Thanks Pavel, this is a good summary. Alex K. and I were looking at a pattern 
 for this once and he had another way to do it which was different than what I 
 had done in the past. The pattern I used to use was something like this:
 
private double _x;
private DoubleProperty x;
 
public final void setX(double value) {
if (x == null) {
_x = value;
} else {
x.set(value);
}
 
public final double getX() {
return x == null ? _x : x.get();
}
 
public final DoubleProperty xProperty() {
if (x == null) x = new DoubleProperty(this, x, _x);
return x;
}
 
 instead it could be done like this which results in faster getters (because 
 you never have to delegate to another method), an almost immeasurably slower 
 setter, and slightly little less code:
 
private double _x;
private DoubleProperty x;
 
public final void setX(double value) {
_x = value;
if (x != null) x.set(value);
}
 
public final double getX() {
return x;
}
 
public final DoubleProperty xProperty() {
if (x == null) x = new DoubleProperty(this, x, _x);
return x;
}
 
 
 The idea here is to always set the local field, so that we can always just 
 return the value immediately in the getter. Where I think this may make a 
 difference is on the smaller end systems (mobile / embedded) because from 
 previous analysis we saw that none of our getters were getting inlined -- we 
 actually paid the price of each method call overhead, because since we were 
 reading from the property objects and the property objects were a couple 
 methods worth of work for each getter call, the VM wouldn't inline the 
 generated code into the call sites. By using this pattern in places that are 
 commonly read, we would probably get these getters all inlined again and 
 avoid all the method call overhead entirely.
 
 Richard



A different way to handle pulse timing

2013-07-25 Thread Richard Bair
Hi,

I'm probably missing something obvious and you guys on Glass / Prism / Quantum 
can help set me straight. I was thinking tonight of a different way of 
initiating pulse events that would, I think, completely smooth out the pulses 
such that we don't end up with drift due to the timer being at a different 
rate than the GPU.

Suppose we have two variables in the system (and for simplicity lets talk about 
a single Scene, because one problem I think this idea has is with multiple 
scenes and I want to discuss that separately after the core mechanism is 
understood):

- boolean pendingPulse
- int runningAnimationCounter

Whenever an animation starts, the runningAnimationCounter is incremented. When 
an animation ends, it is decremented (or it could be a SetAnimation or 
whatever). The pendingPulse is simply false to start with, and is checked 
before we submit another pulse. Whenever a node in the scene graph becomes 
dirty, or the scene is resized, or stylesheets are changed, or in any case 
something happens that requires us to draw again, we check this flag and fire a 
new pulse if one is not already pending.

When a pulse occurs, we process animations first, then CSS, then layout, then 
validate all the bounds, and *then we block* until the rendering thread is 
available for synchronization. I believe this is what we are doing today (it 
was a change Steve and I looked at with Jasper a couple months ago IIRC).

But now for the new part. Immediately after synchronization, we check the 
runningAnimationCounter. If it is  0, then we fire off a new pulse and leave 
the pendingPulse flag set to true. If runningAnimationCounter == 0, then we 
flip pendingPulse to false. Other than the pick that always happens at the end 
of the pulse, we do nothing else new and, if the pick didn't cause state to 
change, we are now quiescent.

Meanwhile, the render thread has run off doing its thing. The last step of 
rendering is the present, where we will block until the thing is presented, 
which, when we return, would put us *immediately* at the start of the next 
16.66ms cycle. Since the render thread has just completed its duties, it goes 
back to waiting until the FX thread comes around asking to sync up again.

If there is an animation going on such that a new pulse had been fired 
immediately after synchronization, then that new pulse would have been handled 
while the previous frame was being rendered. Most likely, by the time the 
render thread completes presenting and comes back to check with the FX thread, 
it will find that the FX thread is already waiting for it with the next frames 
data. It will synchronize immediately and then carry on rendering another frame.

I think the way this would behave is that, when an animation is first played, 
you will get two pulses close to each other. The first pulse will do its 
business and then synchronize and then immediately fire off another pulse. That 
next pulse will then also get processed and then the FX thread will block until 
the previous frame finishes rendering. During this time, additional events 
(either application generated via runLater calls happening on background 
threads, or from OS events) will get queued up. Between pulse #2 and pulse #3 
then a bunch of other events will get processed, essentially playing catch-up. 
My guess is that this won't be a problem but you might see a hiccup at the 
start of a new animation if the event queue is too full and it can't process 
all that stuff in 16ms (because at this point we're really multi-theaded 
between the FX and render threads and have nearly 16ms for each thread to do 
their business, instead of only 8ms which is what you'd have in a single 
threaded system).

Another question I have is around resize events and how those work. If they 
also come in to glass on the FX thread (but at a higher priority than user 
events like a pulse or other input events?) then what will happen is that we 
will get a resize event and process a half-a-pulse (or maybe a whole pulse? 
animations+css+layout or just css+layout?) and then render, pretty much just as 
fast as we can.

As for multiple scenes, I'm actually curious how this happens today. If I have 
2 scenes, and we have just a single render thread servicing both, then when I 
go to present, it blocks? Or is there a non-blocking present method that we use 
instead? Because if we block, then having 2 scenes would cut you down to 30fps 
maximum, wouldn't it? If we are non-blocking today (is that possible?) then the 
only way this proposed solution would work is if there was a different render 
thread per stage (which actually is something I think we ought to be doing 
anyway?).

Thanks
Richard




Re: Building JavaDoc and Sources JARs

2013-07-25 Thread Daniel Zwolenski
I've enabled that property and I now get a bunch of errors (100+), some
random samples:

/Users/zonski/Development/openjdk/jfx78/jfx78-zonski/jfx78/modules/web/src/main/java/javafx/scene/web/HTMLEditor.java:31:
error: package com.sun.javafx.scene.web.skin does not exist
import com.sun.javafx.scene.web.skin.HTMLEditorSkin;

/Users/zonski/Development/openjdk/jfx78/jfx78-zonski/jfx78/modules/swt/src/main/java/javafx/embed/swt/FXCanvas.java:186:
error: incorrect use of inline tag
 * @inheritDoc
   ^
/Users/zonski/Development/openjdk/jfx78/jfx78-zonski/jfx78/modules/graphics/src/main/java/javafx/scene/input/Clipboard.java:93:
error: end tag missing: /code
 * precode

/Users/zonski/Development/openjdk/jfx78/jfx78-zonski/jfx78/modules/controls/src/main/java/javafx/scene/control/TableColumn.java:381:
error: reference not found
 * is the {@link PropertyValueFactory} class. Refer to this class for
more


I see properties talking about linking to the JavaDoc for the whole JDK
(which I'm now downloading). I will set this up but I don't think it's
going to solve most of those errors?


Some general feedback: Seems like a lot of hoops to jump through and magic
in the build still. I'm just trying to get some JavaDoc here, nothing
fancy. Apart from the errors working, it's not overly intuitive that I have
to set a BUILD_JAVADOC=true to make 'gradle javadoc' work - can't the
gradle command just force the jdoc to build? The gradle stuff is definitely
better than before but it's still not a check it out and get busy coding
setup, which I'm hoping is the eventual goal.

The IntelliJ project that comes down with it doesn't just open either. It
seems to be dependent on all the other JDK projects being there. I don't
know how Gradle works, but the Maven approach to this would be that all
your bits and pieces are stand-alone artefacts/modules with their own POM.
Each one could be built on their own (and the jar is then put in a repo)
and then they all just reference each other as needed. If you guys deployed
to repositories (literally a filesystem that follows a naming convention -
not that hard!) for your builds and deployed each of the modules, then
community developers could just reference these instead of having to build
and reference bits and pieces that they have no interest in.





On Fri, Jul 26, 2013 at 2:38 PM, Richard Bair richard.b...@oracle.comwrote:

 You gotta set the BUILD_JAVADOC flag. Look in gradle.properties.template
 -- all the different flags are pretty well documented there.

 For sources, somebody else posted a message about wanting to do that, and
 I think that's great. Just need to get a patch to the gradle build to
 create a source zip (per platform, or just one big zip with everything in
 it?)

 Richard

 On Jul 25, 2013, at 8:24 PM, Daniel Zwolenski zon...@gmail.com wrote:

  For the Maven deploy I need a JAR of the JavaDoc and another containing
 the
  sources. That's the rules.
 
  How do I build these with the Gradle build? I tried:
 
  gradle javadoc
 
  and can't see any JavaDoc anywhere in the build directory?
 
  Admittedly I am running this on the 78 backport code, not the JFX code,
 but
  I believe this part of the build should be the same?
 
  Full log:
 
  Daniels-MacBook-Pro:jfx78 zonski$ /usr/local/gradle-1.6/bin/gradle
 javadoc
  The ConfigurationContainer.add() method has been deprecated and is
  scheduled to be removed in Gradle 2.0. Please use the create() method
  instead.
  :buildSrc:clean UP-TO-DATE
  :buildSrc:generateGrammarSource
  error(10):  internal error: Can't get property indirectDelegates using
  method get/isIndirectDelegates from org.antlr.tool.Grammar instance :
  java.lang.NullPointerException
  java.util.Objects.requireNonNull(Objects.java:203)
  java.util.ArrayList.removeAll(ArrayList.java:674)
 
 org.antlr.tool.CompositeGrammar.getIndirectDelegates(CompositeGrammar.java:222)
  org.antlr.tool.Grammar.getIndirectDelegates(Grammar.java:2620)
  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  java.lang.reflect.Method.invoke(Method.java:491)
  org.antlr.stringtemplate.language.ASTExpr.invokeMethod(ASTExpr.java:563)
 
 org.antlr.stringtemplate.language.ASTExpr.rawGetObjectProperty(ASTExpr.java:514)
 
 org.antlr.stringtemplate.language.ASTExpr.getObjectProperty(ASTExpr.java:416)
 
 org.antlr.stringtemplate.language.ActionEvaluator.attribute(ActionEvaluator.java:351)
 
 org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:136)
 
 org.antlr.stringtemplate.language.ActionEvaluator.templateApplication(ActionEvaluator.java:216)
 
 org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:126)
 
 org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:84)
  org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
 

Re: Building JavaDoc and Sources JARs

2013-07-25 Thread Richard Bair
 I've enabled that property and I now get a bunch of errors (100+), some 
 random samples: 

I just ran it both on open and closed builds and am not seeing any errors. I'm 
on the latest graphics team repo. Are you building from master? (Not that it 
should matter). You had a build working before?

 I see properties talking about linking to the JavaDoc for the whole JDK 
 (which I'm now downloading). I will set this up but I don't think it's going 
 to solve most of those errors? 

I wouldn't imagine so. I'm pretty sure I don't have that configured.

 Some general feedback: Seems like a lot of hoops to jump through and magic in 
 the build still. I'm just trying to get some JavaDoc here, nothing fancy. 
 Apart from the errors working, it's not overly intuitive that I have to set a 
 BUILD_JAVADOC=true to make 'gradle javadoc' work - can't the gradle command 
 just force the jdoc to build? The gradle stuff is definitely better than 
 before but it's still not a check it out and get busy coding setup, which I'm 
 hoping is the eventual goal. 

Yes, good question. The reason there is a flag is so that when you build the 
sdk (the default target at present) it doesn't build the javadoc which most 
developers would find irritating every time they needed to run some test code 
(although it doesn't bother me at all because I just develop from IDEA and it 
doesn't run the gradle build for incremental stuff). I don't know if the 
javadoc task can set the BUILD_JAVADOC flag early enough in the build cycle...

 The IntelliJ project that comes down with it doesn't just open either. It 
 seems to be dependent on all the other JDK projects

Which projects? I'm guessing rt-closed and deploy. Really the way it should be 
setup is the iml files for those modules should live in the rt-closed / deploy 
directories, and then the modules.xml just references them. I think then you 
could just open it and go.

 being there. I don't know how Gradle works, but the Maven approach to this 
 would be that all your bits and pieces are stand-alone artefacts/modules with 
 their own POM. Each one could be built on their own (and the jar is then put 
 in a repo) and then they all just reference each other as needed. If you guys 
 deployed to repositories (literally a filesystem that follows a naming 
 convention - not that hard!) for your builds and deployed each of the 
 modules, then community developers could just reference these instead of 
 having to build and reference bits and pieces that they have no interest in. 

We are doing the work to make it possible to publish to repositories (and have 
been doing so for months). We will do so when we can.

I'm assuming here you're talking about publishing real builds (at least OpenJFX 
ones) and not on a local developers machine ('cause there'd be no advantage to 
that alone). But maybe you can help me understand another part of this problem, 
which is that suppose we have two developers, A and B. A is on some code two 
weeks old. B is completely up to date. B does some fix and pushes it. The build 
server builds the artifacts and puts them in the repo. The next time A does a 
build, it grabs the latest built artifacts for the code A isn't building 
(WebView, for instance) and there is a compile/link error because the new 
binaries from B are out of sync with the 2 week old code that A is building 
with.

Normally you version for things like this, but in this case we're talking about 
shared libraries that are unversioned -- they're SNAPSHOT. But one snapshot is 
not equal to another. How to handle this? Right now in the closed builds we 
have an explicit ant update step you have to run to get the latest binaries.

Richard