We've had numerous discussions before regarding supporting Oracle Java 
on Mac, and the 2.0 pre-releases have been providing a separate package 
to support Oracle Java.  Unfortunately, however, it has come to light 
that the performance of the TurboVNC Viewer under Java 1.7 and later is 
much much less than it was under Apple's Java 1.6, due to the omission 
of the Quartz-accelerated Java 2D blitter (not sure why that never made 
it into Oracle Java-- maybe licensing issues.)  Java 1.7 and later only 
allow OpenGL drawing on Macs, and the way this is implemented makes 
things considerably slower, particularly when dealing with non-3D VNC 
workloads.  I was able to improve performance considerably with OpenGL 
blitting by using a BGRA BufferedImage as the back buffer instead of 
BGRX (when using BGRX, the blitter has to enable OpenGL pixel transforms 
to set the alpha components to opaque, and this often causes the 
graphics driver to use an unaccelerated glDrawPixels() path.)  However, 
the overall performance for 2D app workloads is still something like 20x 
slower with Java 1.7+ vs. Java 1.6, and for 3D apps, it's still about 3x 
slower.

I've contacted the Oracle developers who seem to be on top of these 
issues-- namely the ones who mention having a new solution for Java 9 
that's supposed to improve this:

http://mail.openjdk.java.net/pipermail/2d-dev/2014-October/004870.html

but my own testing with the latest Java 9 snapshot build shows no 
difference.

At the moment, my best course of action seems to be downplaying the Java 
1.7+ support and recommending that users still use Apple Java 1.6 
whenever possible.  Given that Apple Java 1.6 can be installed 
concurrently with a more recent Java plugin (so basically, you have Java 
1.6 installed for using TurboVNC as a standalone app, but Oracle Java 
1.7+ is used by your browser), this seems doable.  However, the slower 
Java would be used for Java Web Start, which is not a good thing.

I'm hoping someone may have some ideas or knowledge that might help 
simplify this problem.  I know some of you are using Java 1.7+ with 
TurboVNC already, which is what prompted me to create a separate package 
to support the Oracle flavor.  I just don't like having to apologize for 
that package or to recommend that people use an older release of Java 
that's not really supported anymore in order to achieve decent performance.

Options at the moment seem to be:

(1) Keep things like they were in TurboVNC 1.2.x-- provide a standalone 
package only for Apple Java 1.6 and make that a system requirement for 
running the standalone TurboVNC Viewer app.  Apple Java 1.6 still works 
on more recent systems, but it isn't being actively maintained anymore.

(2) Provide a standalone package for Oracle Java 1.7+ as well, like 
we've been doing for the 2.0 pre-releases, but downplay that package and 
explain in the documentation why it won't perform as well.

(3) Bundle a custom JRE build in the Mac app-- but AFAIK, you can only 
(legally) do that with OpenJDK, which doesn't have the 
Quartz-accelerated blitter.

------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
TurboVNC-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/turbovnc-users

Reply via email to