summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2007-04-12 14:11:07 +0000
committerMark Wielaard <mark@klomp.org>2007-04-12 14:11:07 +0000
commit8b3d371a630266d2ed15c4c4e8b836580a793d3f (patch)
tree837f41ce0967d8f7884c087e53f6d237cd102d55
parent13249f552e3f0a25132760f0d28346b3f16e00a0 (diff)
downloadclasspath-8b3d371a630266d2ed15c4c4e8b836580a793d3f.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--ChangeLog8
-rw-r--r--gnu/java/awt/peer/ClasspathFontPeer.java32
2 files changed, 39 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 7caa9fdd8..5d4dde3b5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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-09 Andrew John Hughes <gnu_andrew@member.fsf.org>
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);
+ }
}