Hello,
I have a control that allows a child component to be expanded and hidden from
view using an animated effect. Think of opening and closing a drawer from your
desk.
Anyway, the part of the software that creates the animation effect looks pretty
much like this:
[code]
Rectangle bounds = [i]Bounds of component to be animated, initially collapsed
(width = 0)[/i]
JComponent parent = [i]The parent of the animated component[/i]
Graphics2D g = (Graphics2D)parent.getGraphics().create();
while ( animating )
{
long start = System.currentTimeMillis();
g.fill( bounds );
System.err.println( "fill " + bounds + ": " +
( System.currentTimeMillis() - start ) + " ms" );
if ( expanding )
{
bounds.width = bounds.width + 15; /* Creates animating effect */
}
else /* for collapsing */
{
Rectangle prevBounds = new Rectangle( bounds );
bounds.width = bounds.width - 15;
Area bigArea = new Area( prevBounds );
bigArea.subtract( new Area( bounds ) );
start = System.currentTimeMillis();
parent.paintImmediately( bigArea.getBounds() );
System.err.println( "paintImmediately: " +
( System.currentTimeMillis() - start ) + " ms" );
}
}
[/code]
After all this, the [i]animated[/i] component is added to the parent at
[i]bounds[/i] if expanding or removed prior to this if collapsing.
My question relates to the performance of these operations. On JavaSE
1.5.0_08, the lines I have added that print the number of milliseconds taken in
the calls to [i]fill[/i] and [i]paintImmediately[/i] produce the following
output:
[pre]
fill java.awt.Rectangle[x=0,y=277,width=0,height=516]: 2 ms
fill java.awt.Rectangle[x=0,y=277,width=15,height=516]: 0 ms
fill java.awt.Rectangle[x=0,y=277,width=30,height=516]: 1 ms
fill java.awt.Rectangle[x=0,y=277,width=45,height=516]: 0 ms
... Now collapsing
paintImmediately: 4 ms
fill java.awt.Rectangle[x=0,y=277,width=442,height=516]: 0 ms
paintImmediately: 11 ms
fill java.awt.Rectangle[x=0,y=277,width=427,height=516]: 0 ms
paintImmediately: 2 ms
fill java.awt.Rectangle[x=0,y=277,width=412,height=516]: 1 ms
paintImmediately: 2 ms
[/pre]
And that looks pretty good! However, running with 1.6.0 gives me this output:
[pre]
fill java.awt.Rectangle[x=0,y=277,width=0,height=516]: 2 ms
fill java.awt.Rectangle[x=0,y=277,width=15,height=516]: 19 ms
fill java.awt.Rectangle[x=0,y=277,width=30,height=516]: 20 ms
fill java.awt.Rectangle[x=0,y=277,width=45,height=516]: 20 ms
... Now collapsing
paintImmediately: 6 ms
fill java.awt.Rectangle[x=0,y=277,width=442,height=516]: 16 ms
paintImmediately: 3 ms
fill java.awt.Rectangle[x=0,y=277,width=427,height=516]: 24 ms
paintImmediately: 4 ms
fill java.awt.Rectangle[x=0,y=277,width=412,height=516]: 20 ms
paintImmediately: 4 ms
[/pre]
Which is clearly much slower, at least in the [i]fill[/i] operation. So, what
could be the reason for this?
My platform is a Blade 2500 (Silver) 2xSPARC IIIi, 4GB running Solaris 8_04.
My (perhaps) relevant JVM flags are:
[pre]
-Xms1536m
-Xmx2048m
-Xconcurrentio
-XX:+UseConcMarkSweepGC
-d64
-Dawt.toolkit=sun.awt.X11.XToolkit
[/pre]
Any advice or suggestions would be greatly appreciated!
Thanks,
-Garrett Wampole
[Message sent by forum member 'gwampole' (gwampole)]
http://forums.java.net/jive/thread.jspa?messageID=195131
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".