diff options
author | Roman Kennke <roman@kennke.org> | 2007-03-27 09:34:49 +0000 |
---|---|---|
committer | Roman Kennke <roman@kennke.org> | 2007-03-27 09:34:49 +0000 |
commit | 38b3923ebff100a2654bcc0df731d3d2fc52e452 (patch) | |
tree | 4b35647ed3746060b447fa8c3824bcc116b58d16 | |
parent | a882c579f8ba63bfa22130f301fbcce838f035ca (diff) | |
download | classpath-38b3923ebff100a2654bcc0df731d3d2fc52e452.tar.gz |
2007-03-27 Roman Kennke <kennke@aicas.com>
* java/awt/Frame.java
(weakFrames): Make this generic and package private.
(noteFrame): Use generic WeakReference.
* java/awt/EventQueue.java
(isShutdown): Iterate over the weakFrames directly, rather than
using Frame.getFrames(). The latter iterates several times over
weakFrames completely and creates a new array on each call. The
former iterates only once and aborts when it finds a frame which
is displayable.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | java/awt/EventQueue.java | 14 | ||||
-rw-r--r-- | java/awt/Frame.java | 9 |
3 files changed, 29 insertions, 6 deletions
@@ -1,5 +1,17 @@ 2007-03-27 Roman Kennke <kennke@aicas.com> + * java/awt/Frame.java + (weakFrames): Make this generic and package private. + (noteFrame): Use generic WeakReference. + * java/awt/EventQueue.java + (isShutdown): Iterate over the weakFrames directly, rather than + using Frame.getFrames(). The latter iterates several times over + weakFrames completely and creates a new array on each call. The + former iterates only once and aborts when it finds a frame which + is displayable. + +2007-03-27 Roman Kennke <kennke@aicas.com> + * javax/swing/JScrollBar.java (getUnitIncrement(int)): Don't multiply direction parameter. (getBlockIncrement(int)): Don't multiply direction parameter. diff --git a/java/awt/EventQueue.java b/java/awt/EventQueue.java index 74dbd5fb6..a76ba1afb 100644 --- a/java/awt/EventQueue.java +++ b/java/awt/EventQueue.java @@ -48,6 +48,7 @@ import java.awt.event.InvocationEvent; import java.awt.event.PaintEvent; import java.awt.peer.ComponentPeer; import java.awt.peer.LightweightPeer; +import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.util.EmptyStackException; @@ -128,10 +129,15 @@ public class EventQueue if (peekEvent() != null) return false; - Frame[] frames = Frame.getFrames(); - for (int i = 0; i < frames.length; ++i) - if (frames[i].isDisplayable()) - return false; + synchronized (Frame.weakFrames) + { + for (WeakReference<Frame> r : Frame.weakFrames) + { + Frame f = (Frame) r.get(); + if (f != null && f.isDisplayable()) + return false; + } + } return true; } diff --git a/java/awt/Frame.java b/java/awt/Frame.java index d5cc7f531..970b420eb 100644 --- a/java/awt/Frame.java +++ b/java/awt/Frame.java @@ -484,13 +484,18 @@ public class Frame extends Window implements MenuContainer return super.paramString () + ",title=" + title + resizable + state; } - private static ArrayList weakFrames = new ArrayList(); + /** + * This is static private because we need to access this efficiently from + * the EventQueue. + */ + static ArrayList<WeakReference<Frame>> weakFrames = + new ArrayList<WeakReference<Frame>>(); private static void noteFrame(Frame f) { synchronized (weakFrames) { - weakFrames.add(new WeakReference(f)); + weakFrames.add(new WeakReference<Frame>(f)); } } |