From ae2efefd2d3a1b83fecced5e7af1b643c1df6eb1 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Fri, 18 Nov 2016 14:06:33 +0100 Subject: [PATCH] cache in RBuiltinPackage.getRFiles (speeds up context creation) --- .../oracle/truffle/r/nodes/builtin/RBuiltinPackage.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java index bc9a8097e0..521ae38163 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Supplier; import com.oracle.truffle.api.frame.MaterializedFrame; @@ -100,13 +101,19 @@ public abstract class RBuiltinPackage { return name; } + private static final ConcurrentHashMap<String, String[]> rFilesCache = new ConcurrentHashMap<>(); + /** * Get a list of R override files for package {@code pkgName}, from the {@code pkgName/R} * subdirectory. */ public static ArrayList<Source> getRFiles(String pkgName) { ArrayList<Source> componentList = new ArrayList<>(); - String[] rFileContents = ResourceHandlerFactory.getHandler().getRFiles(RBuiltinPackage.class, pkgName); + String[] rFileContents = rFilesCache.get(pkgName); + if (rFileContents == null) { + rFileContents = ResourceHandlerFactory.getHandler().getRFiles(RBuiltinPackage.class, pkgName); + rFilesCache.put(pkgName, rFileContents); + } for (String rFileContent : rFileContents) { Source content = RSource.fromTextInternal(rFileContent, RSource.Internal.R_IMPL); componentList.add(content); -- GitLab