X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=swt%2Forg.argeo.cms.swt%2Fsrc%2Forg%2Fargeo%2Fcms%2Fswt%2Fosgi%2FBundleSvgTheme.java;h=74de83e09ce895ce442e214ef64e5bb835163f9f;hb=9fd6762a7ac6bb5102dcd2c5a3bc876aa5c942c4;hp=038a1fca62a210ea331d12600bfac01fd44a67d5;hpb=1be0ae26bfa144717277ebac609492cb73157ab9;p=lgpl%2Fargeo-commons.git diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/osgi/BundleSvgTheme.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/osgi/BundleSvgTheme.java index 038a1fca6..74de83e09 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/osgi/BundleSvgTheme.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/osgi/BundleSvgTheme.java @@ -26,7 +26,7 @@ import org.osgi.framework.BundleContext; public class BundleSvgTheme extends BundleCmsSwtTheme { private final static Logger logger = System.getLogger(BundleSvgTheme.class.getName()); -// private Map> imageCache = Collections.synchronizedMap(new HashMap<>()); + private Map> imageDataCache = Collections.synchronizedMap(new HashMap<>()); private Map transcoders = Collections.synchronizedMap(new HashMap<>()); @@ -64,6 +64,12 @@ public class BundleSvgTheme extends BundleCmsSwtTheme { } protected ImageData loadFromSvg(String path, int size) { + ImageData imageData = null; + if (imageDataCache.containsKey(path)) + imageData = imageDataCache.get(path).get(size); + if (imageData != null) + return imageData; + ImageTranscoder transcoder = null; synchronized (this) { transcoder = transcoders.get(size); @@ -75,7 +81,6 @@ public class BundleSvgTheme extends BundleCmsSwtTheme { transcoders.put(size, transcoder); } } - ImageData imageData; try (InputStream in = getResourceAsStream(path); ByteArrayOutputStream out = new ByteArrayOutputStream();) { if (in == null) throw new IllegalArgumentException(path + " not found"); @@ -90,6 +95,11 @@ public class BundleSvgTheme extends BundleCmsSwtTheme { throw new RuntimeException("Cannot transcode SVG " + path, e); } + // cache it + if (!imageDataCache.containsKey(path)) + imageDataCache.put(path, Collections.synchronizedMap(new HashMap<>())); + imageDataCache.get(path).put(size, imageData); + return imageData; }