diff options
author | Mark Wielaard <mark@klomp.org> | 2007-04-12 14:02:16 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2007-04-12 14:02:16 +0000 |
commit | 9905dbe1dcf61b7356b4384d806c5bfb9bacc0d6 (patch) | |
tree | 118290cc43535fad8b04629a3a4624bd8f8904b9 /gnu/java/awt/peer/ClasspathFontPeer.java | |
parent | 3e04432aa89cb6d4a6c0fd5ba8f5c43d82ebd8b5 (diff) | |
download | classpath-9905dbe1dcf61b7356b4384d806c5bfb9bacc0d6.tar.gz |
* gnu/java/awt/peer/ClasspathFontPeer.java (LRUCache): New static
inner class.
(transCache): New static LRUChache field.
(copyTransformToAttrs): Check whether a TransformAttribute already
exists in the transCache for the given AffineTransform.
Diffstat (limited to 'gnu/java/awt/peer/ClasspathFontPeer.java')
-rw-r--r-- | gnu/java/awt/peer/ClasspathFontPeer.java | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/gnu/java/awt/peer/ClasspathFontPeer.java b/gnu/java/awt/peer/ClasspathFontPeer.java index 2176f34a5..60fde2557 100644 --- a/gnu/java/awt/peer/ClasspathFontPeer.java +++ b/gnu/java/awt/peer/ClasspathFontPeer.java @@ -54,6 +54,7 @@ import java.awt.peer.FontPeer; import java.text.AttributedCharacterIterator; import java.text.CharacterIterator; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; @@ -120,6 +121,23 @@ public abstract class ClasspathFontPeer */ protected AffineTransform transform; + static class LRUCache<K,V> extends LinkedHashMap<K,V> + { + int max_entries; + public LRUCache(int max) + { + super(max, 0.75f, true); + max_entries = max; + } + protected boolean removeEldestEntry(Map.Entry eldest) + { + return size() > max_entries; + } + } + + private static LRUCache<AffineTransform,TransformAttribute> transCache = + new LRUCache<AffineTransform,TransformAttribute>(50); + protected static ClasspathToolkit tk() { return (ClasspathToolkit)(Toolkit.getDefaultToolkit ()); @@ -200,7 +218,19 @@ public abstract class ClasspathFontPeer protected static void copyTransformToAttrs (AffineTransform trans, Map attrs) { if (trans != null) - attrs.put(TextAttribute.TRANSFORM, new TransformAttribute (trans)); + { + TransformAttribute ta; + synchronized(transCache) + { + ta = transCache.get(trans); + if (ta == null) + { + ta = new TransformAttribute(trans); + transCache.put(trans, ta); + } + } + attrs.put(TextAttribute.TRANSFORM, ta); + } } |