summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2007-04-12 14:02:16 +0000
committerMark Wielaard <mark@klomp.org>2007-04-12 14:02:16 +0000
commit9905dbe1dcf61b7356b4384d806c5bfb9bacc0d6 (patch)
tree118290cc43535fad8b04629a3a4624bd8f8904b9
parent3e04432aa89cb6d4a6c0fd5ba8f5c43d82ebd8b5 (diff)
downloadclasspath-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--ChangeLog8
-rw-r--r--gnu/java/awt/peer/ClasspathFontPeer.java32
2 files changed, 39 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e8bd31a92..f8144ea4c 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-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);
+ }
}