Skip to content

Commit c180bce

Browse files
committed
Trace resource accesses
1 parent 235dcea commit c180bce

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonSupport;
7272
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
7373
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
74+
import com.oracle.svm.core.metadata.MetadataTracer;
7475
import com.oracle.svm.core.util.ImageHeapMap;
7576
import com.oracle.svm.core.util.VMError;
7677
import com.oracle.svm.util.GlobUtils;
@@ -385,6 +386,7 @@ public static ResourceStorageEntryBase getAtRuntime(Module module, String resour
385386
return null;
386387
}
387388
}
389+
traceResourceAccess(resourceName, moduleName);
388390
if (!entry.getConditions().satisfied()) {
389391
return missingMetadata(resourceName, throwOnMissing);
390392
}
@@ -414,6 +416,12 @@ public static ResourceStorageEntryBase getAtRuntime(Module module, String resour
414416
return unconditionalEntry;
415417
}
416418

419+
private static void traceResourceAccess(String resourceName, String moduleName) {
420+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
421+
MetadataTracer.singleton().traceResource(resourceName, moduleName);
422+
}
423+
}
424+
417425
private static ConditionalRuntimeValue<ResourceStorageEntryBase> getEntry(Module module, String canonicalResourceName) {
418426
for (var r : layeredSingletons()) {
419427
ConditionalRuntimeValue<ResourceStorageEntryBase> entry = r.resources.get(createStorageKey(module, canonicalResourceName));

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/LocalizationSupport.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import com.oracle.svm.core.SubstrateUtil;
5858
import com.oracle.svm.core.configure.RuntimeConditionSet;
5959
import com.oracle.svm.core.jdk.Resources;
60+
import com.oracle.svm.core.metadata.MetadataTracer;
6061
import com.oracle.svm.core.util.ImageHeapMap;
6162
import com.oracle.svm.core.util.VMError;
6263
import com.oracle.svm.util.ReflectionUtil;
@@ -293,6 +294,12 @@ public boolean isRegisteredBundleLookup(String baseName, Locale locale, Object c
293294
/* Those cases will throw a NullPointerException before any lookup */
294295
return true;
295296
}
296-
return registeredBundles.containsKey(baseName) && registeredBundles.get(baseName).satisfied();
297+
if (registeredBundles.containsKey(baseName)) {
298+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
299+
MetadataTracer.singleton().traceResourceBundle(baseName, locale);
300+
}
301+
return registeredBundles.get(baseName).satisfied();
302+
}
303+
return false;
297304
}
298305
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/metadata/MetadataTracer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@
2929
import java.nio.file.Path;
3030
import java.nio.file.Paths;
3131
import java.util.List;
32+
import java.util.Locale;
3233

3334
import org.graalvm.nativeimage.ImageSingletons;
3435
import org.graalvm.nativeimage.hosted.Feature;
36+
import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition;
3537

3638
import com.oracle.svm.configure.config.ConfigurationSet;
3739
import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature;
@@ -72,6 +74,21 @@ public static MetadataTracer singleton() {
7274
return ImageSingletons.lookup(MetadataTracer.class);
7375
}
7476

77+
public boolean enabled() {
78+
VMError.guarantee(Options.MetadataTracingSupport.getValue());
79+
return config != null;
80+
}
81+
82+
public void traceResource(String resourceName, String moduleName) {
83+
assert enabled();
84+
config.getResourceConfiguration().addGlobPattern(UnresolvedConfigurationCondition.alwaysTrue(), resourceName, moduleName);
85+
}
86+
87+
public void traceResourceBundle(String baseName, Locale locale) {
88+
assert enabled();
89+
config.getResourceConfiguration().addBundle(UnresolvedConfigurationCondition.alwaysTrue(), baseName, List.of(locale));
90+
}
91+
7592
private static void initialize() {
7693
assert Options.MetadataTracingSupport.getValue();
7794
MetadataTracer singleton = MetadataTracer.singleton();

0 commit comments

Comments
 (0)