Re: [visad] Display bug found in VisAD: Geometry Disappears

Hi VisAD people,

It has been about 2 months since I reported this bug and I've started to look at it again.

I'd like to report that it still manifests with the most recent checkout of visad from svn (20100628) with openjdk 1.6 and java3d 1.5.2.

Is there a visad ticketing system? has this bug been added? What is the process?

You guys are experts with this library, are there any additional suggestions I could try?

My current strategies include:
1. attempting to detect the presence of the bug and throw an exception (unfortunately the scene graph looks fine) 2. peek into the visad infrastructure and root out the race condition/bug (it's a beast and slow going inferring internal behaviours)
3. improving reproducibility (see attached)

I have an updated the test harness to reproduce the bug with build scripts and lots of docs (see attached). Just just add a visad.jar file to the lib directory.

thanks for any help you can provide!

Jason.


Dr. Jason Brownlee
Software Engineer
Australian Bureau of Meteorology


On 04/21/2010 11:38 AM, Jason Brownlee wrote:
Hi Bill,

Thanks for the suggested fix.

I have tried to programmatically zoom the display in the test harness,
without luck in addressing the symptoms of the bug.

On your suggestion, I tried simply updating the projection matrix with
its current value:

private void runTestFix(Display display) throws Exception {
Thread.sleep(2000);
ProjectionControl projectionControl =
((DisplayImplJ3D)display).getProjectionControl();
double[] matrix = projectionControl.getMatrix();
projectionControl.setMatrix(matrix);
}

I also tried a progressive zoom, and a progressive zoom with a reset,
both of which had no effect on the bug:

private void runTestFix(Display display) throws Exception {
Thread.sleep(2000);
ProjectionControl projectionControl =
((DisplayImplJ3D)display).getProjectionControl();
double[] matrix = projectionControl.getMatrix();
double [] base = {matrix[0], matrix[5], matrix[10]};
for (int i = 0; i < 4; i++) {
matrix[0] += 0.25;
matrix[5] += 0.25;
matrix[10] += 0.25;
projectionControl.setMatrix(matrix);
}
// reset
matrix[0] = base[0];
matrix[5] = base[1];
matrix[10] = base[2];
projectionControl.setMatrix(matrix);
}

A virtual desktop change will force a re-draw that will address the
symptom, causing the missing geometry to be displayed again.

Interestingly, a zoom in our operational application does cause the
geometry to be displayed most of the time for most types of geometry,
although was contingent on the amount of zoom (and I presume the number
of triggered internal display change events, or similar).


Sincerely,

Dr Jason Brownlee
Software Engineer
Australian Bureau of Meteorology




On 04/20/2010 10:54 PM, hiding@xxxxxxxxx wrote:
Jason,

Thanks for your very clear statement of the problem.
I no longer work on VisAD, but one part of your message
caught my eye:

Analysis shows the geometry is still in the scene graph,
and is live. Minimizing, resizing, further add/remove data
references, and forced doAction on the display do no
correct the bug. Major operations on the display that
force a full re-draw (switching virtual desktops on Linux,
zoom operation in our application) will cause the
geometry to be displayed again.
If this bug proves to be difficult to track down, or is even
a bug in Java3D, one work around would be, whenever data
is added to or removed from a display, to trigger a delayed
(say, after 0.5 second) redraw. My memory of Java3D is a
bit shaky, but this might be done by setting the
projection matrix (to the same value it currently has).

Good luck,
Bill



_______________________________________________
visad mailing list
visad@xxxxxxxxxxxxxxxx
For list information, to unsubscribe, visit:
http://www.unidata.ucar.edu/mailing_lists/

Attachment: visadbug.tar.gz
Description: GNU Zip compressed data