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 | |
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.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gnu/java/awt/peer/ClasspathFontPeer.java | 32 |
2 files changed, 39 insertions, 1 deletions
@@ -1,5 +1,13 @@ 2007-04-12 Mark Wielaard <mark@klomp.org> + * 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. + +2007-04-12 Mark Wielaard <mark@klomp.org> + * configure.ac (COMPILE_GTK_PEER): Add check for cairo >= 1.1.8. 2007-04-11 Christian Thalinger <twisti@complang.tuwien.ac.at> 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); + } } |