On Apr 20, 2006, at 10:48 AM, Marc Richards wrote:
> I feel like I must be missing something about how setImmutable
> works. Any
> suggestions? I'm using WinXP with the most recent version of MASON.
Okay, dufus me, I didn't see the XP statement. :-)
In short: I think what's happening is that we've optimized the
FastValueGridPortrayal2D to the point where immutability doesn't buy
you much.
The general idea of immutablity was to allow the system to optimize
itself with the knowledge that you're rarely changing things. For a
FastValueGridPortrayal2D, this optimization takes the form of two
optimizations:
1. We can nudge the system to consider using a stretched buffered image
2. If so, we don't bother to reassemble the buffered image; just use
the preexisting one.
For #1: Probably not a big deal. On Windows, using a stretched
buffered image can actually hurt; but at any rate, Windows just draws
it by drawing lots of rects. On the Mac, a stretched buffered image
is an enormous improvement; but it's used always anyway. If you set
USE_BUFFER, it'll be used regardless. If you set DONT_USE_BUFFER,
it'll never be used. If you set DEFAULT, then on Windows it will be
used if the field is immutable and not brand new.
For #2: used to be a much bigger deal, but now that we're writing
directly into the low-level image map data, it's almost totally lost
in the noise.
So where might immutability still be of value to you? Mostly if your
color mapping facility is something expensive, rather than using
SimpleColorMap.
How about image buffering? If I recall, it doesn't make a big
difference in Windows, but in Linux, buffering is much faster if you
have TONS of memory; otherwise, it's significantly slower. You might
try giving yourself lots of Java heap memory on XP too and see what
happens just for fun. Also, both buffering and rects are SLOW, if
I recall, if you draw transparently. But we don't have an option to
force opaque images -- maybe we should, it'd be lots faster in
Windows. You might also try fooling around with
FastValueGridPortrayal2D's image data organization (we use
BufferedImage.TYPE_INT_ARGB, but on Windows maybe there's something
faster? Certainly an opaque image maybe?)
Sean
|