Skip to content

Commit 2adcfb0

Browse files
committed
Cache frozen call targets in multicontext mode
1 parent 31e8657 commit 2adcfb0

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -650,9 +650,11 @@ public static PythonModule importFrozenModuleObject(Node inliningTarget, PConstr
650650
}
651651

652652
private static RootCallTarget createCallTarget(PythonContext context, FrozenInfo info) {
653-
String name = PythonLanguage.FROZEN_FILENAME_PREFIX + info.name + PythonLanguage.FROZEN_FILENAME_SUFFIX;
654-
Source source = Source.newBuilder("python", "", name).content(Source.CONTENT_NONE).build();
655-
return context.getLanguage().callTargetFromBytecode(context, source, info.code);
653+
return (RootCallTarget) context.getLanguage().cacheCode(new PythonLanguage.CodeCacheKey(info.origName, System.identityHashCode(info.code)), () -> {
654+
String name = PythonLanguage.FROZEN_FILENAME_PREFIX + info.name + PythonLanguage.FROZEN_FILENAME_SUFFIX;
655+
Source source = Source.newBuilder("python", "", name).content(Source.CONTENT_NONE).build();
656+
return PythonLanguage.callTargetFromBytecode(context, source, info.code);
657+
});
656658
}
657659

658660
/*

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/MarshalModuleBuiltins.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@
120120
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryClinicBuiltinNode;
121121
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryClinicBuiltinNode;
122122
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
123+
import com.oracle.graal.python.runtime.PythonContext;
124+
import com.oracle.graal.python.runtime.PythonOptions;
123125
import com.oracle.graal.python.runtime.ExecutionContext.BoundaryCallContext;
124126
import com.oracle.graal.python.runtime.IndirectCallData.BoundaryCallData;
125127
import com.oracle.graal.python.runtime.IndirectCallData.InteropCallData;
126-
import com.oracle.graal.python.runtime.PythonContext;
127-
import com.oracle.graal.python.runtime.PythonOptions;
128128
import com.oracle.graal.python.runtime.object.PFactory;
129129
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
130130
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
@@ -261,7 +261,10 @@ static Object doit(VirtualFrame frame, Object file,
261261
}
262262
}
263263

264-
// cache_key is a GraalPy-specific keyword
264+
/*
265+
* cache_key is a GraalPy-specific keyword used in the code cache in multi-context mode,
266+
* together with the filename from the unmarshalled code
267+
*/
265268
@Builtin(name = "loads", minNumOfPositionalArgs = 1, numOfPositionalOnlyArgs = 1, parameterNames = {"bytes"}, keywordOnlyNames = {"cache_key"})
266269
@ArgumentClinic(name = "bytes", conversion = ClinicConversion.ReadableBuffer)
267270
@ArgumentClinic(name = "cache_key", conversion = ClinicConversion.Long, defaultValue = "0")

0 commit comments

Comments
 (0)