From 8b3d371a630266d2ed15c4c4e8b836580a793d3f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 12 Apr 2007 14:11:07 +0000 Subject: * 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. --- ChangeLog | 8 ++++++++ gnu/java/awt/peer/ClasspathFontPeer.java | 32 +++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 7caa9fdd8..5d4dde3b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-04-12 Mark Wielaard + + * 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 * configure.ac (COMPILE_GTK_PEER): Add check for cairo >= 1.1.8. 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 extends LinkedHashMap + { + 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 transCache = + new LRUCache(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); + } } -- cgit v1.2.1